Come posso risolvere i problemi relativi all'inclusione dei metadati su un'istanza EC2 in CloudFormation?

Ultimo aggiornamento: 12/04/2022

Ho usato AWS::CloudFormation::Init per includere metadati su un'istanza Amazon Elastic Cloud Compute (Amazon EC2), ma non vedo le modifiche sull'istanza.

Breve descrizione

I problemi con i metadati delle istanze EC2 in uno stack AWS CloudFormation possono verificarsi per i seguenti motivi:

  • Lo script di supporto cfn-init non è installato su una o più istanze dello stack CloudFormation. Per risolvere questo problema, completa i passaggi nella sezione Verifica che lo script di supporto cfn-init sia installato.
  • L'istanza non è connessa a Internet. Per risolvere il problema, completa i passaggi indicati nella sezione Verifi che l'istanza sia connessa a Internet.
  • Il modello CloudFormation contiene errori di sintassi o valori errati. Per risolvere questo problema, completa i passaggi nella sezione Cerca errori nei registri cloud-init o cfn-init.

Importante: prima di completare le seguenti risoluzioni, imposta l'opzione Ripristino dello stato precedente in caso di guasto per lo stack CloudFormation su No.

Nota: le seguenti risoluzioni sono specifiche per gli stack CloudFormation creati con istanze Linux.

Risoluzione

Verifica che lo script di supporto cfn-init sia installato

Per confermare che cfn-init sia installato sull'istanza configurata per inviare segnali alle risorse di CloudFormation:

1.    Connettiti all'istanza utilizzando SSH.

2.    Esegui uno dei seguenti comandi per verificare che cfn-init o il pacchetto aws-cfn-bootstrap siano installati nella directory.

cfn-init:

$ sudo find / -name cfn-init
/opt/aws/bin/cfn-init
/opt/aws/apitools/cfn-init
/opt/aws/apitools/cfn-init-1.4-34.24.amzn1/bin/cfn-init
/var/lib/cfn-init

-oppure-

pacchetto aws-cfn-bootstrap:

$ sudo rpm -q aws-cfn-bootstrap
aws-cfn-bootstrap-1.4-34.24.amzn1.noarch

Importante: il comando precedente funziona solo su distribuzioni che utilizzano il Gestore pacchetti RPM.

Nota: di default, gli script di supporto di CloudFormation sono installati nell'Amazon Linux Amazon Machine Image (AMI). Se gli script di supporto di CloudFormation non sono installati, consulta Riferimento agli script di supporto di CloudFormation per istruzioni su come installarli.

Verifica che l'istanza sia connessa a Internet

Se l'istanza si trova in un cloud privato virtuale Amazon (Amazon VPC), può connettersi a Internet tramite:

  • Un dispositivo NAT in una sottorete privata
  • Un gateway internet in una sottorete pubblica

Per testare la connessione Internet dell'istanza, accedi a una pagina Web pubblica, come AWS, ed esegui un comando curl sull'istanza. Ad esempio:

curl -I https://aws.amazon.com

Nota: se l'istanza è connessa a Internet, il comando restituisce un codice di stato HTTP 200.

Se utilizzi un endpoint VPC di interfaccia, l'endpoint deve trovarsi nella stessa Regione AWS dell'istanza. Inoltre, il gruppo di sicurezza collegato all'endpoint dell'interfaccia deve consentire le connessioni in ingresso sulla porta 443 dalla sottorete privata di Amazon VPC.

Cerca errori nei registri cloud-init o cfn-init

Per cercare errori nei registri di cloud-init o nei log di cfn-init:

1.    Connettiti alla tua istanza tramite SSH.

2.    Cerca messaggi di errore o di errore dettagliati cercando le parole chiave "errore" o "fallimento" nei seguenti registri:

  • /var/log/cloud-init-output.log
  • /var/log/cloud-init.log
  • /var/log/cfn-init.log
  • /var/log/cfn-init-cmd.log

Per analizzare tutte le istanze delle parole "errore" o "fallimento" nei file /var/log/cfn o /var/log/cloud-init, esegui il seguente comando:

grep -ni 'error\|failure' $(sudo find /var/log -name cfn-init\* -or -name cloud-init\*)

Nota: il comando precedente restituisce il nome del file, il numero di riga e il messaggio di errore.

Cerca cfn-init.log. Se non riesci a trovarlo, cfn-init non è stato eseguito. È inoltre necessario controllare cloud-init-output.log e cloud-init.log per controllare se si è verificato un errore durante l'esecuzione dei dati utente. Dopo aver identificato l'errore, correggilo in base al messaggio di errore e quindi ricrea lo stack.

Se esiste cfn-init.log, è stato eseguito cfn-init, ma si è verificato un errore. Controlla cfn-init.log per vedere ciò che non è andato a buon fine e sistemarlo in base al messaggio di errore.

Per confermare che la proprietà UserData è configurata per l'esecuzione di cfn-init, completa i seguenti passaggi:

  1. In un editor di codice, apri il modello AWS CloudFormation per il tuo stack, quindi trova la sezione delle proprietà UserData.
  2. Verifica la presenza di errori, inclusi errori di sintassi, spazi mancanti, errori di ortografia e altri errori di battitura.
  3. Verificare che i valori per le proprietà stack, risorsa e Regione siano corretti.
  4. Per la funzione intrinseca Fn::Join della proprietà UserData, utilizza l'opzione -v per eseguire cfn-init in modalità dettagliata. Vedi modelli di esempio JSON e YAML.