User_data se spouští pouze při prvním spuštění. Protože je váš obrázek vlastní, předpokládám, že již byl jednou spuštěn, a proto jsou uživatelská data deaktivována.
U Windows to lze provést zaškrtnutím políčka ve vlastnostech služeb Ec2. V tuto chvíli se dívám, jak to udělat automatizovaným způsobem na konci vytváření vlastního obrázku.
Předpokládám, že pro linux je mechanismus stejný a uživatelská data je třeba znovu aktivovat na vašem vlastním obrazu.
#cloud-boothook
aby to fungovalo, protože to změní skript z user_data
na cloud-boothook, který běží při každém spuštění.
UPRAVIT:
Zde je kód pro opětovnou aktivaci startu v systému Windows pomocí 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
(Znám otázku zaměřenou na linux, ale mohla by pomoci ostatním ...)
Jak jsem testoval, v /var/lib/cloud
byla nějaká bootstrap data adresář.Po vymazání tohoto adresáře Uživatelská data skript fungoval normálně.
rm -rf /var/lib/cloud/*
Také jsem čelil stejnému problému na Ubuntu 16.04 hvm AMI. Na problém jsem upozornil podporu AWS, ale stále jsem nemohl najít přesný důvod/chybu, která to ovlivňuje.
Ale přesto mám něco, co by vám mohlo pomoci.
Před převzetím AMI odstraňte adresář /var/lib/cloud (pokaždé). Poté při vytváření obrázku nastavte jej na no-reboot.
Pokud tyto věci stále nefungují, můžete to dále otestovat tím, že vynutíte ruční spuštění uživatelských dat. Také tailf /var/log/cloud-init-output.log
pro stav cloud-init. Mělo by to končit něčím jako modules:final, aby vaše uživatelská data běžela. Neměl by se zaseknout na modules:config.
sudo rm -rf /var/lib/cloud/*
sudo cloud-init init
sudo cloud-init modules -m final
Nemám moc ponětí, zda výše uvedené příkazy budou fungovat na CentOS nebo ne. Testoval jsem to na Ubuntu.
V mém případě jsem se také pokusil odstranit adresář /var/lib/cloud, ale přesto se v našem scénáři nepodařilo spustit uživatelská data. Ale přišel jsem na jiné řešení. To, co jsme udělali, je, že jsme vytvořili skript s výše uvedenými příkazy a nechali jej běžet při spouštění systému.
Aby se to stalo, přidal jsem pod řádek v /etc/rc.local.
sudo bash /home/ubuntu/force-user-data.sh || exit 1
Ale tady je háček, spustí skript při každém spuštění, takže vaše uživatelská data budou běžet při každém spuštění, stejně jako #cloud-boothook. Žádný strach, můžete to vyladit pouhým odstraněním samotného force-user-data.sh na konci. Takže vaše force-user-data.sh bude vypadat nějak takto
#!/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
Ocenil bych, kdyby někdo mohl osvětlit, proč není možné spustit uživatelská data.