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.
Amorçage des piles CloudFormation basées sur Windows
Cette rubrique décrit comment amorcer une pile Windows et comment résoudre les problèmes de création de la pile.
Rubriques
Données utilisateur dans les instances EC2
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 AMI Windows pour une utilisation avec CloudFormation, assurez-vous que EC2Launch v2 est correctement configuré. EC2Launch v2 est requis pour que les outils d’amorçage CloudFormation puissent correctement initialiser et configurer les instances Windows 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 dans le Guide de l’utilisateur Amazon EC2.
Pour les informations concernant les AMI AWS Windows, consultez la Référence des AMI AWS Windows.
Scripts d'assistant CloudFormation
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 créée dans votre pile :
-
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 uneCreationPolicy, 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 des scripts d’assistance CloudFormation dans le Guide de référence des modèles CloudFormation.
Exemple d’amorçage d’une pile Windows
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-initfonctionne. -
Configure
cfn-huppour la gestion continue de la configuration. -
Utilise une
CreationPolicypour 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 quecfn-initfonctionne correctement et peut créer des fichiers contenant du contenu dynamique. -
cfn-hup.conf, le fichier de configuration pourcfn-hupavec un intervalle de vérification de 2 minutes. -
cfn-auto-reloader.conf, le fichier de configuration pour le hook utilisé parcfn-huppour lancer une mise à jour (appelantcfn-init) lorsque les métadonnées dansAWS::CloudFormation::Initchangent.
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 des métadonnées CloudFormation et relance cfn-init lorsqu’une mise à jour est détectée.
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 exécute cfn-init avec le configSet default, puis 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 Systems Manager pour les ID d’AMI constitue une bonne pratique pour maintenir des références AMI toujours à jour. 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 se limite à créer des fichiers et démarrer des services, la CreationPolicy attend 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 s’affichent dans l’onglet Sorties de la console CloudFormation.
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 dans le Guide de l’utilisateur Amazon EC2.
Échappement des barres obliques inversées dans les chemins de fichiers Windows
Lors de la référence à des chemins Windows dans les modèles CloudFormation, n’oubliez jamais d’échapper correctement les barres obliques inversées (\) selon le format du modèle utilisé.
-
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
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
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 la pile dans la console CloudFormation, choisissez l’option Conserver les ressources correctement provisionnées sous Options en cas d’échec de la pile. Pour de plus amples informations, consultez Choisissez comment gérer les défaillances lors de l’approvisionnement des ressources. 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 :
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 CloudFormation comportant des instances Windows ?