Comment utiliser des données utilisateur pour exécuter automatiquement un script à chaque redémarrage de mon instance Linux Amazon EC2 ?

Date de la dernière mise à jour : 10/02/2021

Je souhaite 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.

Solution

Avertissement : avant d'entamer la procédure, vérifiez les points suivants :

1.    Assurez-vous que la dernière version de cloud-init est installée et fonctionne correctement sur votre instance EC2.

2.    Pour des raisons de sécurité, créez une stratégie IAM pour restreindre le nombre d'utilisateurs autorisés à ajouter ou à supprimer des données utilisateur via 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.