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
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 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 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.
CloudFormation scripts d'assistance
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 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 aux scripts CloudFormation d'assistance dans le Guide de référence des CloudFormation modèles.
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 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'CreationPolicyattente 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 dans le Guide de l’utilisateur Amazon EC2.
Échappement des barres obliques inversées dans les chemins de fichiers Windows
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
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 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. 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 contenant des instances