EC2 sempre attiva e RDS sovradimensionato
L'applicazione girava su una grande istanza EC2 sempre attiva. Anche RDS era dimensionato oltre il carico reale. La capacità era fissa, i costi altrettanto, ma non esisteva una vera strategia di scalabilità.
La piattaforma utilizzava una grande istanza EC2 sempre accesa, un database RDS sovradimensionato e rilasci manuali. L’applicazione è stata containerizzata e distribuita su ECS Fargate.
L'applicazione girava su una grande istanza EC2 sempre attiva. Anche RDS era dimensionato oltre il carico reale. La capacità era fissa, i costi altrettanto, ma non esisteva una vera strategia di scalabilità.
Ridurre semplicemente la macchina avrebbe abbassato la fattura, ma lasciato invariati singolo punto di capacità, deploy manuali e impossibilità di reagire automaticamente ai cambi di carico.
L'applicazione è stata containerizzata e spostata su ECS Fargate. I task vengono distribuiti tra più Availability Zone dietro un Application Load Balancer con health check e sostituzione dei task non sani.
Le policy di autoscaling aumentano o riducono il numero di task in base all'utilizzo. RDS è stato ridimensionato sul carico effettivo, eliminando capacità pagata senza un motivo operativo.
I file statici sono stati spostati su S3 e distribuiti tramite CloudFront. Il load balancer resta responsabile del traffico applicativo, mentre CDN e object storage assorbono il lavoro adatto a loro.
GitHub Actions compila l'applicazione, costruisce e pubblica l'immagine container e aggiorna il servizio ECS. Il deploy non dipende più da operazioni manuali sulla macchina di produzione.
Il confronto tra fatture AWS comparabili ha mostrato una riduzione del 20%. L'applicazione non dipende più da una singola istanza e i deploy sono automatizzati.
Riduzione del 20% verificata confrontando le fatture.
Task distribuiti su più Availability Zone dietro ALB.
Numero di task regolato in base a CPU e memoria.
Build dell'immagine e aggiornamento ECS tramite GitHub Actions.
Posso analizzare spesa, carico, disponibilità e processo di deploy.