Je veux utiliser les données utilisateur pour exécuter un script chaque fois que mon instance Amazon Elastic Compute Cloud (Amazon EC2) est redémarrée. Comment procéder ?
Brève description
Par défaut, les scripts de données utilisateur et les directives cloud-init sont uniquement exécutés pendant le premier cycle de démarrage lorsqu'une instance EC2 est lancée. Cependant, vous pouvez configurer votre script de données utilisateur et vos directives cloud-init avec un fichier mime en plusieurs parties. Un fichier mime en plusieurs parties permet à votre script de modifier la fréquence d’exécution des données utilisateur dans le package cloud-init. Ensuite, le fichier exécute le script utilisateur. Pour plus d'informations sur les fichiers mime en plusieurs parties, consultez Mime Multi Part Archive sur le site web cloud-init.
Remarque : il est recommandé de créer un instantané de votre instance avant de procéder à la résolution suivante.
Solution
Avertissement : avant d'entamer la procédure, vérifiez les points suivants :
1. Assurez-vous que la version la plus récente de cloud-init est installée et fonctionne correctement sur votre instance EC2.
2. Pour des raisons de sécurité, créez une politique IAM pour restreindre le nombre d'utilisateurs autorisés à ajouter ou à supprimer des données utilisateur par le biais de l'API ModifyInstanceAttribute.
3. Ouvrez la console Amazon EC2.
4. Arrêtez votre instance.
5. Choisissez Actions, ensuite Paramètres de l'instance, puis Modifier les données utilisateur.
6. Copiez votre script utilisateur dans la boîte de dialogue Modifier les données utilisateur, puis sélectionnez Enregistrer.
L’exemple qui suit est un script Shell qui inscrit un fichier testfile.txt « Hello World » dans un répertoire /tmp.
Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0
--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"
#cloud-config
cloud_final_modules:
- [scripts-user, always]
--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"
#!/bin/bash
/bin/echo "Hello World" >> /tmp/testfile.txt
--//--
Par défaut, cloud-init autorise un type de contenu uniquement à la fois dans les données utilisateur. Toutefois, cet exemple montre les types de contenu text/cloud-config et text/x-shellscript dans un fichier mime en plusieurs parties.
Le type de contenu text/cloud-config modifie la fréquence d’exécution des données utilisateurs dans le package cloud-init en attribuant au paramètre SCRIPTS-USER la valeur ALWAYS.
Le type de contenu text/x-shellscript fait en sorte que le script utilisateur actuel soit exécuté par le module cloud-init cloud_final_modules. Dans cet exemple, il n'y a qu'une seule ligne à exécuter, qui est /bin/echo "Hello World." >> /tmp/testfile.txt.
Remarque: Remplacez la ligne /bin/echo "Hello World." >> /tmp/testfile.txt par le script shell que vous souhaitez exécuter lors du démarrage de l'instance.
7. Redémarrez votre instance EC2 et vérifiez que votre script s'exécute correctement.
Informations connexes
Exécuter des commandes sur votre instance Linux au lancement
Exécuter des commandes sur votre instance Windows au lancement
AWS Systems Manager Automation
Formats de données utilisateur