01 · Situazione inizialeEC2 sempre attiva e RDS sovradimensionato
L'applicazione girava su un grande server EC2 sempre attivo. Anche il database RDS era dimensionato oltre il carico reale. La capacità era fissa, i costi pure, e non esisteva una vera strategia per crescere o ridursi in base al traffico.
02 · DiagnosiRidurre la macchina non risolveva il problema operativo
Ridurre semplicemente la macchina avrebbe abbassato la fattura, ma tutto sarebbe rimasto legato a un solo server, con deploy manuali e nessuna capacità di reagire automaticamente ai cambi di carico.
03 · ComputeECS Fargate su più Availability Zone
Ho containerizzato l'applicazione e l'ho spostata su ECS Fargate. Le sue istanze (i task) girano in più zone del data center AWS, dietro un bilanciatore di carico che ne controlla la salute e sostituisce automaticamente quelle che non rispondono.
04 · ElasticitàAutoscaling basato su CPU e memoria
L'autoscaling aumenta o riduce il numero di task in base all'uso reale di CPU e memoria. Ho ridimensionato RDS sul carico effettivo, eliminando capacità che veniva pagata senza essere usata.
05 · DistribuzioneFile statici su S3 e distribuzione CloudFront
Ho spostato i file statici su S3 e li distribuisco con CloudFront, la rete che li consegna dal punto più vicino all'utente. Il load balancer resta responsabile del traffico dell'applicazione, mentre CDN e storage servono i contenuti statici e alleggeriscono i server.
06 · DeliveryBuild e deploy con GitHub Actions
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.