Come faccio a risolvere l'errore "Non è stato possibile ricevere X segnali di risorse entro la durata specificata" in AWS CloudFormation?

6 minuti di lettura
0

In AWS CloudFormation, ricevo il seguente messaggio di errore: "Non è stato possibile ricevere X segnali di risorse entro la durata specificata" Come faccio a risolvere questo errore?

Breve descrizione

Questo errore viene visualizzato quando un'istanza di Amazon Elastic Compute Cloud (Amazon EC2), un Gruppo Auto Scaling o una WaitCondition non ricevono segnali di successo da una o più istanze nel periodo di tempo specificato dall'attributo CreationPolicy.

Questo errore può verificarsi in uno dei seguenti scenari:

  • Scenario 1: lo script cfn-signal non è installato su una o più istanze dello stack AWS CloudFormation.
  • Scenario 2: nel modello AWS CloudFormation sono presenti errori di sintassi o valori errati.
  • Scenario 3: il valore della proprietà Timeout per l'attributo CreationPolicy è troppo basso.
  • Scenario 4: il segnale cfn non viene inviato dall'istanza Amazon EC2.

Nota: Gli scenari di risoluzione di questo errore si applicano solo agli stack di AWS CloudFormation creati con istanze Linux. Gli scenari non si applicano alle istanze di Windows. Per ulteriori informazioni, consulta Come risolvere i problemi relativi alla creazione di stack.

Risoluzione

Prima di seguire i passaggi indicati negli scenari di risoluzione dei problemi, imposta l'opzione Rollback in caso di errore per il tuo stack AWS CloudFormation su No.

Scenario 1: lo script cfn-signal non è installato su una o più istanze dello stack AWS CloudFormation

Per confermare che lo script cfn-signal sia installato sull'istanza configurata per inviare segnali alle risorse di AWS CloudFormation, completa i passaggi seguenti:

1.    Connettiti alla tua istanza Linux tramite SSH.

2.    Verifica che lo script cfn-signal sia installato utilizzando uno dei seguenti comandi.

Per confermare che lo script cfn-signal si trovi 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-signal

Per confermare che il pacchetto di script di supporto di AWS CloudFormation che contiene lo script cfn-signal sia 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 RPM Package Manager.

Nota: Per impostazione predefinita, gli script di supporto di AWS CloudFormation sono installati su Amazon Linux Amazon Machine Images (AMI). Se gli script di supporto di AWS CloudFormation non sono installati, consulta il riferimento agli script di supporto di CloudFormation per le istruzioni di installazione.

Scenario 2: nel modello AWS CloudFormation sono presenti errori di sintassi o valori errati

Per confermare che la proprietà UserData è configurata per segnalare le risorse AWS CloudFormation specificate dall'attributo CreationPolicy, 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.    Verifica che i valori per le proprietà dello stack, della risorsa e della regione siano corretti.

Nota: Se usi uno script bootstrap che include la proprietà UserData e che richiama lo script cfn-signal, controlla che non contenga errori di sintassi o valori errati.

Se la segnalazione avviene all'interno della chiave dei comandi di cfn-init, verifica la presenza di informazioni sulla segnalazione nei log cfn-init. Per cercare errori nei log cloud-init o cfn-init, connettiti alla tua istanza Amazon EC2 tramite SSH. Successivamente, cerca i messaggi di errore o di fallimento dettagliati cercando la parola chiave "error" o "failure" 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" in qualsiasi 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.

Scenario 3: il valore della proprietà Timeout per l'attributo CreationPolicy è troppo basso

Il valore della proprietà Timeout è definito dall'attributo CreationPolicy. Per confermare che il valore sia sufficientemente alto da consentire l'esecuzione delle attività prima che lo script cfn-signal invii segnali alle risorse di AWS CloudFormation, completa i seguenti passaggi.

Importante: I passaggi seguenti funzioneranno solo se l'istanza non viene terminata (ad esempio, da un gruppo con dimensionamento automatico). Hai già impostato l'opzione Rollback in caso di errore del tuo stack AWS CloudFormation su No. Questa opzione indica che non viene eseguito alcun rollback degli errori e l'istanza non verrà terminata finché non si elimina lo stack. È possibile connettersi all'istanza tramite SSH e quindi continuare con i seguenti passaggi per la risoluzione dei problemi.

1.    In un editor di codice, apri il modello AWS CloudFormation per il tuo stack, quindi trova il valore della proprietà Timeout.

Nota: Il valore della proprietà Timeout indica il tempo massimo di attesa di un segnale da parte di AWS CloudFormation prima di restituire un errore.

2.    Per ottenere una stima di quando viene attivato lo script cfn-signal, connettiti all'istanza tramite SSH, quindi esegui il seguente comando:

less /var/log/cfn-init.log

Il file di registro mostra un timestamp quando il segnale SUCCESS viene inviato alle risorse di AWS CloudFormation. Guarda il seguente esempio:

2019-01-11 12:46:40,101 [DEBUG] Signaling resource EC2Instance in stack XXXX with unique ID i-045a536a3dfc8ccad and status SUCCESS

3.    Apri la console di AWS CloudFormation.

4.    Per visualizzare il timestamp di errore della risorsa per l'evento "Non è stato possibile ricevere X segnali di risorse entro la durata specificata", scegli la vista Eventi.

5.In 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".

6.    Confronta il timestamp di segnalazione con quello di errore della risorsa.

Nota: Tieni presente che il segnale è stato inviato dopo la mancata creazione della risorsa Amazon EC2. Il segnale viene inviato prima che la risorsa Amazon EC2 venga creata o che la creazione non riesca.

Scenario 4: il segnale cfn non viene inviato dall'istanza Amazon EC2

L'API SignalResource è utile quando desideri inviare segnali da qualsiasi luogo diverso da un'istanza Amazon EC2.

Ad esempio, puoi utilizzare una funzione AWS Lambda per richiamare l'API SignalResource e quindi inviare il segnale allo stack AWS CloudFormation. In uno scenario del genere, controlla i log Lambda con Amazon CloudWatch Logs. Questi log ti aiutano a capire perché il segnale non viene inviato allo stack di AWS CloudFormation.


AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa