La información de «User Data» se utiliza para proporcionar a la instancia de EC2 datos personalizados que se ejecutarán durante el proceso de inicio de la instancia. Es posible que se utilice un script en «User Data» para automatizar la configuración de la instancia, instalar paquetes, descargar archivos y realizar otras tareas personalizadas.

La información de «User Data» se almacena en el archivo «/var/lib/cloud/instances/i-xxxxx/user-data.txt», donde «i-xxxxx» es el identificador de la instancia de EC2. Esta información se mantiene en la instancia de EC2 incluso después de tomar un snapshot de la misma.

Si desea evitar la ejecución innecesaria de comandos al iniciar la instancia de EC2, es recomendable eliminar el archivo «/var/lib/cloud/instances/i-xxxxx/user-data.txt» antes de tomar un snapshot de la instancia. De esta manera, el script personalizado en «User Data» no se ejecutará automáticamente cuando se lance una instancia de EC2 a partir de la imagen creada a partir del snapshot.

El archivo /var/log/cloud-init-output.log contiene información sobre el proceso de inicio de la instancia de EC2, incluyendo la ejecución del script de «User Data». Para depurar y solucionar problemas relacionados con el script de «User Data», es necesario examinar el archivo /var/log/cloud-init-output.log para identificar cualquier error o problema que se haya producido durante la ejecución del script.

Es importante tener en cuenta que la ubicación y el nombre de este archivo pueden variar según la distribución de Linux que se esté utilizando

Os dejo un par de ejemplos de uso del campo «User Data»:

Asignar IP elastica

#!/bin/bash
aws ec2 associate-address --instance-id $(curl -s http://169.254.169.254/latest/meta-data/instance-id) --public-ip 3.23.209.32 --region us-east-2

NOTA: Para este ejemplo necesitamos crear un IAM role con permisos de acceso a AWS SDK y para modificar la asigancion de IP´s y asignarlo a la nueva EC2, se detallara en un proximo articulo.

Instalar docker-compose

#!/bin/bash
yum install curl 
curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 
chmod +x /usr/local/bin/docker-compose 
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

Es importante asegurarse de que los comandos incluidos en el script de «User Data» no requieran información adicional para que se ejecuten correctamente al lanzar una instancia de EC2. Si el script necesita algún tipo de entrada adicional, como contraseñas, credenciales o pregunta de validacion (usar -y), es mejor almacenarlas en un lugar seguro fuera del script y luego llamarlas desde el script utilizando variables de entorno o archivos de configuración. De esta manera, se puede garantizar que el script de «User Data» se ejecutará correctamente y sin problemas al lanzar una instancia de EC2.