EC2 in Auto Scaling e deployment con CodeDeploy

AWS CodeDeploy blue/green, Auto Scaling e pipeline CI/CD. In questo articolo descriviamo un progetto realizzato su AWS (Amazon Web Services) che utilizza servizi gestiti per il deployment automatico di un'applicazione web.

Il progetto si basa su istanze EC2, Auto Scaling, CodeDeploy e pipeline CI/CD per garantire scalabilità, disponibilità e aggiornamenti continui del codice.
In particolare il progetto prevede:

  • EC2 (Elastic Compute Cloud): il servizio di AWS che consente di creare e gestire server virtuali in cloud.
  • Auto Scaling: un meccanismo che avvia e/o termina automaticamente istanze EC2 in base al carico di lavoro.
  • CodeDeploy: un servizio AWS che automatizza la distribuzione del software su più server.
  • Pipeline CI/CD: un processo automatizzato che consente di testare, validare e rilasciare codice in modo rapido e affidabile: CI (Continuous Integration) si riferisce all'integrazione continua del codice da parte degli sviluppatori, mentre CD (Continuous Delivery/Deployment) riguarda la distribuzione automatica in ambienti di test o produzione.

Durante i rilasci di nuove versioni dell’applicativo si verificano saltuariamente errori che causano l’interruzione del processo di deploy automatico del software. 

Il Contesto

Le applicazioni vengono rilasciate utilizzando la modalità blue/green di CodeDeploy. Questo meccanismo crea una versione dell'Auto Scaling Group con istanze EC2 contenenti la nuova release del software. Le nuove istanze sostituiscono gradualmente le precedenti, con la vecchia versione del software, al termine del deployment. Le configurazioni necessarie per CodeDeploy sono versionate in un repository Git, da cui vengono prelevate dalla pipeline CI/CD durante il processo di rilascio.

Il Problema

Durante i rilasci di alcune applicazioni, saltuariamente succedeva che CodeDeploy fallisse il deployment con ricezione della relativa mail di errore:

FAILED: AWS CodeDeploy d-T9Z0J8XHA in eu-south-1 to instance <ID>

Questi fallimenti hanno richiesto un'analisi approfondita per identificare le cause e implementare una soluzione efficace.

Gli Obiettivi

L’obiettivo principale era identificare con precisione la causa dei fallimenti nei deployment e implementare una soluzione che rendesse il processo più robusto, evitando errori futuri legati a dipendenze non essenziali.

La Soluzione. EC2 in Auto Scaling e deployment con CodeDeploy

Il troubleshooting si è articolato in più fasi.

1. Analisi CodeDeploy

È stata identificata la fase esatta in cui avveniva il fallimento, ossia quella iniziale, prima ancora dell’esecuzione di CodeDeploy.

2. Auto Scaling

Per creare le EC2 l’Auto Scaling esegue un launch template in cui vengono definiti parametri quali AMI, Instance Type, network, security group, user data ecc.

3. Agent di CodeDeploy

L’’agente di CodeDeploy viene scaricato e installato nella fase finale dello user data, questo ci fa pensare che qualcosa possa essere andato storto lì.

4. Analisi User Data

Controllando i log dello user data, è emerso che c’erano dei problemi con i repository custom ‘epel’ (Extra Packages for Enterprise Linux) che sono stati installati per alcune dipendenze non obbligatorie (weak dependencies) e per dei font custom di cui l’applicazione necessita.
Nello specifico, l'esecuzione dello User Data tentava di accedere a repository EPEL.

Tuttavia, i repository risultavano temporaneamente irraggiungibili, causando errori di tipo checksum mismatch e impedendo il completamento del processo di installazione, con conseguente fallimento nell’installazione dell’agente di CodeDeploy. Questa interruzione impediva l’avvio del deployment, rendendo l’istanza non idonea a ricevere il carico applicativo.

Soluzione applicata

Una volta ottenuta l’evidenza chiara del problema, si è provveduto a modificare la logica con cui vengono installati e configurati i font custom.

  • Rimozione dei repository EPEL dallo script di user data, in quanto non più indispensabili.
  • Spostamento dei font personalizzati e delle relative configurazioni nel repository Git, rendendoli disponibili e installabili tramite gli stage di CodeDeploy, invece che all’interno dello user data.

I Risultati

Elenchiamo di seguito i risultati, dopo l'applicazione della modifica. 

  • Deployment più stabili e veloci di alcuni minuti.
  • Eliminazione degli errori legati al download dei pacchetti.
  • Riduzione dei tempi complessivi di rilascio.
  • Nessun nuovo fallimento registrato nei deployment successivi.
     

Le Raccomandazioni Conclusive. 

Da questo caso abbiamo appreso una lezione importante, da cui ricaviamo alcune raccomandazioni che elenchiamo qui.

Prestare particolare attenzione alla scrittura delle configurazioni di user data e CodeDeploy è essenziale.

Saper impostare in modo ordinato, chiaro e funzionale i vari servizi AWS permette di evitare installazioni o configurazioni ridondanti, ottimizzando l’infrastruttura. Questo approccio non solo alleggerisce l’ambiente, ma contribuisce anche a prevenire possibili malfunzionamenti legati a componenti non necessari.

Affrontare le problematiche con un metodo strutturato e analitico è fondamentale.

La capacità di restringere progressivamente il campo delle possibili cause, fino a individuare l’origine del problema, si è dimostrata decisiva nella risoluzione dei malfunzionamenti. Questo evidenzia quanto sia cruciale poter contare su un partner tecnologico solido.

Standardizzazione degli ambienti

Disporre di ambienti separati e ben definiti (sviluppo, test e produzione) è fondamentale per garantire la qualità e l’affidabilità del software. Tuttavia, è altrettanto essenziale che questi ambienti siano quanto più possibile allineati tra loro in termini di configurazioni, versioni, dipendenze e infrastruttura.
Solo così è possibile individuare tempestivamente eventuali problemi durante lo sviluppo o il collaudo, riducendo drasticamente il rischio di errori imprevisti in produzione. Ambienti coerenti favoriscono un troubleshooting più efficace e permettono di validare le modifiche in contesti realistici, minimizzando disservizi e costi.

L’importanza del monitoraggio.

Configurare metriche e allarmi mirati consente di individuare e risolvere tempestivamente eventuali criticità.


È proprio questa combinazione di competenze tecniche e approccio metodico che rende Miriade Srl un partner affidabile e strategico, in grado di affrontare con efficacia anche le sfide più complesse. Sempre focalizzata su soluzioni stabili, scalabili e costruite su misura per rispondere agli obiettivi specifici di ogni cliente.

Ti è piaciuto quanto hai letto? Iscriviti a MISPECIAL, la nostra newsletter, per ricevere altri interessanti contenuti.

Iscriviti a MISPECIAL
Contenuti simili
DIGITAL ENTERPRISE
lug 29, 2025

L'Observability è un approccio che promette di offrire una visione completa e robusta del proprio ecosistema dati. Ma cosa significa esattamente e perché sta diventando così cruciale per le aziende?

DIGITAL ENTERPRISE
EC2 in Auto Scaling e deployment con CodeDeploy – Analisi, Diagnosi e Soluzione
lug 23, 2025

EC2 in Auto Scaling e deployment con CodeDeploy – Analisi, Diagnosi e Soluzione