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à.
Questo argomento spiega come creare una condizione di attesa in un modello per coordinare la creazione di risorse dello stack o tenere traccia dell'avanzamento 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.
Quando CloudFormation crea uno stack che include una condizione di attesa:
-
Crea una condizione di attesa proprio come qualsiasi altra risorsa e imposta lo stato della condizione di attesa su
CREATE_IN_PROGRESS
. -
CloudFormation attende che riceva il numero richiesto di segnali di successo o che il periodo di timeout della condizione di attesa sia scaduto.
-
Se riceve il numero richiesto di segnali di successo prima della scadenza del periodo di timeout:
-
Attendi che lo stato della condizione venga modificato in
CREATE_COMPLETE
-
La creazione dello stack continua
-
-
Se il timeout scade o viene ricevuto un segnale di errore:
-
Lo stato della condizione di attesa cambia in
CREATE_FAILED
-
Stack torna indietro
-
Importante
Per le risorse Amazon EC2 e Auto Scaling, ti consigliamo di utilizzare un CreationPolicy attributo anziché le 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 correttamente.
Per ulteriori informazioni, consulta Attributo CreationPolicy o Distribuisci applicazioni su Amazon EC2.
Nota
Se lo utilizzi AWS PrivateLink, le risorse nel VPC che rispondono alle condizioni di attesa devono avere accesso a bucket Amazon Simple Storage Service (Amazon S3) S3) CloudFormation specifici. Le risorse devono inviare le risposte della condizione di attesa a un URL Amazon S3 prefirmato. Se non sono in grado di inviare risposte per Amazon S3, CloudFormation non riceverà una risposta e il funzionamento dello stack ha esito negativo. Per ulteriori informazioni, consulta Accesso CloudFormation tramite un endpoint di interfaccia ()AWS PrivateLink e Controllo dell'accesso dagli endpoint VPC con policy bucket.
Argomenti
Creazione di una condizione di attesa nel modello
1. Maniglia delle condizioni di attesa
Si inizia definendo un AWS::CloudFormation::WaitConditionHandlerisorsa nel modello dello stack. Questa risorsa genera l'URL predefinito necessario per l'invio di segnali. Ciò consente di inviare un segnale senza dover fornire AWS le proprie credenziali. Per esempio:
Resources:
MyWaitHandle
:
Type: AWS::CloudFormation::WaitConditionHandle
2. Condizione di attesa
Successivamente, si definisce un AWS::CloudFormation::WaitConditionrisorsa nel modello dello stack. La struttura di base di a AWS::CloudFormation::WaitCondition
si presenta così:
MyWaitCondition
:
Type: AWS::CloudFormation::WaitCondition
Properties:
Handle: String
Timeout: String
Count: Integer
La AWS::CloudFormation::WaitCondition
risorsa ha due proprietà obbligatorie e una proprietà opzionale.
-
Handle
(obbligatorio) — Un riferimento a unaWaitConditionHandle
dichiarazione nel modello. -
Timeout
(obbligatorio) — Il numero di secondi di attesa CloudFormation per la ricezione del numero richiesto di segnali.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). -
Count
(opzionale) — Il numero di segnali di successo che CloudFormation devono essere ricevuti prima di impostare lo stato di quella condizione di attesa suCREATE_COMPLETE
e riprendere la creazione dello stack. Se non specificato, il valore predefinito è 1.
In genere, si desidera che una condizione di attesa inizi immediatamente dopo la creazione di una risorsa specifica. A tale scopo, è necessario aggiungere il DependsOn attribuire a una condizione di attesa. Quando si aggiunge un DependsOn
attributo a una condizione di attesa, CloudFormation crea prima la risorsa nell'DependsOn
attributo e quindi crea la condizione di attesa.
L'esempio seguente dimostra una condizione di attesa che:
-
Inizia dopo la corretta creazione della risorsa
MyEC2Instance
-
Utilizza la
MyWaitHandle
risorsa comeWaitConditionHandle
-
Ha un timeout di 4500 secondi
-
Ha il valore predefinito
Count
di 1 (poiché non è specificata alcunaCount
proprietà)
MyWaitCondition
:
Type: AWS::CloudFormation::WaitCondition
DependsOn: MyEC2Instance
Properties:
Handle: !Ref MyWaitHandle
Timeout: '4500'
3. Invio di un segnale
Per segnalare l'esito positivo o negativo CloudFormation, in genere si esegue un codice o uno script. Ad esempio, un'applicazione in esecuzione su un' EC2 istanza potrebbe eseguire alcune attività di configurazione aggiuntive e quindi inviare un segnale CloudFormation a per indicare il completamento.
Il segnale deve essere inviato all'URL predefinito generato dal gestore della condizione di attesa. L'URL predefinito viene utilizzato per segnalare l'esito positivo o negativo.
Per inviare un segnale
-
Per recuperare l'URL predefinito all'interno del modello, utilizzate la funzione
Ref
intrinseca con il nome logico del gestore della condizione di attesa.Come illustrato nell'esempio seguente, il modello può dichiarare un' EC2 istanza Amazon e passare l'URL predefinito alle EC2 istanze utilizzando la proprietà Amazon. EC2
UserData
Ciò consente agli script o alle applicazioni in esecuzione su tali istanze di segnalare l'esito positivo o negativo di. CloudFormationMyEC2Instance
: Type: AWS::EC2::Instance Properties: InstanceType:t2.micro
# Example instance type ImageId:ami-055e3d4f0bbeb5878
# Change this as needed (Amazon Linux 2023 in us-west-2) UserData: Fn::Base64: Fn::Join: - "" - -"SignalURL="
- { "Ref":"MyWaitHandle"
}Ciò si traduce in un
UserData
output simile a:SignalURL=https://amzn-s3-demo-bucket.s3.amazonaws.com/....
Nota: negli strumenti AWS Management Console e nella riga di comando, l'URL predefinito viene visualizzato come ID fisico della risorsa wait condition handle.
-
(Facoltativo) Per rilevare quando lo stack entra nella condizione di attesa, puoi utilizzare uno dei seguenti metodi:
-
Se crei lo stack con le notifiche abilitate, CloudFormation pubblica una notifica per ogni evento dello stack per l'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 il AWS Management Console AWS CLI, il o un SDK.
-
-
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 Sintassi del segnale di condizione di attesa.È necessario inviare il numero di segnali di successo specificato dalla
Count
proprietà per 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://amzn-s3-demo-bucket.s3.amazonaws.com/arn%3Aaws%3Acloudformation%3Aus-west-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
contiene la seguente struttura JSON:/tmp/a
{ "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://amzn-s3-demo-bucket.s3.amazonaws.com/arn%3Aaws%3Acloudformation%3Aus-west-2%3A034017226601%3Astack%2Fstack-gosar-20110427004224-test-stack-with-WaitCondition--VEYW%2Fe498ce60-70a1-11e0-81a7-5081d0136786%2FmyWaitConditionHandle?Expires=1303976584&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Signature=ik1twT6hpS4cgNAw7wyOoRejVoo%3D"
Sintassi del segnale di condizione di attesa
Quando invii segnali all'URL generato dal gestore della condizione di attesa, devi utilizzare il seguente formato JSON:
{
"Status" : "StatusValue"
,
"UniqueId" : "Some UniqueId"
,
"Data" : "Some Data"
,
"Reason" : "Some Reason"
}
Proprietà
Il Status
campo deve avere uno dei seguenti valori:
-
SUCCESS
-
FAILURE
Il UniqueId
campo identifica il segnale per. CloudFormation Se la Count
proprietà della condizione di attesa è maggiore di 1, il UniqueId
valore deve essere unico per tutti i segnali inviati per una particolare condizione di attesa; in caso contrario, CloudFormation considererà il segnale una ritrasmissione del segnale inviato in precedenza con lo stesso UniqueId
e lo ignorerà.
Il Data
campo può contenere tutte le informazioni che desideri inviare con il segnale. È possibile accedere al Data
valore utilizzando la GetAtt funzione Fn:: all'interno del modello.
Il Reason
campo è una stringa senza altre restrizioni sul suo contenuto oltre alla conformità JSON.
Accesso ai dati del segnale
Per accedere ai dati inviati da segnali validi, puoi creare un valore di output per la condizione di attesa nel tuo CloudFormation modello. Per esempio:
Outputs:
WaitConditionData
:
Description: The data passed back as part of signalling the WaitCondition
Value: !GetAtt MyWaitCondition
.Data
È quindi possibile visualizzare questi dati utilizzando il describe-stackscomando o la scheda Output della CloudFormation console.
La Fn::GetAtt
funzione restituisce l'UniqueId
and Data
come coppia nome/valore all'interno di una struttura JSON. Per esempio:
{"Signal1":"Application has completed configuration."}