

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
<a name="using-cfn-waitcondition"></a>

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 :
  + Le statut de la condition 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 :
  + Le statut de la condition d’attente passe à `CREATE_FAILED`
  + La pile est restaurée

**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, voir la section consécrée à l'[Attribut CreationPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-creationpolicy.html).

**Note**  
Si vous en utilisez AWS PrivateLink, les ressources du VPC qui répondent aux conditions d'attente doivent avoir accès à CloudFormation des compartiments Amazon Simple Storage Service (Amazon S3) spécifiques. Les ressources doivent envoyer les réponses aux conditions d'attente à une URL Amazon S3 pré-signée. 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 [Accès CloudFormation via un point de terminaison d'interface (AWS PrivateLink)](vpc-interface-endpoints.md) et [Contrôle de l’accès à partir des points de terminaison d’un VPC avec des stratégies de compartiment](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies-vpc-endpoint.html).

**Topics**
+ [Création d’une condition d’attente dans votre modèle](#creating-wait-condition)
+ [Syntaxe du signal de condition d’attente](#wait-condition-signal-syntax)
+ [Accès aux données du signal](#wait-condition-access-signal-data)

## Création d’une condition d’attente dans votre modèle
<a name="creating-wait-condition"></a>

**1. Gestionnaire de condition d’attente**  
Commencez par définir une ressource [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-cloudformation-waitconditionhandle.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-cloudformation-waitconditionhandle.html) dans le modèle de la pile. Cette ressource génère l’URL pré-signée nécessaire à l’envoi de signaux. Cela vous permet d’envoyer un signal sans avoir à fournir vos informations d’identification AWS . Par exemple : 

```
Resources:
  MyWaitHandle:
    Type: AWS::CloudFormation::WaitConditionHandle
```

**2. Condition d'attente**  
Ensuite, définissez une ressource [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-cloudformation-waitcondition.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-cloudformation-waitcondition.html) dans le modèle de la pile. La structure de base d’un `AWS::CloudFormation::WaitCondition` se présente comme suit : 

```
  MyWaitCondition:
    Type: AWS::CloudFormation::WaitCondition
    Properties:
      Handle: String
      Timeout: String
      Count: Integer
```

La ressource `AWS::CloudFormation::WaitCondition` possède deux propriétés obligatoires et une propriété facultative.
+ `Handle` (obligatoire) : référence à une ressource `WaitConditionHandle` déclarée 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 soit défini sur le statut de cette condition d'attente `CREATE_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.

En général, vous voulez que la condition d’attente commence immédiatement après la création d’une ressource spécifique. Pour ce faire, ajoutez l'`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. Pour plus d'informations, voir la section consécrée à l'[Attribut DependsOn](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-dependson.html).

L’exemple suivant illustre une condition d’attente qui : 
+ Commence après la création réussie de la ressource `MyEC2Instance`
+ Utilise la ressource `MyWaitHandle` comme `WaitConditionHandle`
+ A un délai d’expiration de 4500 secondes
+ A la valeur `Count` par défaut de 1 (car aucune propriété `Count` n’est 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 instance EC2 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é à l’URL pré-signée générée par le descripteur de condition d’attente. Vous utilisez cette URL pré-signée pour signaler la réussite ou l’échec.

**Pour envoyer un signal**

1. Pour récupérer l’URL pré-signée dans le modèle, utilisez la fonction intrinsèque `Ref` avec le nom logique du descripteur de condition d’attente. 

   Comme le montre l’exemple suivant, votre modèle peut déclarer une instance Amazon EC2 et transmettre l’URL pré-signée aux instances EC2 à l’aide de la propriété Amazon EC2 `UserData`. 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" }
   ```

   Cela donne une sortie `UserData` 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, l'URL présignée est affichée sous forme d'identifiant physique de la ressource de gestion des conditions d'attente.

1. (Facultatif) Pour détecter quand la pile entre dans la 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 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’aide de la AWS Management Console, de l’ AWS CLI ou d’un kit SDK.

1. 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 [Syntaxe du signal de condition d’attente](#wait-condition-signal-syntax).

   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 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://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 *`/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://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
<a name="wait-condition-signal-syntax"></a>

Lorsque vous envoyez des signaux à l’URL générée par le descripteur de condition d’attente, vous devez utiliser le format JSON suivant :

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

### Propriétés
<a name="wait-condition-signal-properties"></a>

Le champ `Status` 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 champ `Data` peut contenir toutes les informations que vous voulez renvoyer avec le signal. Vous pouvez accéder à la `Data` valeur en utilisant la GetAtt fonction [Fn : :](resources-section-structure.md#resource-properties-getatt) dans le modèle.

Le champ `Reason` est une chaîne de caractères dont le contenu n’est soumis à aucune autre restriction que la conformité JSON.

## Accès aux données du signal
<a name="wait-condition-access-signal-data"></a>

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: !GetAtt MyWaitCondition.Data
```

Vous pouvez ensuite consulter ces données à l'aide de la [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stacks.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stacks.html)commande ou de l'onglet **Sorties** de la CloudFormation console.

La `Fn::GetAtt` fonction renvoie le `UniqueId` et `Data` sous forme de name/value paire au sein d'une structure JSON. Par exemple :

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