Creazione delle condizioni di attesa in un modello - AWS CloudFormation

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Creazione delle condizioni di attesa in un modello

Importante

Per le risorse Amazon EC2 e Auto Scaling, consigliamo di utilizzare CreationPolicy un attributo anziché condizioni di attesa. Aggiungi un CreationPolicy attributo a tali risorse e utilizza lo script di supporto cfn-signal per segnalare quando il processo di creazione di un'istanza è stato completato con successo.

Per ulteriori informazioni, consulta Attributo CreationPolicy o Distribuzione di applicazioni su Amazon EC2 con AWS CloudFormation.

Utilizzando la risorsa AWS::CloudFormation::WaitConditionHandle e l'attributo Attributo CreationPolicy puoi eseguire le seguenti operazioni:

  • Coordinare la creazione delle risorse dello stack con altre azioni di configurazione esterne alla creazione dello stack

  • Monitorare lo stato di un processo di configurazione

Ad esempio, puoi iniziare la creazione di un'altra risorsa al parziale completamento della configurazione di un'applicazione oppure puoi inviare segnali durante un processo di installazione e configurazione per monitorarne l'avanzamento.

Utilizzo di un handle di una condizione di attesa

Nota

Se utilizzi la funzionalità endpoint VPC, le risorse nel VPC che rispondono alle condizioni di attesa devono avere accesso a bucket Amazon Simple Storage Service ( AWS CloudFormation Amazon S3) specifici. Le risorse devono inviare le risposte della condizione di attesa a un URL Amazon S3 prefirmato. Se non possono inviare risposte ad Amazon S3, AWS CloudFormation non riceveranno alcuna risposta e l'operazione di stack avrà esito negativo. Per ulteriori informazioni, consulta Accesso CloudFormation tramite un endpoint di interfaccia ()AWS PrivateLink e Policy di bucket di esempio per gli endpoint VPC per Amazon S3.

Puoi utilizzare le maniglie wait condition e wait condition per mettere in AWS CloudFormation pausa la creazione di uno stack e attendere un segnale prima che continui a creare lo stack. Ad esempio, puoi scaricare e configurare le applicazioni su un'istanza Amazon EC2 prima di considerare completata la creazione di tale istanza Amazon EC2.

L'elenco seguente fornisce un riepilogo del funzionamento di una condizione di attesa con un handle:

  • AWS CloudFormation crea una condizione di attesa proprio come qualsiasi altra risorsa. Quando AWS CloudFormation crea una condizione di attesa, restituisce CREATE_IN_PROGRESS come stato della condizione di attesa e attende la ricezione del numero richiesto di segnali di operazione riuscita oppure la scadenza del periodo di timeout della condizione di attesa. Se AWS CloudFormation riceve il numero richiesto di segnali di successo prima della scadenza del periodo di timeout, continua a creare lo stack; in caso contrario, imposta lo stato della condizione di attesa su CREATE_FAILED e ripristina lo stack.

  • La Timeout proprietà determina la durata di AWS CloudFormation attesa per il numero richiesto di segnali di successo. Timeoutè una proprietà con limite minimo, il che significa che il timeout non si verifica prima del tempo specificato, ma può verificarsi poco dopo. Il tempo massimo che puoi specificare è 43200 secondi (12 ore).

  • In genere, una condizione di attesa inizia subito dopo la creazione di una risorsa specifica, ad esempio un'istanza Amazon EC2, un'istanza database RDS o un gruppo Auto Scaling. A questo scopo, aggiungi l'attributo DependsOn a una condizione di attesa. Quando aggiungi un attributo DependsOn a una condizione di attesa, devi specificare che la condizione di attesa viene creata solo dopo il completamento della creazione di una risorsa specifica. Quando viene creata la condizione di attesa, AWS CloudFormation inizia il periodo di timeout e attende i segnali di successo.

  • Puoi utilizzare l'attributo DependsOn anche in altre risorse. Ad esempio, puoi decidere di creare un'istanza database Amazon RDS e di configurare un database su tale istanza database prima di creare le istanze EC2 che usano tale database. In questo caso, devi creare una condizione di attesa contenente un attributo DependsOn che specifica l'istanza database e quindi devi creare le risorse dell'istanza EC2 contenenti gli attributi DependsOn che specificano la condizione di attesa. In questo modo sei sicuro che le istanze EC2 verranno create direttamente solo dopo il completamento dell'istanza database e della condizione di attesa.

  • AWS CloudFormation deve ricevere un determinato numero di segnali di successo per una condizione di attesa prima di impostare lo stato di tale condizione di attesa per CREATE_COMPLETE continuare la creazione dello stack. La proprietà Count della condizione di attesa specifica il numero di segnali di operazione riuscita. Se non viene impostato alcun valore, il valore di default è 1.

  • Una condizione di attesa richiede un handle per configurare un URL prefirmato che viene utilizzato per il meccanismo di segnalazione. L'URL predefinito consente di inviare un segnale senza dover fornire le AWS credenziali. Utilizza l'URL prefirmato per segnalare le operazioni riuscite e non riuscite, che vengono incapsulate in una dichiarazione JSON. Per il formato dell'istruzione JSON, consulta Formato JSON del segnale della condizione di attesa.

  • Se una condizione di attesa riceve il numero richiesto di segnali di operazione riuscita (in base alla definizione della proprietà Count) prima della scadenza del periodo di timeout, AWS CloudFormation contrassegna la condizione di attesa con lo stato CREATE_COMPLETE e continua la creazione dello stack. In caso contrario, AWS CloudFormation non soddisfa la condizione di attesa e ripristina lo stack (ad esempio, se il periodo di timeout scade senza i segnali di successo richiesti o se viene ricevuto un segnale di errore).

