Création de conditions Wait dans un gabarit - AWS CloudFormation

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 Wait dans un gabarit

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éploiement d'applications sur Amazon EC2 avec AWS CloudFormation.

Avec la ressource AWS::CloudFormation::WaitConditionHandle et l'attribut Attribut CreationPolicy, vous pouvez effectuer les actions suivantes :

  • Coordonner la création des ressources de la pile avec d'autres actions de configuration externes à la création de la pile

  • 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.

Utilisation d'un descripteur de condition d'attente

Note

Si vous utilisez la fonctionnalité de point de terminaison VPC, les ressources du VPC qui répondent aux conditions d'attente doivent avoir accès à des compartiments Amazon Simple Storage Service ( AWS CloudFormation Amazon S3) spécifiques. Les ressources doivent envoyer les réponses aux conditions d'attente à une URL Amazon S3 pré-signée. S'ils ne peuvent pas envoyer de réponses à Amazon S3, ils AWS CloudFormation ne recevront pas de réponse et l'opération de stack échouera. Pour plus d'informations, consultez Accès CloudFormation via un point de terminaison d'interface (AWS PrivateLink) et Exemple de politiques de compartiment pour les points de terminaison d'un VPC pour Amazon S3.

Vous pouvez utiliser la condition d'attente et le gestionnaire de conditions d'attente pour AWS CloudFormation suspendre la création d'une pile et attendre un signal avant de continuer à créer la pile. Par exemple, vous pouvez avoir envie de télécharger et de configurer des applications dans une instance Amazon EC2 avant de considérer la création de cette instance Amazon EC2 comme étant terminée.

La liste suivante résume le fonctionnement d'une condition d'attente avec un descripteur de condition d'attente :

  • AWS CloudFormation crée une condition d'attente comme n'importe quelle autre ressource. Lorsqu' AWS CloudFormation crée une condition d'attente, il active l'état CREATE_IN_PROGRESS pour cette condition et attend de recevoir le nombre de signaux de réussite. S'il AWS CloudFormation reçoit le nombre requis de signaux de réussite avant l'expiration du délai imparti, il continue à créer la pile ; sinon, il définit le statut de la condition d'attente sur CREATE_FAILED et annule la pile.

  • La Timeout propriété détermine le temps d' AWS CloudFormation attente pour le nombre requis de signaux de réussite. Timeoutest 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).

  • Généralement, vous préférez qu'une condition d'attente commence juste après la création d'une ressource spécifique, telle qu'une instance Amazon EC2, une instance DB RDS ou un groupe Auto Scaling. Pour ce faire, ajoutez l'attribut DependsOn à une condition d'attente. Lorsque vous ajoutez l'attribut DependsOn à une condition d'attente, vous précisez qu'elle n'est créée qu'après une ressource particulière. Lorsque la condition d'attente est créée, AWS CloudFormation commence le délai d'attente et attend les signaux de réussite.

  • Vous pouvez également utiliser l'attribut DependsOn avec d'autres ressources. Par exemple, vous souhaitez peut-être créer une instance de base de données Amazon RDS et configurer une base de données sur cette instance de base de données avant de créer les instances EC2 qui utilisent cette base de données. Dans ce cas, créez une condition d'attente possédant un attribut DependsOn qui spécifie l'instance de base de données, puis créez des ressources d'instance EC2 avec des attributs DependsOn qui définissent la condition d'attente. Cette approche permet de garantir que les instances EC2 sont créées juste après l'instance DB et la condition d'attente.

  • AWS CloudFormation doit recevoir un nombre spécifié de signaux de réussite pour une condition d'attente avant de définir le statut de cette condition d'attente pour CREATE_COMPLETE poursuivre la création de la pile. La propriété de la condition d'attente Count spécifie le nombre de signaux de réussite. Si aucun nombre n'est défini, la valeur par défaut est de 1.

  • Une condition d'attente nécessite un descripteur de condition d'attente pour configurer une URL pré-signée qui sert de mécanisme de signalement. L'URL présignée vous permet d'envoyer un signal sans avoir à fournir vos AWS informations d'identification. Vous utilisez cette URL pour signaler la réussite ou l'échec, laquelle est encapsulée dans une instruction JSON. Pour voir le format de la déclaration JSON, consultez le Format JSON d'un signal envoyé à une condition d'attente.

  • Si une condition d'attente reçoit le nombre de signaux de réussite requis (tel que défini dans la propriété Count) avant l'expiration du délai, AWS CloudFormation marque la condition comme CREATE_COMPLETE et continue de créer la pile. Dans le cas contraire, la condition d'attente AWS CloudFormation échoue et la pile est annulée (par exemple, si le délai expire sans les signaux de réussite requis ou si un signal d'échec est reçu).

