Une fois que cloud-init a exécuté un script de données utilisateur au premier démarrage d'une instance EC2, un fichier d'état est vraisemblablement écrit afin que cloud-init ne réexécute pas le script lors des redémarrages ultérieurs. Il y a des cas où je voudrais supprimer ce fichier d'état pour que le script de données utilisateur soit exécuté à nouveau. Où est-ce?
rm /var/lib/cloud/instances/*/sem/config_scripts_user
Travail confirmé sur:
Par souci d'exhaustivité, si vous avez une situation où vous voulez garder une trace du fait/possibilité que cette AMI [avait une AMI parent qui ...] et ils ont tous couru cloud-init
données utilisateur, vous ne pouvez supprimer que le sémaphore actuel.
rm /var/lib/cloud/instance/sem/config_scripts_user
Vous pouvez également configurer vos données utilisateur pour les réexécuter à chaque démarrage, au lieu de supprimer le fichier d'état. Vous devez utiliser cloud_final_modules
dans votre script userdata pour relancer le script userdata et pour cela vous devez personnaliser uderdata pour avoir plusieurs fichiers dans userdata. Un exemple de fichier de données utilisateur serait comme:
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/userdata-test.txt
--//
Cela rendra le script userdata à exécuter à la dernière étape de chaque processus de démarrage. Ici, une seule ligne bin/echo "Hello World" >> /tmp/userdata-test.txt
pour être exécuté, remplacez-le par votre script Shell qui doit être exécuté à chaque démarrage d'une machine.
Vous pouvez placer votre script dans /etc/rc.local, qui exécutera le script à chaque redémarrage.