Vai al contenuto principale
Torna al blog
AWS Cloud DevOps Infrastruttura Costi

Ottimizzazione dei costi AWS: guida pratica

Strategie comprovate per ridurre la tua fattura AWS fino al 60%. Reserved Instances, Spot, right-sizing, monitoring e automazione del risparmio.

JM
Javier Manzano
15 marzo 2026
Ottimizzazione dei costi AWS: guida pratica

Se la tua fattura AWS cresce ogni mese senza capirne il perché, non sei solo. Secondo dati di Flexera, le aziende sprecano in media il 32% della spesa cloud. In Soamee abbiamo aiutato clienti a ridurre i costi AWS tra il 30% e il 60% senza sacrificare le prestazioni. Questa guida raccoglie le strategie che funzionano.

Prima di ottimizzare: capisci la tua fattura

Il primo passo è sapere dove va il denaro. AWS Cost Explorer è il tuo strumento principale.

Configurazione iniziale

  1. Attiva Cost Explorer nell’account root (impiega 24h per iniziare a mostrare dati)
  2. Configura i tag di costo: Etichetta tutte le risorse con almeno Environment (prod/staging/dev), Team (team responsabile) e Project (progetto)
  3. Attiva le notifiche di fatturazione: In AWS Budgets, crea alert al 50%, 80% e 100% del tuo budget mensile
# Creare un'alert di budget con AWS CLI
aws budgets create-budget \
  --account-id 123456789012 \
  --budget '{
    "BudgetName": "MonthlyBudget",
    "BudgetLimit": {"Amount": "5000", "Unit": "USD"},
    "TimeUnit": "MONTHLY",
    "BudgetType": "COST"
  }' \
  --notifications-with-subscribers '[{
    "Notification": {
      "NotificationType": "ACTUAL",
      "ComparisonOperator": "GREATER_THAN",
      "Threshold": 80,
      "ThresholdType": "PERCENTAGE"
    },
    "Subscribers": [{
      "SubscriptionType": "EMAIL",
      "Address": "devops@tuazienda.com"
    }]
  }]'

I soliti sospettati

Nella nostra esperienza, gli sprechi maggiori sono in:

  1. EC2: Istanze sovradimensionate o che girano 24/7 senza necessità
  2. RDS: Database di sviluppo accesi fuori orario
  3. EBS: Volumi orfani (senza istanza associata)
  4. Elastic IP: IP elastici non associati a nessuna istanza (vengono addebitati)
  5. S3: Dati che dovrebbero essere in Glacier o eliminati
  6. NAT Gateway: Traffico non necessario attraverso il NAT (~0.045 USD/GB)
  7. CloudWatch Logs: Ritenzione infinita di log che nessuno consulta

Strategia 1: Right-sizing (risparmio immediato del 20-40%)

Right-sizing significa adeguare la dimensione delle istanze a ciò di cui hanno davvero bisogno. È il modo più rapido per ridurre i costi.

Come rilevare istanze sovradimensionate

AWS Compute Optimizer analizza l’utilizzo di CPU, memoria e rete delle tue istanze e raccomanda dimensioni più adeguate.

# Ottenere raccomandazioni di Compute Optimizer
aws compute-optimizer get-ec2-instance-recommendations \
  --filters Name=Finding,Values=OVER_PROVISIONED \
  --output table

Regola pratica:

  • Se la CPU media è inferiore al 20% per 2 settimane, riduci di una dimensione
  • Se la memoria usata è inferiore al 50%, considera un’istanza con meno RAM
  • Se il traffico di rete è basso, non hai bisogno di istanze “network optimized”

Esempio reale

Istanza correnteUtilizzo CPU medioUtilizzo memoriaRaccomandazioneRisparmio mensile
m5.2xlarge (8 vCPU, 32 GB)12%35%m5.large (2 vCPU, 8 GB)220 USD
r5.xlarge (4 vCPU, 32 GB)8%18%t3.medium (2 vCPU, 4 GB)180 USD
c5.4xlarge (16 vCPU, 32 GB)45%60%c5.2xlarge (8 vCPU, 16 GB)175 USD

Solo con right-sizing di 3 istanze: 575 USD/mese di risparmio (6.900 USD/anno).

Strategia 2: Reserved Instances e Savings Plans

Se sai già che utilizzerai una certa capacità per 1-3 anni, le Reserved Instances (RI) e i Savings Plans offrono sconti dal 30% al 72%.

Savings Plans vs Reserved Instances

CaratteristicaSavings PlansReserved Instances
FlessibilitàAlta (qualsiasi istanza)Bassa (famiglia/regione fissa)
Sconto massimo~66% (3 anni, tutto anticipato)~72% (3 anni, tutto anticipato)
ImpegnoSpesa per ora in USDTipo di istanza specifico
Consigliato perLa maggior parte dei casiWorkload molto stabili

La nostra raccomandazione: Inizia con Compute Savings Plans per il baseline della tua infrastruttura (il carico sempre acceso). Sono più flessibili delle RI e gli sconti sono quasi uguali.