Pour utiliser une condition d'attente dans une pile :
  1. Déclarez une ressource AWS::CloudFormation::WaitConditionHandle dans le modèle de la pile. Un descripteur de condition d'attente ne possède aucune propriété. Toutefois, une référence à une ressource WaitConditionHandle correspond à une URL pré-signée que vous pouvez utiliser pour signaler la réussite ou la défaillance de WaitCondition. Par exemple :

    "myWaitHandle" : { "Type" : "AWS::CloudFormation::WaitConditionHandle", "Properties" : { } }
  2. Déclarez une ressource AWS::CloudFormation::WaitCondition dans le modèle de la pile. Une WaitCondition ressource possède deux propriétés obligatoires : elle Handle fait référence à une ressource WaitConditionHandle déclarée dans le modèle et Timeout représente le nombre de secondes AWS CloudFormation d'attente. Vous pouvez éventuellement définir la Count propriété, qui détermine le nombre de signaux de réussite que la condition d'attente doit recevoir avant de AWS CloudFormation pouvoir reprendre la création de la pile.

    Pour contrôler quand la condition d'attente est déclenchée, vous définissez l'attribut DependsOn au niveau de celle-ci. Une clause DependsOn associe une ressource à la condition d'attente. Après avoir AWS CloudFormation créé la DependsOn ressource, il bloque la création de nouvelles ressources de pile jusqu'à ce que l'un des événements suivants se produise : a) le délai d'expiration b) Le nombre requis de signaux de réussite est reçu c) Un signal d'échec est reçu.

    Voici un exemple de condition d'attente qui commence après la création réussie de la ressource Ec2Instance, utilise la ressource myWaitHandle comme WaitConditionHandle, a un délai d'attente de 4 500 secondes et a la valeur par défaut Count de 1 (puisqu'aucune propriété Count n'est spécifiée) :

    "myWaitCondition" : { "Type" : "AWS::CloudFormation::WaitCondition", "DependsOn" : "Ec2Instance", "Properties" : { "Handle" : { "Ref" : "myWaitHandle" }, "Timeout" : "4500" } }
  3. Obtenez l'URL pré-signée à utiliser pour le signalement.

    Dans le modèle, l'URL pré-signée peut être récupérée en transmettant le nom logique de la ressource AWS::CloudFormation::WaitConditionHandle à la fonction intrinsèque Ref. Par exemple, vous pouvez utiliser la propriété UserData sur les ressources AWS::EC2::Instance pour transmettre l'URL pré-signée aux instances Amazon EC2 de sorte que les scripts ou les applications qui s'exécutent sur ces instances puissent signaler une réussite ou une défaillance à AWS CloudFormation :

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

    Remarque : Dans les outils de ligne de AWS CloudFormation commande AWS Management Console ou dans les outils de ligne de commande, l'URL présignée est affichée sous forme d'identifiant physique de la ressource de gestion des conditions d'attente.

  4. Sélectionnez une méthode de détection du moment où la pile active la condition d'attente.

    Si vous créez la pile avec les notifications activées, AWS CloudFormation publie une notification pour chaque événement de la pile dans le sujet spécifié. Si vous ou votre application vous abonnez à cette rubrique, vous pouvez suivre les notifications d'événement de création de descripteur de condition d'attente et récupérer l'URL pré-signée à partir de cette notification.

    Vous pouvez également surveiller les événements de la pile à l' AWS Management Console aide des outils de ligne de AWS CloudFormation commande ou de l' AWS CloudFormation API.

  5. Utilisez l'URL pré-signée pour signaler la réussite ou l'échec.

    Pour envoyer un signal, vous envoyez un message de requête HTTP à l'aide de l'URL pré-signée. Il doit s'agir d'une méthode de requête PUT, et l'en-tête Content-Type doit être une chaîne vide ou doit être omise. Le message de requête doit correspondre à une structure JSON dont le format est similaire à celui qui est spécifié dans Format JSON d'un signal envoyé à une condition d'attente.

    Vous devez envoyer le nombre de signaux de réussite spécifié par la Count propriété afin de AWS CloudFormation poursuivre la création de la pile. Si la valeur de Count est supérieure à 1, la valeur UniqueId 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 commande curl qui indique la réussite à une condition d'attente.

    $ 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"

    où le fichier/tmp/a contient la structure JSON suivante :

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

    Cet exemple montre une ligne de commande curl qui envoie le même signal de réussite, sauf qu'il envoie la structure JSON comme paramètre dans 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://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"

Format JSON d'un signal envoyé à une condition d'attente

Lorsque vous envoyez un signal à une condition d'attente, vous devez utiliser le format JSON suivant :

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

Où :

StatusValuedoit être l'une des valeurs suivantes :

  • SUCCESS indique un signal de réussite.

  • FAILURE indique un signal d'échec et déclenche l'échec de la condition d'attente et la restauration de la pile.

UniqueIdidentifie le signal à AWS 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 AWS CloudFormation sera considéré comme une retransmission du signal précédemment envoyé avec le même signalUniqueId, et le signal sera ignoré.

Data correspond aux informations que vous souhaitez renvoyer avec le signal. La Data valeur est accessible en appelant la GetAttfonction Fn : : dans le modèle. Par exemple, si vous créez la valeur de sortie suivante pour la condition d'attentemywaitcondition, vous pouvez utiliser la aws cloudformation describe-stacks commande, l'opération d'DescribeStacksAPI ou l'onglet Sorties de la AWS CloudFormation console pour afficher les signaux Data envoyés par des signaux valides envoyés à AWS CloudFormation :

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

La GetAttfonction Fn : : renvoie le UniqueId et Data sous forme de paire nom/valeur dans une structure JSON. Voici un exemple d'attribut Data renvoyé par la valeur de sortie WaitConditionData définie ci-dessus :

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

Reason est une chaîne sans aucune autre restriction de contenu, si ce n'est qu'elle doit être conforme au format JSON.