web-dev-qa-db-fra.com

Comment faire réexécuter le script de données utilisateur EC2 au démarrage?

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?

20
Mike Conigliaro

rm /var/lib/cloud/instances/*/sem/config_scripts_user

Travail confirmé sur:

  • CentOS 7.4
  • Ubuntu 14.04
  • Ubuntu 16.04

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

26
Mike Conigliaro

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.

1
Hardeep Singh

Vous pouvez placer votre script dans /etc/rc.local, qui exécutera le script à chaque redémarrage.

1
Pratik Singhal