J'ai utilisé AWS::CloudFormation::Init dans AWS CloudFormation pour inclure des métadonnées dans une instance Amazon Elastic Cloud Compute (Amazon EC2). Cependant, les changements n’apparaissent pas dans l'instance.
Résolution
Prérequis : définissez l'option Restauration en cas d'échec pour votre pile CloudFormation sur Non.
Si vous avez défini Restauration en cas d'échec sur Non et que vous ne parvenez toujours pas à inclure des métadonnées dans l'instance EC2, prenez les mesures suivantes.
Remarque : les étapes de résolution présentées ci-dessous concernent les piles CloudFormation créées avec une instance Linux.
Vérification de l’installation du script d'assistance cfn-init
Pour confirmer que vous avez bien installé le script cfn-init sur l'instance configurée pour envoyer des signaux aux ressources CloudFormation, procédez comme suit :
- Utilisez le protocole SSH pour vous connecter à l'instance.
- Vérifiez que le script cfn-init ou le package aws-cfn-bootstrap est bien installé dans votre répertoire.
Pour confirmer la présence du script cfn-init, exécutez la commande suivante :
sudo find / -name cfn-init/opt/aws/bin/cfn-init
/opt/aws/apitools/cfn-init
/opt/aws/apitools/cfn-init-1.4-34.24.amzn1/bin/cfn-init
/var/lib/cfn-init
Pour confirmer la présence du package aws-cfn-bootstrap, exécutez la commande suivante :
sudo rpm -q aws-cfn-bootstrapaws-cfn-bootstrap-1.4-34.24.amzn1.noarch
Remarque : la commande présentée ci-dessus fonctionne uniquement sur les distributions qui utilisent le gestionnaire de packages RPM.
Les scripts d'assistance CloudFormation sont installés sur l’Amazon Machine Image (AMI) Amazon Linux par défaut.
Vérification de la connexion Internet de l'instance
Si l'instance se trouve dans un Amazon Virtual Private Cloud (Amazon VPC), elle peut être connectée à Internet grâce aux méthodes suivantes :
- Un périphérique NAT dans un sous-réseau privé
- Une passerelle Internet dans un sous-réseau public
Pour tester la connexion Internet de l'instance, ouvrez une page Web publique, telle que la page d'accueil d’AWS. Exécutez ensuite une commande curl sur l'instance. Exemple :
curl -I https://aws.amazon.com
Si l'instance est connectée à Internet, la commande renvoie un code de statut HTTP 200.
Si vous utilisez un point de terminaison d’un VPC d'interface, celui-ci doit se trouver dans la même région AWS que l'instance. En outre, le groupe de sécurité attaché au point de terminaison de l'interface doit autoriser les connexions entrantes sur le port 443 depuis le sous-réseau privé d'Amazon VPC.
Détection d’erreurs dans les journaux cloud-init ou cfn-init
Pour détecter des erreurs de syntaxe ou des valeurs incorrectes dans les journaux cloud-init ou cfn-init, procédez comme suit :
- Utilisez le protocole SSH pour vous connecter à votre instance.
- Pour trouver des messages d'erreur détaillés, recherchez les mots clés error ou failure dans les journaux suivants :
/var/log/cloud-init-output.log
/var/log/cloud-init.log
/var/log/cfn-init.log
/var/log/cfn-init-cmd.log
Pour trouver tous les enregistrements comprenant les mots error ou failure dans les fichiers /var/log/cfn ou /var/log/cloud-init, exécutez la commande suivante :
grep -ni 'error\|failure' $(sudo find /var/log -name cfn-init\* -or -name cloud-init\*)
Remarque : la commande présentée ci-dessus renvoie le nom du fichier, le numéro de ligne et le message d'erreur.
- Utilisez le message d'erreur détaillé pour corriger les erreurs, puis mettez à jour la pile.
Si le fichier cfn-init.log n'existe pas, cela signifie que le modèle CloudFormation n'a pas exécuté le script cfn-init.
Pour vérifier que la propriété UserData est configurée pour exécuter le script cfn-init, procédez comme suit :
- Dans un éditeur de code, ouvrez le modèle CloudFormation de votre pile.
- Sous UserData, détectez les erreurs de syntaxe, les espaces manquants, les fautes d'orthographe et autres fautes de frappe.
- Vérifiez que les valeurs des propriétés de pile, de ressource et de région sont correctes.
- Pour la fonction intrinsèque Fn::Join de la propriété UserData, utilisez -v pour exécuter le script cfn-init en mode détaillé. Pour obtenir des exemples de sorties, consultez la page Exemple.
Informations connexes
Considérations relatives aux points de terminaison d’un VPC CloudFormation
AWS::CloudFormation::Init
Comment résoudre l'erreur « Failed to receive X resource signal(s) within the specified duration » dans AWS CloudFormation ?