

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.

# Stacks basés sur le bootstrap Windows CloudFormation
<a name="cfn-windows-stacks-bootstrapping"></a>

Cette rubrique décrit comment amorcer une pile Windows et comment résoudre les problèmes de création de la pile. 

**Topics**
+ [Données utilisateur dans les instances EC2](#cfn-windows-bootstrapping-user-data)
+ [CloudFormation scripts d'assistance](#cfn-windows-bootstrapping-helper-scripts)
+ [Exemple d’amorçage d’une pile Windows](#cfn-windows-bootstrapping-example)
+ [Échappement des barres obliques inversées dans les chemins de fichiers Windows](#cfn-windows-stacks-escape-backslashes)
+ [Gestion des services Windows](#cfn-windows-stacks-manage-windows-services)
+ [Résolution des problèmes de création de pile](#cfn-windows-stacks-troubleshooting)

## Données utilisateur dans les instances EC2
<a name="cfn-windows-bootstrapping-user-data"></a>

Les données utilisateur sont une caractéristique Amazon EC2 qui vous permet de transmettre des scripts ou des informations de configuration à une instance EC2 lors de son lancement. 

Pour les instances EC2 Windows :
+ Vous pouvez utiliser soit des scripts batch (en utilisant des balises `<script>`), soit des scripts PowerShell (en utilisant des balises `<powershell>`).
+ L’exécution du script est gérée par EC2Launch.

**Important**  
Si vous créez votre propre Windows AMI à utiliser avec CloudFormation, assurez-vous que la EC2Launch version v2 est correctement configurée. EC2LaunchLa version v2 est requise pour que les outils d' CloudFormation amorçage initialisent et configurent correctement les Windows instances lors de la création de la pile. Pour plus d’informations, consultez [Utilisation de l’agent EC2Launch v2 pour exécuter des tâches lors du lancement d’une instance Windows EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2launch-v2.html) dans le *Guide de l’utilisateur Amazon EC2*.  
Pour plus d'informations à ce sujet AWS Windows AMIs, consultez la [référence de l'AWSWindowsAMI](https://docs.aws.amazon.com/ec2/latest/windows-ami-reference/windows-amis.html).

## CloudFormation scripts d'assistance
<a name="cfn-windows-bootstrapping-helper-scripts"></a>

Les scripts d’assistance sont des utilitaires permettant de configurer des instances durant le processus d’amorçage. Utilisés avec les données utilisateur Amazon EC2, ils offrent de puissantes capacités de configuration.

CloudFormation fournit les scripts d'assistance Python suivants que vous pouvez utiliser pour installer des logiciels et démarrer des services sur une instance Amazon EC2 que vous créez dans le cadre de votre stack :
+  `cfn-init` : à utiliser pour extraire et interpréter les métadonnées des ressources, installer des packages, créer des fichiers et démarrer des services.
+  `cfn-signal` : à utiliser pour envoyer un signal contenant une `CreationPolicy`, afin de synchroniser d’autres ressources dans la pile lorsque la ressource ou l’application préalable est prête.
+  `cfn-get-metadata` : à utiliser pour extraire des métadonnées pour une ressource ou un chemin d’accès vers une clé spécifique.
+  `cfn-hup` : à utiliser pour rechercher les mises à jour de métadonnées et exécuter des hooks personnalisés lorsque des modifications sont détectées.

Vous appelez les scripts directement à partir de votre modèle. Ces scripts interagissent avec les métadonnées des ressources qui sont définies dans le même modèle. Les scripts s’exécutent dans l’instance Amazon EC2 au cours du processus de création de la pile.

Pour plus d'informations, consultez la [référence aux scripts CloudFormation d'assistance](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/cfn-helper-scripts-reference.html) dans le *Guide de référence des CloudFormation modèles*.

## Exemple d’amorçage d’une pile Windows
<a name="cfn-windows-bootstrapping-example"></a>

Examinons des exemples d’extraits provenant d’un modèle Windows Server qui effectue les actions suivantes :
+ Lance une instance EC2 nommée `TestInstance` à partir d’une AMI Windows Server 2022.
+ Crée un fichier de test simple pour vérifier que `cfn-init` fonctionne.
+ Configure `cfn-hup` pour la gestion continue de la configuration.
+ Utilise une `CreationPolicy` pour s’assurer que l’instance indique une exécution réussie.

Le script d’assistance `cfn-init` est utilisé pour chacune de ces actions, selon les données définies dans la ressource `AWS::CloudFormation::Init` du modèle.

La section `AWS::CloudFormation::Init` est nommée `TestInstance` et commence par la déclaration suivante.

```
TestInstance:
  Type: AWS::EC2::Instance
  Metadata:
    AWS::CloudFormation::Init:
      configSets:
        default:
          - create_files
          - start_services
```

Après cela, la section `files` de `AWS::CloudFormation::Init` est déclarée.

```
      create_files:
        files:
          c:\cfn\test.txt:
            content: !Sub |
              Hello from ${AWS::StackName}
          c:\cfn\cfn-hup.conf:
            content: !Sub |
              [main]
              stack=${AWS::StackName}
              region=${AWS::Region}
              interval=2
          c:\cfn\hooks.d\cfn-auto-reloader.conf:
            content: !Sub |
              [cfn-auto-reloader-hook]
              triggers=post.update
              path=Resources.TestInstance.Metadata.AWS::CloudFormation::Init
              action=cfn-init.exe -v -s ${AWS::StackName} -r TestInstance -c default --region ${AWS::Region}
```

Trois fichiers sont créés ici et placés dans le répertoire `C:\cfn` au niveau de l’instance de serveur :
+ `test.txt`, un simple fichier de test qui vérifie que `cfn-init` fonctionne correctement et peut créer des fichiers contenant du contenu dynamique.
+ `cfn-hup.conf`, le fichier de configuration pour `cfn-hup` avec un intervalle de vérification de 2 minutes.
+ `cfn-auto-reloader.conf`, le fichier de configuration pour le hook utilisé par `cfn-hup` pour lancer une mise à jour (appelant `cfn-init`) lorsque les métadonnées dans `AWS::CloudFormation::Init` changent.

Vient ensuite la section `start_services`, qui configure les services Windows.

```
      start_services:
        services:
          windows:
            cfn-hup:
              enabled: true
              ensureRunning: true
              files:
                - c:\cfn\cfn-hup.conf
                - c:\cfn\hooks.d\cfn-auto-reloader.conf
```

Cette section veille à ce que le service `cfn-hup` soit démarré et redémarre automatiquement si les fichiers de configuration sont modifiés. Le service surveille les modifications apportées aux CloudFormation métadonnées et s'exécute à nouveau `cfn-init` lorsque des mises à jour sont détectées.

Vient ensuite la section `Properties`.

```
TestInstance:
  Type: AWS::EC2::Instance
  CreationPolicy:
    ResourceSignal:
      Timeout: PT20M
  Metadata:
    AWS::CloudFormation::Init:
      # ... metadata configuration ...
  Properties:
    InstanceType: t2.large
    ImageId: '{{resolve:ssm:/aws/service/ami-windows-latest/Windows_Server-2022-English-Full-Base}}'
    SecurityGroupIds:
      - !Ref InstanceSecurityGroup
    KeyName: !Ref KeyPairName
    UserData:
      Fn::Base64: !Sub |
        <powershell>
        cfn-init.exe -v -s ${AWS::StackName} -r TestInstance -c default --region ${AWS::Region}
        cfn-signal.exe -e $lastexitcode --stack ${AWS::StackName} --resource TestInstance --region ${AWS::Region}
        </powershell>
```

Dans cette section, la propriété `UserData` contient un script PowerShell qui sera exécuté par EC2Launch, entouré de balises `<powershell>`. Le script s'exécute `cfn-init` avec le `default` ConfigSet, puis l'utilise `cfn-signal` pour renvoyer le code de sortie à. CloudFormation La `CreationPolicy` est utilisée pour s’assurer que l’instance est correctement configurée avant que la création de la pile ne soit considérée comme terminée.

La propriété `ImageId` utilise un paramètre public du magasin de paramètres Systems Manager pour récupérer automatiquement le dernier ID d’AMI Windows Server 2022. Cette approche élimine le besoin de mappages d’AMI propres à chaque région et permet d’utiliser systématiquement la version la plus récente. L'utilisation des paramètres de Systems Manager pour l'AMI IDs est une bonne pratique pour conserver les références AMI actuelles. Si vous prévoyez de vous connecter à votre instance, assurez-vous que la propriété `SecurityGroupIds` référence un groupe de sécurité permettant l’accès RDP.

La `CreationPolicy` est déclarée comme partie des propriétés de la ressource et définit une période d’expiration. La commande `cfn-signal` contenue dans les données utilisateur indique que la configuration de l’instance est terminée :

```
TestInstance:
  Type: AWS::EC2::Instance
  CreationPolicy:
    ResourceSignal:
      Timeout: PT20M
  Properties:
    # ... other properties ...
```

Comme le processus d'amorçage est minimal et ne crée que des fichiers et démarre des services, le délai d'`CreationPolicy`attente est de 20 minutes (PT20M) avant d'expirer. Le délai d’expiration est spécifié au format ISO 8601. Notez que les instances Windows mettent généralement plus de temps à se lancer que les instances Linux, donc testez soigneusement afin de déterminer la meilleure valeur d’expiration selon vos besoins.

Si tout se déroule correctement, la `CreationPolicy` se termine avec succès et vous pouvez accéder à l’instance Windows Server en utilisant son adresse IP publique. Une fois la création de la pile terminée, l'ID de l'instance et l'adresse IP publique seront affichés dans l'onglet **Sorties** de la CloudFormation console. 

```
Outputs:
  InstanceId:
    Value: !Ref TestInstance
    Description: Instance ID of the Windows Server
  PublicIP:
    Value: !GetAtt TestInstance.PublicIp
    Description: Public IP address of the Windows Server
```

Vous pouvez également vérifier manuellement que le processus d’amorçage a fonctionné correctement en vous connectant à l’instance via RDP et en confirmant que le fichier `C:\cfn\test.txt` existe et contient le contenu attendu. Pour plus d’informations sur la connexion aux instances Windows, consultez [Connexion de votre instance Windows à l’aide de RDP](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connecting_to_windows_instance.html) dans le *Guide de l’utilisateur Amazon EC2*.

## Échappement des barres obliques inversées dans les chemins de fichiers Windows
<a name="cfn-windows-stacks-escape-backslashes"></a>

Lorsque vous référencez Windows des chemins dans CloudFormation des modèles, pensez toujours à éviter correctement les barres obliques inverses (`\`) en fonction du format du modèle que vous utilisez.
+ Dans les modèles JSON, vous devez utiliser des doubles barres obliques inversées dans les chemins de fichiers Windows, car JSON traite la barre oblique inversée comme un caractère d’échappement. La première barre oblique inversée échappe la seconde, ce qui produit une seule barre interprétée littéralement.

  ```
  "commands" : {
    "1-extract" : {
      "command" : "C:\\SharePoint\\SharePointFoundation2010.exe /extract:C:\\SharePoint\\SPF2010 /quiet /log:C:\\SharePoint\\SharePointFoundation2010-extract.log"
    }
  }
  ```
+ Pour les modèles YAML, des barres obliques inversées simples sont généralement suffisantes.

  ```
  commands:
    1-extract:
      command: C:\SharePoint\SharePointFoundation2010.exe /extract:C:\SharePoint\SPF2010 /quiet /log:C:\SharePoint\SharePointFoundation2010-extract.log
  ```

## Gestion des services Windows
<a name="cfn-windows-stacks-manage-windows-services"></a>

Vous gérez les services Windows de la même manière que les services Linux, sauf que vous utilisez la clé `windows` au lieu de `sysvinit`. L’exemple suivant démarre le service `cfn-hup`, définit son démarrage sur Automatique, et redémarre le service si `cfn-init` modifie les fichiers de configuration `c:\cfn\cfn-hup.conf` ou `c:\cfn\hooks.d\cfn-auto-reloader.conf`.

```
        services:
          windows:
            cfn-hup:
              enabled: true
              ensureRunning: true
              files:
                - c:\cfn\cfn-hup.conf
                - c:\cfn\hooks.d\cfn-auto-reloader.conf
```

Vous pouvez gérer n’importe quel autre service Windows de la même manière en utilisant son nom interne (et non son nom d’affichage) comme référence.

## Résolution des problèmes de création de pile
<a name="cfn-windows-stacks-troubleshooting"></a>

Si votre pile échoue lors de la création, le comportement par défaut consiste à effectuer une restauration en cas d’échec. Bien que ce comportement par défaut soit généralement approprié, car il permet d’éviter des frais inutiles, il complique le débogage du problème qui est à l’origine de l’échec de création de la pile.

Pour désactiver ce comportement lors de la création ou de la mise à jour de votre stack avec la CloudFormation console, choisissez l'option **Conserver les ressources correctement provisionnées** sous **Options d'échec de la pile**. Pour de plus amples informations, veuillez consulter [Choisissez comment gérer les défaillances lors de l’approvisionnement des ressources](stack-failure-options.md). Cette option vous permet d’ouvrir une session sur l’instance et d’examiner les fichiers journaux afin d’identifier les problèmes rencontrés lors de l’exécution des scripts de démarrage.

Voici les principaux journaux que vous devez examiner :
+ Le journal de configuration EC2 à l'adresse `%ProgramData%\Amazon\EC2Launch\log\agent.log`
+ Le journal **cfn-init** dans `C:\cfn\log\cfn-init.log` (vérifiez les codes de sortie et messages d’erreur pour localiser précisément la défaillance)

Pour plus de journaux, consultez les rubriques suivantes du *Guide de l’utilisateur Amazon EC2* :
+ [EC2Launchstructure du répertoire](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2config-service.html#UsingConfigXML_WinAMI)
+ [Structure du répertoire EC2Launch v2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2launch-v2.html#ec2launch-v2-directory)

Pour plus d'informations sur la résolution des problèmes d'amorçage, consultez [Comment résoudre les problèmes liés aux scripts d'assistance qui ne démarrent pas dans une pile contenant des instances](https://repost.aws/knowledge-center/cloudformation-helper-scripts-windows) ? CloudFormation Windows .