Per usare una condizione di attesa in uno stack:
  1. Dichiarare una risorsa AWS::CloudFormation::WaitConditionHandle nel modello di stack. Un handle della condizione di attesa non ha proprietà. Tuttavia, un riferimento a una risorsa WaitConditionHandle restituisce un URL prefirmato che puoi utilizzare per segnalare un'operazione riuscita o non riuscita alla risorsa WaitCondition. Per esempio:

    "myWaitHandle" : { "Type" : "AWS::CloudFormation::WaitConditionHandle", "Properties" : { } }
  2. Dichiarare una risorsa AWS::CloudFormation::WaitCondition nel modello di stack. Una WaitCondition risorsa ha due proprietà obbligatorie: Handle è un riferimento a un valore WaitConditionHandle dichiarato nel modello e Timeout rappresenta il numero di secondi di attesa. AWS CloudFormation Facoltativamente, è possibile impostare la Count proprietà, che determina il numero di segnali di successo che la condizione di attesa deve ricevere prima di AWS CloudFormation poter riprendere la creazione dello stack.

    Per controllare quando la condizione di attesa viene attivata, imposta un attributo DependsOn sulla condizione di attesa. Una clausola DependsOn associa una risorsa alla condizione di attesa. Dopo aver AWS CloudFormation creato la DependsOn risorsa, blocca l'ulteriore creazione di risorse dello stack finché non si verifica uno dei seguenti eventi: a) il periodo di timeout b) Viene ricevuto il numero richiesto di segnali di successo c) Viene ricevuto un segnale di errore.

    Di seguito è riportato un esempio di condizione di attesa che viene avviata dopo la creazione riuscita di una risorsa Ec2Instance, utilizza la risorsa myWaitHandle come risorsa WaitConditionHandle, ha un timeout pari a 4.500 secondi e ha una proprietà Count impostata sul valore predefinito di 1 (perché non è stata specificata alcuna proprietà Count):

    "myWaitCondition" : { "Type" : "AWS::CloudFormation::WaitCondition", "DependsOn" : "Ec2Instance", "Properties" : { "Handle" : { "Ref" : "myWaitHandle" }, "Timeout" : "4500" } }
  3. Recuperare l'URL prefirmato da usare per la segnalazione.

    Nel modello, l'URL prefirmato può essere recuperato passando il nome logico della risorsa AWS::CloudFormation::WaitConditionHandle alla funzione intrinseca Ref. Ad esempio, puoi utilizzare la proprietà UserData sulle risorse AWS::EC2::Instance per passare l'URL prefirmato alle istanze Amazon EC2, in modo che gli script o le applicazioni in esecuzione su tali istanze possano segnalare le operazioni riuscite o non riuscite a AWS CloudFormation:

    "UserData" : { "Fn::Base64" : { "Fn::Join" : [ "", ["SignalURL=", { "Ref" : "myWaitHandle" } ] ] } }

    Nota: negli AWS Management Console strumenti a riga di AWS CloudFormation comando, l'URL predefinito viene visualizzato come ID fisico della risorsa wait condition handle.

  4. Selezionare un metodo per rilevare quando lo stack entra nella condizione di attesa.

    Se crei lo stack con le notifiche abilitate, AWS CloudFormation pubblica una notifica per ogni evento dello stack sull'argomento specificato. Se tu o l'applicazione effettua la sottoscrizione a tale argomento, puoi monitorare le notifiche relative all'evento di reazione degli handle delle condizioni di attesa e recuperare l'URL prefirmato dal messaggio di notifica.

    Puoi anche monitorare gli eventi dello stack utilizzando gli strumenti della AWS Management Console riga di AWS CloudFormation comando o l'API. AWS CloudFormation

  5. Utilizza l'URL prefirmato per segnalare le operazioni riuscite o non riuscite.

    Per inviare un segnale, invia un messaggio di richiesta HTTP utilizzando l'URL prefirmato. Il metodo della richiesta deve essere PUT e l'intestazione Content-Type deve essere una stringa vuota o deve essere omessa. Il messaggio di richiesta deve essere una struttura JSON con il formato specificato nel Formato JSON del segnale della condizione di attesa.

    È necessario inviare il numero di segnali di successo specificati dalla Count proprietà per AWS CloudFormation continuare la creazione dello stack. Se il valore della proprietà Count è maggiore di 1, il valore UniqueId per ogni segnale deve essere univoco per tutti i segnali inviati a una determinata condizione di attesa. Il valore UniqueId è una stringa alfanumerica arbitraria.

    Un comando curl è un modo per inviare un segnale. L'esempio seguente mostra una riga di comando curl che segnala l'operazione riuscita a una condizione di attesa.

    $ curl -T /tmp/a \ "https://cloudformation-waitcondition-test.s3.amazonaws.com/arn%3Aaws%3Acloudformation%3Aus-east-2%3A034017226601%3Astack%2Fstack-gosar-20110427004224-test-stack-with-WaitCondition--VEYW%2Fe498ce60-70a1-11e0-81a7-5081d0136786%2FmyWaitConditionHandle?Expires=1303976584&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Signature=ik1twT6hpS4cgNAw7wyOoRejVoo%3D"

    dove il file /tmp/a contiene la seguente struttura JSON:

    { "Status" : "SUCCESS", "Reason" : "Configuration Complete", "UniqueId" : "ID1234", "Data" : "Application has completed configuration." }

    Questo esempio illustra una riga di comando curl che invia lo stesso segnale di operazione riuscita, ma che invia la struttura JSON come parametro alla riga di comando.

    $ curl -X PUT \ -H 'Content-Type:' --data-binary '{"Status" : "SUCCESS","Reason" : "Configuration Complete","UniqueId" : "ID1234","Data" : "Application has completed configuration."}' \ "https://cloudformation-waitcondition-test.s3.amazonaws.com/arn%3Aaws%3Acloudformation%3Aus-east-2%3A034017226601%3Astack%2Fstack-gosar-20110427004224-test-stack-with-WaitCondition--VEYW%2Fe498ce60-70a1-11e0-81a7-5081d0136786%2FmyWaitConditionHandle?Expires=1303976584&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Signature=ik1twT6hpS4cgNAw7wyOoRejVoo%3D"

