Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
Come faccio a risolvere l'errore "Failed to receive X resource signal(s) within the specified duration" in AWS CloudFormation?
Ricevo il seguente errore: "Failed to receive X resource signal(s) within the specified duration" per le istanze Linux Amazon Elastic Compute Cloud (Amazon EC2) in AWS CloudFormation.
Breve descrizione
Si verifica questo errore quando CloudFormation non riceve correttamente i segnali per le risorse che hanno un attributo CreationPolicy specificato con un ResourceSignal al suo interno. L'errore potrebbe verificarsi per un'istanza Amazon EC2, un gruppo Auto Scaling o una condizione di attesa.
Nota: la seguente risoluzione si applica solo agli stack CloudFormation creati con istanze Linux. Per le istanze Windows, consulta How do I resolve the error "Failed to receive X resource signal(s) within the specified duration" for EC2 Windows instances in AWS CloudFormation?
Soluzione
In base al caso d'uso, utilizza i seguenti passaggi per risolvere il problema.
Nota: per evitare il rollback dello stack, scegli Mantieni le risorse con il provisioning riuscito per le Opzioni di errore dello stack nella console CloudFormation. Questa opzione significa che non è previsto alcun rollback in caso di errore e l'istanza non verrà terminata finché non elimini lo stack.
Lo script cfn-signal non è installato sull'istanza dello stack CloudFormation
Per confermare che lo script cfn-signal è installato sull'istanza configurata per inviare segnali allo stack, completa i seguenti passaggi:
-
Usa uno dei seguenti script per confermare che lo script cfn-signal è installato.
Per confermare che lo script cfn-signal si trova nella tua directory, esegui il seguente comando:
$ sudo find / -name cfn-signal /opt/aws/bin/cfn-signal /opt/aws/apitools/cfn-init-1.4-30.amzn2/bin/cfn-sign
Per confermare che il pacchetto di script helper CloudFormation che contiene lo script cfn-signal è installato, esegui il seguente comando:
$ sudo rpm -q aws-cfn-bootstrap aws-cfn-bootstrap-1.4-30.amzn2.noarch
Importante: il comando precedente funziona solo sulle distribuzioni che utilizzano la gestione dei pacchetti RPM. Per impostazione predefinita, gli script helper CloudFormation sono installati su Amazon Linux Amazon Machine Image (AMI). Per installare gli script helper, consulta CloudFormation helper scripts reference.
Nel modello AWS CloudFormation sono presenti errori di sintassi o valori errati
Per trovare gli errori e i valori errati, completa i seguenti passaggi:
- In un editor di codice, apri il modello per il tuo stack. Quindi, trova la sezione della proprietà UserData.
- Verifica la presenza di errori di sintassi, spazi mancanti, errori di ortografia e altri errori di battitura.
- Verifica che i valori per le proprietà dello stack, della risorsa e della Regione AWS siano corretti.
**Nota:**Controlla lo script bootstrap incluso nella proprietà userData. Lo script chiama cfn-signal. Verifica la presenza di errori di sintassi o valori errati.
Se la segnalazione avviene all'interno dei comandi cfn-init, verifica la presenza di informazioni sul segnale nei log cfn-init. Per cercare errori nei log cloud-init o cfn-init, usa SSH per connetterti alla tua istanza. Quindi, utilizza la parola chiave "error" o "failure" per cercare messaggi di errore o errore dettagliati nei seguenti log:
/var/log/cloud-init-output.log/var/log/cloud-init.log /var/log/cfn-init.log /var/log/cfn-init-cmd.log /var/log/cfn-wire.log
Per analizzare tutte le istanze delle parole "error" o "failure" nei file /var/log/cfn o /var/log/cloud-init, esegui il seguente comando:
grep -ni 'error\|failure' $(sudo find /var/log -name cfn\* -or -name cloud-init\*)
Nota: il comando precedente restituisce il nome del file, il numero di riga e il messaggio di errore.
Il valore della proprietà timeout per l'attributo CreationPolicy è troppo basso
Il valore della proprietà timeout è definito dall'attributo CreationPolicy. Verifica che il valore sia sufficientemente alto per eseguire le attività prima che lo script cfn-signal invii segnali alle risorse di CloudFormation.
Per controllare il valore della proprietà timeout e confrontare i timestamp di segnalazione e di errore delle risorse, completa i seguenti passaggi:
-
In un editor di codice, apri il modello CloudFormation per il tuo stack per trovare il valore della proprietà timeout.
**Nota:**Il valore della proprietà timeout è il tempo massimo in cui CloudFormation attende un segnale prima di restituire un errore. -
Per avere una stima di quando è stato attivato lo script cfn-signal, usa SSH per connetterti all'istanza. Quindi, esegui il seguente comando:
less /var/log/cfn-init.log
Il file di log mostra un timestamp quando il segnale SUCCESS viene inviato alle risorse CloudFormation.
Esempio:2019-01-11 12:46:40,101 [DEBUG] Signaling resource EC2Instance in stack XXXX with unique ID i-045a536a3dfc8ccad and status SUCCESS
-
Apri la console CloudFormation.
-
Scegli la vista Eventi.
-
Scegli Motivo dello stato. Espandi la riga relativa all'evento con il motivo dello stato "Non è stato possibile ricevere X segnali di risorse entro la durata specificata."
-
Confronta il timestamp di segnalazione con quello di errore della risorsa.
Nota: per un corretto completamento, lo script deve inviare il segnale prima che l'istanza venga creata o prima di non riuscire a crearla.
Il segnale cfn non viene inviato dall'istanza
Verifica che il segnale ricevuto da CloudFormation provenga dall'istanza. Controlla il log cfn wire disponibile all'indirizzo /var/log/cfn-wire.log. Se la risposta non è 200, potrebbe esserci un problema di connettività tra la tua istanza e l'endpoint di CloudFormation.
Quando invii segnali da una posizione che non corrisponde alla tua istanza, usa l'API SignalResource. Ad esempio, puoi utilizzare una funzione AWS Lambda per richiamare l'API SignalResource e quindi inviare il segnale allo stack. Se ricevi un errore, usa CloudWatch Logs per controllare i tuoi log Lambda e capire perché il segnale non è stato inviato allo stack.

Contenuto pertinente
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata 6 mesi fa
- AWS UFFICIALEAggiornata 5 mesi fa