User_data se ejecuta solo en el primer inicio. Como su imagen es personalizada, supongo que ya se inició una vez y, por lo tanto, los datos de usuario están desactivados.
Para Windows, se puede hacer marcando una casilla en Propiedades de Ec2 Services. Estoy buscando en este momento cómo hacerlo de forma automatizada al final de la creación de la imagen personalizada.
Para Linux, supongo que el mecanismo es el mismo, y los datos de usuario deben reactivarse en su imagen personalizada.
El #cloud-boothook
hacer que funcione porque cambia el script de un user_data
mecanismo a un gancho de arranque en la nube que se ejecuta en cada inicio.
EDITAR:
Aquí está el código para reactivar el inicio en Windows usando PowerShell:
$configFile = "C:\\Program Files\\Amazon\\Ec2ConfigService\\Settings\\Config.xml"
[xml] $xdoc = get-content $configFile
$xdoc.SelectNodes("//Plugin") |?{ $_.Name -eq "Ec2HandleUserData"} |%{ $_.State = "Enabled" }
$xdoc.SelectNodes("//Plugin") |?{ $_.Name -eq "Ec2SetComputerName"} |%{ $_.State = "Enabled" }
$xdoc.OuterXml | Out-File -Encoding UTF8 $configFile
$configFile = "C:\\Program Files\\Amazon\\Ec2ConfigService\\Settings\\BundleConfig.xml"
[xml] $xdoc = get-content $configFile
$xdoc.SelectNodes("//Property") |?{ $_.Name -eq "AutoSysprep"} |%{ $_.Value = "Yes" }
$xdoc.OuterXml | Out-File -Encoding UTF8 $configFile
(Conozco la pregunta focus linux, pero podría ayudar a otros...)
Como probé, había algunos datos de arranque en /var/lib/cloud
directorio.Después de borrar ese directorio, Datos de usuario el script funcionó normalmente.
rm -rf /var/lib/cloud/*
También me he enfrentado al mismo problema en Ubuntu 16.04 hvm AMI. Le planteé el problema al soporte de AWS, pero aún no pude encontrar el motivo/error exacto que lo afecta.
Pero todavía tengo algo que podría ayudarte.
Antes de tomar AMI, elimine el directorio /var/lib/cloud (cada vez). Luego, mientras crea la imagen, configúrela para no reiniciar.
Si estas cosas aún no funcionan, puede probarlas más forzando la ejecución manual de los datos del usuario. También tailf /var/log/cloud-init-output.log
para el estado de inicialización de la nube. Debería terminar con algo como módulos:final para hacer que sus datos de usuario se ejecuten. No debería atascarse en módulos:config.
sudo rm -rf /var/lib/cloud/*
sudo cloud-init init
sudo cloud-init modules -m final
No tengo mucha idea de si los comandos anteriores funcionarán en CentOS o no. Lo he probado en Ubuntu.
En mi caso, también intenté eliminar el directorio /var/lib/cloud, pero aún así no pudo ejecutar los datos del usuario en nuestro escenario. Pero se me ocurrió una solución diferente para ello. Lo que hicimos fue crear un script con los comandos anteriores y hacer que ese script se ejecute mientras se inicia el sistema.
He agregado la siguiente línea en /etc/rc.local para que esto suceda.
sudo bash /home/ubuntu/force-user-data.sh || exit 1
Pero aquí está el problema, ejecutará el script en cada inicio, lo que hará que sus datos de usuario se ejecuten en cada inicio, al igual que #cloud-boothook. No se preocupe, puede modificarlo simplemente eliminando force-user-data.sh al final. Entonces, su force-user-data.sh se verá como
#!/bin/bash
sudo rm -rf /var/lib/cloud/*
sudo cloud-init init
sudo cloud-init modules -m final
sudo rm -f /home/ubuntu/force-user-data.sh
exit 0
Apreciaré si alguien puede aclarar por qué no puede ejecutar los datos de usuario.