Formato JSON del segnale della condizione di attesa

Quando segnali una condizione di attesa, devi utilizzare il seguente formato JSON:

{ "Status" : "StatusValue", "UniqueId" : "Some UniqueId", "Data" : "Some Data", "Reason" : "Some Reason" }

Dove:

StatusValuedeve essere uno dei seguenti valori:

  • SUCCESS indica un segnale di operazione riuscita.

  • FAILURE indica un segnale di operazione non riuscita e attiva una condizione di attesa non riuscita e un rollback dello stack.

UniqueIdidentifica il segnale a. AWS CloudFormation Se la Count proprietà della condizione di attesa è maggiore di 1, il UniqueId valore deve essere univoco per tutti i segnali inviati per una particolare condizione di attesa; in caso contrario, AWS CloudFormation considererà il segnale una ritrasmissione del segnale inviato in precedenza con lo stesso UniqueId e ignorerà il segnale.

Data rappresenta qualsiasi informazione che desideri inviare con il segnale. È possibile accedere al Data valore chiamando la GetAttfunzione Fn:: all'interno del modello. Ad esempio, se si crea il seguente valore di output per la condizione di attesamywaitcondition, è possibile utilizzare il aws cloudformation describe-stacks comando, l'operazione DescribeStacksAPI o la scheda Outputs della AWS CloudFormation console per visualizzare i segnali Data inviati da segnali validi inviati a: AWS CloudFormation

"WaitConditionData" : { "Value" : { "Fn::GetAtt" : [ "mywaitcondition", "Data" ]}, "Description" : "The data passed back as part of signalling the WaitCondition" },

La GetAttfunzione Fn:: restituisce la coppia nome/valore UniqueId e Data all'interno di una struttura JSON. Di seguito è riportato un esempio dell'attributo Data restituito dal valore di output WaitConditionData definito in precedenza:

{"Signal1":"Application has completed configuration."}

Reason è una stringa senza altre restrizioni relative ai contenuti, oltre alla conformità JSON.