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 attributoDependsOn
che specifica l'istanza database e quindi devi creare le risorse dell'istanza EC2 contenenti gli attributiDependsOn
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:
-
Dichiarare una risorsa
AWS::CloudFormation::WaitConditionHandle
nel modello di stack. Un handle della condizione di attesa non ha proprietà. Tuttavia, un riferimento a una risorsaWaitConditionHandle
restituisce un URL prefirmato che puoi utilizzare per segnalare un'operazione riuscita o non riuscita alla risorsaWaitCondition
. Per esempio:"myWaitHandle" : { "Type" : "AWS::CloudFormation::WaitConditionHandle", "Properties" : { } }
-
Dichiarare una risorsa
AWS::CloudFormation::WaitCondition
nel modello di stack. UnaWaitCondition
risorsa ha due proprietà obbligatorie:Handle
è un riferimento a un valoreWaitConditionHandle
dichiarato nel modello eTimeout
rappresenta il numero di secondi di attesa. AWS CloudFormation Facoltativamente, è possibile impostare laCount
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 clausolaDependsOn
associa una risorsa alla condizione di attesa. Dopo aver AWS CloudFormation creato laDependsOn
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 risorsamyWaitHandle
come risorsaWaitConditionHandle
, 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" } }
-
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 risorseAWS::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.
-
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
-
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'intestazioneContent-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 valoreUniqueId
per ogni segnale deve essere univoco per tutti i segnali inviati a una determinata condizione di attesa. Il valoreUniqueId
è una stringa alfanumerica arbitraria.Un comando
curl
è un modo per inviare un segnale. L'esempio seguente mostra una riga di comandocurl
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.
UniqueId
identifica 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 DescribeStacks
API 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.