User_data viene eseguito solo al primo avvio. Poiché la tua immagine è personalizzata, suppongo che sia già stata avviata una volta e quindi user_data è disattivato.
Per Windows, può essere fatto selezionando una casella nelle proprietà dei servizi Ec2. Sto cercando al momento come farlo in modo automatizzato alla fine della creazione dell'immagine personalizzata.
Per Linux, suppongo che il meccanismo sia lo stesso e che user_data debba essere riattivato sulla tua immagine personalizzata.
Il #cloud-boothook
farlo funzionare perché cambia lo script da un user_data
meccanismo a un cloud-boothook che viene eseguito a ogni avvio.
MODIFICA :
Ecco il codice per riattivare l'avvio su Windows utilizzando 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
(Conosco la domanda focus linux, ma potrebbe aiutare altri...)
Durante il test, c'erano alcuni dati di bootstrap in /var/lib/cloud
directory.Dopo aver cancellato quella directory, User Data lo script ha funzionato normalmente.
rm -rf /var/lib/cloud/*
Ho anche affrontato lo stesso problema su Ubuntu 16.04 hvm AMI. Ho sollevato il problema al supporto AWS ma ancora non sono riuscito a trovare il motivo/bug esatto che lo riguarda.
Ma ho ancora qualcosa che potrebbe aiutarti.
Prima di prendere l'AMI rimuovere la directory /var/lib/cloud (ogni volta). Quindi durante la creazione dell'immagine, impostala su no-reboot.
Se queste cose continuano a non funzionare, puoi testarlo ulteriormente forzando l'esecuzione manuale dei dati utente. Anche tailf /var/log/cloud-init-output.log
per lo stato cloud-init. Dovrebbe terminare con qualcosa di simile a modules:final per far funzionare i tuoi dati utente. Non dovrebbe bloccarsi su modules:config.
sudo rm -rf /var/lib/cloud/*
sudo cloud-init init
sudo cloud-init modules -m final
Non ho molta idea se i comandi precedenti funzioneranno o meno su CentOS. L'ho testato su Ubuntu.
Nel mio caso, ho anche provato a rimuovere la directory /var/lib/cloud, ma ancora non è riuscito a eseguire i dati utente nel nostro scenario. Ma ho trovato una soluzione diversa per questo. Quello che abbiamo fatto è stato creare uno script con i comandi precedenti e fare in modo che lo script venga eseguito all'avvio del sistema.
Ho aggiunto sotto la riga in /etc/rc.local per farlo accadere.
sudo bash /home/ubuntu/force-user-data.sh || exit 1
Ma ecco il trucco, eseguirà lo script ad ogni avvio in modo che i tuoi dati utente vengano eseguiti ad ogni singolo avvio, proprio come #cloud-boothook. Nessun problema, puoi semplicemente modificarlo semplicemente rimuovendo lo stesso force-user-data.sh alla fine. Quindi il tuo force-user-data.sh sarà simile a
#!/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
Apprezzerò se qualcuno può chiarire perché non è in grado di eseguire i dati utente.