Come calcolare l’impegno corretto

Spesa on-demand mensile stabile: 3.000 USD
Fattore di sicurezza: 0.8 (impegnati sull'80% del baseline)
Impegno mensile: 2.400 USD
Sconto Savings Plan (1 anno, senza anticipazione): ~30%
Risparmio mensile: 720 USD
Risparmio annuale: 8.640 USD

Regola d’oro: Non impegnarti mai per più dell’80% del tuo carico base. Il 20% rimanente ti dà flessibilità per i cambiamenti.

Strategia 3: Spot Instances (risparmio del 60-90%)

Le Spot Instances sono capacità in eccesso di AWS offerta con sconti fino al 90%. Il compromesso: AWS può reclamarle con 2 minuti di preavviso.

Dove usare Spot

  • Pipeline CI/CD: Le build tollerano le interruzioni
  • Batch processing: Job che possono essere riavviati
  • Worker di code: Elaborazione asincrona (SQS consumer)
  • Ambienti dev/staging: Non necessitano il 100% di uptime
  • Training ML: I framework moderni supportano il checkpointing

Dove NON usare Spot

  • Database (ovviamente)
  • Web server in produzione (a meno che tu non abbia un buon setup di auto-scaling)
  • Qualsiasi cosa stateful senza meccanismo di recupero

Esempio: CI/CD con Spot

# GitHub Actions con runner self-hosted su Spot
# Configurazione di Auto Scaling Group per runner
Resources:
  CIRunnerASG:
    Type: AWS::AutoScaling::AutoScalingGroup
    Properties:
      MixedInstancesPolicy:
        InstancesDistribution:
          OnDemandBaseCapacity: 1  # 1 istanza on-demand sempre
          OnDemandPercentageAboveBaseCapacity: 0  # Il resto, Spot
          SpotAllocationStrategy: capacity-optimized
        LaunchTemplate:
          LaunchTemplateSpecification:
            LaunchTemplateId: !Ref CIRunnerLaunchTemplate
            Version: !GetAtt CIRunnerLaunchTemplate.LatestVersionNumber
          Overrides:
            - InstanceType: c5.xlarge
            - InstanceType: c5a.xlarge
            - InstanceType: c5d.xlarge
            - InstanceType: m5.xlarge

Risultato reale: Un nostro cliente ha spostato le sue build CI da c5.xlarge on-demand a Spot con fallback. Costo precedente: 800 USD/mese. Costo con Spot: 120 USD/mese. Risparmio dell’85%.

Strategia 4: Ottimizzazione dello storage

S3: Lifecycle policies

La maggior parte dei dati in S3 viene accessa frequentemente solo nei primi giorni. Dopo, nessuno li tocca.

{
  "Rules": [
    {
      "ID": "OptimizeCosts",
      "Status": "Enabled",
      "Transitions": [
        {
          "Days": 30,
          "StorageClass": "STANDARD_IA"
        },
        {
          "Days": 90,
          "StorageClass": "GLACIER_INSTANT_RETRIEVAL"
        },
        {
          "Days": 365,
          "StorageClass": "DEEP_ARCHIVE"
        }
      ],
      "Expiration": {
        "Days": 730
      }
    }
  ]
}

Costo per GB/mese:

  • S3 Standard: 0.023 USD
  • S3 Standard-IA: 0.0125 USD (-46%)
  • Glacier Instant Retrieval: 0.004 USD (-83%)
  • Glacier Deep Archive: 0.00099 USD (-96%)

EBS: Pulizia dei volumi orfani

# Trovare volumi EBS non associati a nessuna istanza
aws ec2 describe-volumes \
  --filters Name=status,Values=available \
  --query 'Volumes[*].{ID:VolumeId,Size:Size,Type:VolumeType,Created:CreateTime}' \
  --output table

È comune trovare centinaia di GB in volumi orfani di istanze che sono state eliminate ma i cui volumi sono stati dimenticati. A 0.10 USD/GB/mese per gp3, 500 GB orfani sono 50 USD/mese non necessari.

EBS: Migrare da gp2 a gp3

Se hai ancora volumi gp2, migrarli a gp3. Stesse prestazioni base, 20% più economici, e puoi configurare IOPS e throughput indipendentemente.

# Migrare un volume da gp2 a gp3
aws ec2 modify-volume \
  --volume-id vol-0123456789abcdef0 \
  --volume-type gp3

Strategia 5: Ottimizzazione della rete

NAT Gateway: il costo silenzioso

NAT Gateway addebita 0.045 USD/GB di dati elaborati, oltre a 0.045 USD/ora. Se le tue istanze private fanno molte chiamate ad API esterne o scaricano dipendenze, il costo aumenta rapidamente.

Soluzioni:

  • VPC Endpoint per servizi AWS (S3, DynamoDB, SQS): eliminano il traffico via NAT
  • Cache delle dipendenze: Non scaricare pacchetti npm da internet ad ogni build; usa un registry privato o cache
  • Rivedere il logging: CloudWatch Logs Agent può generare traffico significativo
# Creare VPC Endpoint per S3 (risparmia traffico NAT)
aws ec2 create-vpc-endpoint \
  --vpc-id vpc-0123456789abcdef0 \
  --service-name com.amazonaws.eu-west-1.s3 \
  --route-table-ids rtb-0123456789abcdef0

Caso reale: Un cliente aveva 2 TB/mese di traffico S3 attraverso NAT Gateway. Costo: 90 USD/mese solo in dati. Dopo aver creato il VPC Endpoint: 0 USD.

Strategia 6: Automazione del risparmio

Spegnere gli ambienti di sviluppo fuori orario

I tuoi ambienti dev e staging non hanno bisogno di girare alle 3 di notte di domenica.

# Funzione Lambda per spegnere/accendere istanze per orario
import boto3

def lambda_handler(event, context):
    ec2 = boto3.client('ec2')
    action = event.get('action', 'stop')  # 'stop' o 'start'

    # Cercare istanze con tag AutoSchedule=true
    filters = [
        {'Name': 'tag:AutoSchedule', 'Values': ['true']},
        {'Name': 'tag:Environment', 'Values': ['dev', 'staging']}
    ]

    if action == 'stop':
        filters.append({'Name': 'instance-state-name', 'Values': ['running']})
        instances = ec2.describe_instances(Filters=filters)
        ids = [i['InstanceId']
               for r in instances['Reservations']
               for i in r['Instances']]
        if ids:
            ec2.stop_instances(InstanceIds=ids)
            print(f"Stopped {len(ids)} instances: {ids}")

    elif action == 'start':
        filters.append({'Name': 'instance-state-name', 'Values': ['stopped']})
        instances = ec2.describe_instances(Filters=filters)
        ids = [i['InstanceId']
               for r in instances['Reservations']
               for i in r['Instances']]
        if ids:
            ec2.start_instances(InstanceIds=ids)
            print(f"Started {len(ids)} instances: {ids}")

Risparmio tipico: Se i tuoi ambienti dev costano 1.500 USD/mese girando 24/7, spegnerli dalle 20:00 alle 08:00 e nei weekend risparmia ~65%: 975 USD/mese.

Dashboard dei costi con Grafana

Configura un dashboard che il team possa vedere quotidianamente:

  • Costo giornaliero vs budget
  • Top 10 servizi per costo
  • Costo per team/progetto (basato sui tag)
  • Trend mese su mese
  • Anomalie (picchi inaspettati)

Checklist di ottimizzazione rapida

Se hai bisogno di risultati immediati, esegui questa checklist:

  • Eliminare Elastic IP non associate
  • Eliminare volumi EBS orfani
  • Eliminare snapshot vecchi (più di 6 mesi senza utilizzo)
  • Migrare volumi gp2 a gp3
  • Configurare lifecycle policy in S3
  • Creare VPC Endpoint per S3 e DynamoDB
  • Attivare Compute Optimizer e rivedere le raccomandazioni
  • Configurare alert di budget
  • Spegnere ambienti dev fuori orario
  • Rivedere i log di CloudWatch (ritenzione e volume)
  • Rivedere le istanze RDS di sviluppo

Tempo stimato: 4-8 ore. Risparmio tipico: 15-25% immediato.

Strumenti di terze parti che aiutano

StrumentoFunzionePrezzo
InfracostStimare il costo dell’infrastruttura come codice prima del deployGratuito (open source)
KubecostOttimizzazione dei costi per KubernetesGratuito (base)
VantageDashboard costi multi-cloudDa 0 USD
Spot.io (NetApp)Gestione automatica delle Spot InstanceBasato sul risparmio

Piano d’azione raccomandato

SettimanaAzioneRisparmio atteso
1Checklist rapida (pulizia)15-25%
2Right-sizing delle istanze20-40% aggiuntivo
3Automatizzare spegnimento dev/staging10-15% aggiuntivo
4Valutare Savings Plans20-30% aggiuntivo (dal mese successivo)

Risultato tipico dopo 1 mese di ottimizzazione: riduzione del 35-55% nella fattura mensile.

Conclusione

Ottimizzare i costi in AWS non è un progetto una tantum, è un’abitudine. Le aziende che lo fanno meglio hanno un “cloud cost champion” nel team (non necessariamente a tempo pieno) che rivede la fattura settimanalmente e mantiene le buone pratiche.

Se la tua fattura AWS è fuori controllo e non sai da dove iniziare, contattaci. Facciamo audit dei costi cloud dove identifichiamo opportunità di risparmio e ti aiutiamo a implementarle.

Non perderti nulla

JM

Javier Manzano

Appassionato di tecnologia e sviluppo software. Condividendo conoscenze e esperienze per aiutare altri sviluppatori a crescere.

Ti è piaciuto questo articolo?

Se hai bisogno di aiuto con il tuo progetto di sviluppo, siamo qui per te.

Prenota una call gratuita →