Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Création de conditions d'attente dans un CloudFormation modèle
Cette rubrique explique comment créer une condition d'attente dans un modèle afin de coordonner la création de ressources de pile ou de suivre la progression d'un processus de configuration. Par exemple, vous pouvez commencer la création d'une autre ressource lorsque la configuration de l'application est partiellement terminée, ou vous pouvez envoyer des signaux lors d'un processus d'installation et de configuration afin de suivre la progression.
When CloudFormation crée une pile qui inclut une condition d'attente :
-
Il crée une condition d'attente comme n'importe quelle autre ressource et définit le statut de la condition d'attente sur
CREATE_IN_PROGRESS
. -
CloudFormation attend jusqu'à ce qu'il reçoive le nombre requis de signaux de réussite ou que le délai d'attente ait expiré.
-
S'il reçoit le nombre requis de signaux de réussite avant l'expiration du délai d'expiration :
-
L'état des conditions d'attente passe à
CREATE_COMPLETE
-
La création de la pile se poursuit
-
-
Si le délai expire ou si un signal d'échec est reçu :
-
L'état des conditions d'attente passe à
CREATE_FAILED
-
Stack recule
-
Important
Pour les ressources Amazon EC2 et Auto Scaling, nous vous recommandons d'utiliser un CreationPolicy attribut plutôt que des conditions d'attente. Ajoutez un CreationPolicy attribut à ces ressources et utilisez le script d'assistance cfn-signal pour signaler qu'un processus de création d'instance s'est terminé avec succès.
Pour plus d’informations, consultez Attribut CreationPolicy ou Déployez des applications sur Amazon EC2.
Note
Si vous en utilisez AWS PrivateLink, les ressources VPC qui répondent aux conditions d'attente doivent avoir accès à des CloudFormation compartiments Amazon Simple Storage Service (Amazon S3) spécifiques. Les ressources doivent envoyer des réponses aux conditions d'attente à un Amazon S3 URL présigné. Si elles ne peuvent pas envoyer des réponses à Amazon S3, CloudFormation ne recevra pas de réponse et l'opération de la pile échouera. Pour plus d'informations, consultez la section Contrôle Accès CloudFormation via un point de terminaison d'interface (AWS PrivateLink) de l'accès depuis les VPC points de terminaison avec des politiques de compartiment.
Rubriques
Création d'une condition d'attente dans votre modèle
1. Gestion des conditions d'attente
Vous commencez par définir un AWS::CloudFormation::WaitConditionHandleressource dans le modèle de la pile. Cette ressource génère le pré-signé URL nécessaire à l'envoi de signaux. Cela vous permet d'envoyer un signal sans avoir à fournir vos AWS informations d'identification. Par exemple :
Resources:
MyWaitHandle
: Type: AWS::CloudFormation::WaitConditionHandle
2. Condition d'attente
Ensuite, vous définissez un AWS::CloudFormation::WaitConditionressource dans le modèle de la pile. La structure de base d'un AWS::CloudFormation::WaitCondition
ressemble à ceci :
MyWaitCondition
: Type: AWS::CloudFormation::WaitCondition Properties: Handle:String
Timeout:String
Count:Integer
La AWS::CloudFormation::WaitCondition
ressource possède deux propriétés obligatoires et une propriété facultative.
-
Handle
(obligatoire) — Une référence à unWaitConditionHandle
déclaré dans le modèle. -
Timeout
(obligatoire) — Le nombre de secondes nécessaires CloudFormation pour attendre la réception du nombre de signaux requis.Timeout
est une propriété limitée au minimum, ce qui signifie que le délai d'expiration ne survient pas avant l'heure que vous spécifiez, mais qu'il peut survenir peu de temps après. La durée maximale que vous pouvez spécifier est de 43 200 secondes (12 heures). -
Count
(facultatif) — Le nombre de signaux de réussite qui CloudFormation doivent être reçus avant que le statut de cette condition d'attente ne soit définiCREATE_COMPLETE
et que la création de la pile ne reprenne. Si elle n'est pas spécifiée, la valeur par défaut est 1.
Généralement, vous souhaitez qu'une condition d'attente commence immédiatement après la création d'une ressource spécifique. Pour ce faire, vous devez ajouter DependsOn attribut à une condition d'attente. Lorsque vous ajoutez un DependsOn
attribut à une condition d'attente, CloudFormation crée d'abord la ressource dans DependsOn
l'attribut, puis crée la condition d'attente.
L'exemple suivant illustre une condition d'attente qui :
-
Commence après la création réussie de la
MyEC2Instance
ressource -
Utilise la
MyWaitHandle
ressource en tant queWaitConditionHandle
-
A un délai d'expiration de 4500 secondes
-
La valeur par défaut
Count
est 1 (aucuneCount
propriété n'étant spécifiée)
MyWaitCondition
: Type: AWS::CloudFormation::WaitCondition DependsOn:MyEC2Instance
Properties: Handle:!Ref MyWaitHandle
Timeout:'4500'
3. Envoi d'un signal
Pour signaler un succès ou un échec CloudFormation, vous exécutez généralement du code ou un script. Par exemple, une application exécutée sur une EC2 instance peut effectuer des tâches de configuration supplémentaires, puis envoyer un signal CloudFormation pour indiquer qu'elles sont terminées.
Le signal doit être envoyé au présigné URL généré par le gestionnaire des conditions d'attente. Vous l'utilisez présigné URL pour signaler le succès ou l'échec.
Pour envoyer un signal
-
Pour récupérer le présigné URL dans le modèle, utilisez la fonction
Ref
intrinsèque avec le nom logique du descripteur des conditions d'attente.Comme le montre l'exemple suivant, votre modèle peut déclarer une EC2 instance Amazon et transmettre le pré-signé URL aux EC2 instances à l'aide de la EC2
UserData
propriété Amazon. Cela permet aux scripts ou aux applications exécutés sur ces instances de signaler le succès ou l'échec de CloudFormation.MyEC2Instance
: 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"
}Il en résulte un
UserData
résultat similaire à :SignalURL=https://amzn-s3-demo-bucket.s3.amazonaws.com/....
Remarque : Dans les outils de ligne de commande AWS Management Console et les outils de ligne de commande, le présigné URL est affiché comme identifiant physique de la ressource de gestion des conditions d'attente.
-
(Facultatif) Pour détecter le moment où la pile entre en condition d'attente, vous pouvez utiliser l'une des méthodes suivantes :
-
Si vous créez la pile et que les notifications sont activées, CloudFormation publie une notification à la rubrique spécifiée pour chaque événement de la pile. Si vous ou votre application vous abonnez à cette rubrique, vous pouvez surveiller les notifications relatives à l'événement de création du gestionnaire de conditions d'attente et récupérer le présigné dans le message URL de notification.
-
Vous pouvez également surveiller les événements de la pile en utilisant le AWS Management Console AWS CLI, le ou unSDK.
-
-
Pour envoyer un signal, vous devez envoyer un message de HTTP demande en utilisant le présignéURL. Il doit s'agir d'une méthode de requête
PUT
, et l'en-têteContent-Type
doit être une chaîne vide ou doit être omise. Le message de demande doit être une JSON structure du formulaire spécifié dansSyntaxe du signal de condition d'attente.Vous devez envoyer le nombre de signaux de réussite spécifié par la
Count
propriété afin de CloudFormation poursuivre la création de la pile. Si la valeur deCount
est supérieure à 1, la valeurUniqueId
de chaque signal doit être unique pour tous les signaux envoyés à une condition d'attente particulière.UniqueId
constitue une chaîne alphanumérique arbitraire.Une commande
curl
est l'un des moyens permettant d'envoyer un signal. L'exemple suivant montre une ligne de commandecurl
qui indique la réussite à une condition d'attente.$
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"
où le fichier
contient la JSON structure suivante :/tmp/a
{ "Status" :
"SUCCESS"
, "Reason" :"Configuration Complete"
, "UniqueId" :"ID1234"
, "Data" :"Application has completed configuration."
}Cet exemple montre une ligne de
curl
commande qui envoie le même signal de réussite, sauf qu'elle envoie la JSON structure en tant que paramètre sur la ligne de commande.$
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"
Syntaxe du signal de condition d'attente
Lorsque vous envoyez des signaux au gestionnaire de conditions d'attente URL généré par le gestionnaire de conditions d'attente, vous devez utiliser le JSON format suivant :
{ "Status" :
"StatusValue"
, "UniqueId" :"Some UniqueId"
, "Data" :"Some Data"
, "Reason" :"Some Reason"
}
Propriétés
Le Status
champ doit avoir l'une des valeurs suivantes :
-
SUCCESS
-
FAILURE
Le UniqueId
champ identifie le signal destiné à CloudFormation. Si la Count
propriété de la condition d'attente est supérieure à 1, la UniqueId
valeur doit être unique pour tous les signaux envoyés pour une condition d'attente particulière ; sinon, le signal CloudFormation sera considéré comme une retransmission du signal précédemment envoyé avec le même signal UniqueId
et l'ignorera.
Le Data
champ peut contenir toutes les informations que vous souhaitez renvoyer avec le signal. Vous pouvez accéder à la Data
valeur en utilisant la GetAtt fonction Fn : : dans le modèle.
Le Reason
champ est une chaîne dont le contenu n'est soumis à aucune autre restriction que JSON la conformité.
Accès aux données du signal
Pour accéder aux données envoyées par des signaux valides, vous pouvez créer une valeur de sortie pour la condition d'attente dans votre CloudFormation modèle. Par exemple :
Outputs:
WaitConditionData
: Description:The data passed back as part of signalling the WaitCondition
Value: !GetAttMyWaitCondition
.Data
Vous pouvez ensuite consulter ces données à l'aide du describe-stackscommande, ou dans l'onglet Sorties de la CloudFormation console.
La Fn::GetAtt
fonction renvoie le UniqueId
et Data
sous forme de paire nom/valeur au sein d'une JSON structure. Par exemple :
{"Signal1":"Application has completed configuration."}