Quiero usar los datos de usuario para ejecutar un script cada vez que se reinicie mi instancia de Amazon Elastic Compute Cloud (Amazon EC2).
Descripción breve
De forma predeterminada, los comandos de datos de usuario y las directivas de cloud-init solo se ejecutan durante el primer ciclo de arranque cuando se inicia una instancia de EC2. Para sobrescribir esta configuración, utiliza un archivo de varias partes de Multipurpose Internet Mail Extensions (MIME) para configurar los comandos de datos de usuario y las directivas de cloud-init. Para obtener más información, consulta Archivo MIME de varias partes en el sitio web de cloud-init. A continuación, agrega el archivo a tu instancia.
Nota: Puedes ver los datos de usuario de cualquier instancia. Sin embargo, para actualizar los datos de usuario de la instancia, debes detener la instancia.
Resolución
Configuración de la instancia para que se detenga e inicie
Nota: Al detener e iniciar una instancia, la dirección IP pública de la instancia cambia. Se recomienda utilizar una dirección IP elástica para enrutar el tráfico externo hacia la instancia en lugar de una dirección IP pública. Si usas Amazon Route 53, es posible que tengas que actualizar los registros DNS de Route 53 cuando cambies la dirección IP pública. Detener e iniciar es diferente al reinicio de una instancia. Para obtener más información, consulta Cómo funciona la detención y el inicio de las instancias de EC2.
Antes de detener e iniciar la instancia, lleva a cabo las siguientes acciones:
Configura tu instancia para que ejecute el script en cada reinicio
Sigue estos pasos:
- Asegúrate de haber instalado la versión más reciente de cloud-init en tu instancia. Para ver la versión más reciente de cloud-init, consulta Releases canonical/cloud-init en el sitio web de GitHub.
- Comprueba que la política de AWS Identity and Access Management (IAM) para tu usuario o rol tenga el permiso ec2:ModifyInstanceAttribute. Para ver los pasos para modificar tu política de IAM, consulta Edición de políticas de IAM (consola).
- Detén tu instancia.
- Abre la consola de Amazon EC2.
- Selecciona Instancias y, a continuación, selecciona tu instancia.
- Selecciona Acciones y, a continuación, selecciona Configuración de la instancia.
- Selecciona Editar datos de usuario y, a continuación, introduce el comando de usuario como un archivo MIME de varias partes:
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="cloud-config.txt"
#!/bin/bash
/bin/echo "Hello World" >> /tmp/testfile.txt
--//--
Nota: Sustituye la sección /bin/echo "Hello World" >> /tmp/testfile.txt por el comando de shell que deseas ejecutar cuando se inicie la instancia. El comando del ejemplo anterior escribe Hello World en un archivo testfile.txt de un directorio /tmp. Con un archivo MIME de varias partes, puedes añadir simultáneamente varios tipos de contenido a los datos de usuario. El comando anterior usa los tipos de contenido text/cloud-config y text/x-shellscript. Establece el parámetro scripts-user en always para que el tipo de contenido text/cloud-config anule la frecuencia con la que se ejecutan los datos de usuario en el paquete cloud-init. El tipo de contenido text/x-shellscript proporciona el comando de usuario para ejecutar el módulo cloud-init cloud_final_modules.
- Selecciona Guardar.
- Inicia la instancia y, a continuación, comprueba que se ejecute el script.
Nota: Si la secuencia de comandos no se ha ejecutado de la manera esperada, consulta el archivo /var/log/cloud-init-output.log para obtener información que pueda usar para depurar la secuencia de comandos. Para obtener más información, consulta Cómo depurar cloud-init en el sitio web de cloud-init.
Información relacionada
Ejecución de comandos al iniciar una instancia de EC2 con la entrada de datos de usuario
How do I run a command on a new EC2 Windows instance at launch? (¿Cómo puedo ejecutar un comando en una nueva instancia de Windows en EC2 en el momento del inicio?)
¿Cómo puedo ejecutar un comando en una instancia de Windows en EC2 cuando inicio o reinicio la instancia?
User-data formats (Formatos de datos de usuario) en el sitio web de cloud-init