¿Cómo hacer que el script de datos de usuario EC2 vuelva a ejecutarse en el inicio?

19

Después de que cloud-init ejecuta un script de datos de usuario en el primer inicio de una instancia EC2, se presume que se escribe un archivo de estado para que cloud-init no vuelva a ejecutar el script en los reinicios posteriores. Hay casos en los que me gustaría eliminar este archivo de estado para que el script de datos del usuario vuelva a ejecutarse. ¿Dónde está?

Miguel
fuente

Respuestas:

24

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

Confirmado trabajando en:

  • CentOS 7.4
  • Ubuntu 14.04
  • Ubuntu 16.04

En aras de la exhaustividad, si tiene una situación en la que le importa hacer un seguimiento del hecho / posibilidad de que este AMI [tenía un AMI padre que ...] y todos ellos corrieron cloud-initdatos de usuario, puede eliminar solo el semáforo actual.

rm /var/lib/cloud/instance/sem/config_scripts_user

Miguel
fuente
2
Lo descubriste rápidamente.
c24w
9
@ c24w Esas marcas de tiempo son engañosas. En realidad, me llevó algunas horas de investigación y pruebas, así que una vez que lo descubrí, creé esta pregunta para ayudar a la siguiente persona que buscaba una respuesta definitiva.
Mike
1
Me he encontrado con esto desde entonces y no me di cuenta de que me animaron a publicar preguntas y respuestas de tipo wiki. ¡Te agradezco que hayas documentado esto!
c24w
1
Me alegra que esto haya sido alentado en serverfault. Lo he visto votado muchas veces en SO
franco
1
@ flag5 Eso curlpara el servicio de metadatos para obtener la identificación de la instancia actual es innecesario porque /var/lib/cloud/instanceya es un enlace simbólico a la instancia actual en /var/lib/cloud/instances. :-)
Mike
2

Puede poner su script en /etc/rc.local, que ejecutará el script en cada reinicio.

Pratik Singhal
fuente
/etc/rc.localno tiene nada que ver con los datos del usuario EC2.
Mike
@MikeConigliaro Quería usar datos de usuario para hacer que algo se ejecute en cada arranque, así que hice que el script de datos de usuario lo agregue a /etc/rc.local.
user253751
0

También puede configurar sus datos de usuario para que se vuelvan a ejecutar en cada arranque, en lugar de eliminar el archivo de estado. cloud_final_modulesDebe usar su script de datos de usuario para volver a ejecutar el script de datos de usuario y para eso debe personalizar uderdata para tener múltiples archivos en los datos de usuario. El archivo de datos de usuario de ejemplo sería como:

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
--//

Esto hará que el script de datos de usuario se ejecute en el último paso de cada proceso de arranque. Aquí solo bin/echo "Hello World" >> /tmp/userdata-test.txtse ejecutará una sola línea , reemplácela con su script de shell que debe ejecutarse cada vez que se inicia una máquina.

Hardeep Singh
fuente