User_data wird nur beim ersten Start ausgeführt. Da Ihr Image ein benutzerdefiniertes ist, nehme ich an, dass es bereits einmal gestartet wurde und daher user_data deaktiviert ist.
Für Windows kann dies durch Aktivieren eines Kontrollkästchens in den Eigenschaften von Ec2-Diensten erfolgen. Ich schaue gerade, wie ich das am Ende der benutzerdefinierten Image-Erstellung automatisiert machen kann.
Für Linux nehme ich an, dass der Mechanismus derselbe ist, und user_data muss auf Ihrem benutzerdefinierten Image erneut aktiviert werden.
Der #cloud-boothook
machen, dass es funktioniert, weil es das Skript von einem user_data
ändert zu einem Cloud-Boothook-Mechanismus, der bei jedem Start ausgeführt wird.
BEARBEITEN :
Hier ist der Code, um den Start unter Windows mit Powershell zu reaktivieren:
$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
(Ich kenne die Frage Focus Linux, aber es könnte anderen helfen ...)
Wie ich getestet habe, gab es einige Bootstrap-Daten in /var/lib/cloud
Verzeichnis. Nachdem ich dieses Verzeichnis geleert habe, Benutzerdaten Skript funktionierte normal.
rm -rf /var/lib/cloud/*
Ich hatte auch das gleiche Problem auf Ubuntu 16.04 hvm AMI. Ich habe das Problem beim AWS-Support gemeldet, konnte aber immer noch keinen genauen Grund/Fehler finden, der es betrifft.
Aber ich habe trotzdem etwas, was dir helfen könnte.
Bevor Sie AMI nehmen, entfernen Sie das /var/lib/cloud-Verzeichnis (jedes Mal). Stellen Sie es dann beim Erstellen des Images auf no-reboot ein.
Wenn diese Dinge immer noch nicht funktionieren, können Sie sie weiter testen, indem Sie die manuelle Ausführung von Benutzerdaten erzwingen. Auch tailf /var/log/cloud-init-output.log
für den Cloud-Init-Status. Es sollte mit etwas wie modules:final enden, damit Ihre Benutzerdaten ausgeführt werden. Es sollte nicht bei modules:config.
sudo rm -rf /var/lib/cloud/*
sudo cloud-init init
sudo cloud-init modules -m final
Ich habe keine Ahnung, ob die obigen Befehle unter CentOS funktionieren oder nicht. Ich habe es auf Ubuntu getestet.
In meinem Fall habe ich auch versucht, das Verzeichnis /var/lib/cloud zu entfernen, aber in unserem Szenario konnten Benutzerdaten immer noch nicht ausgeführt werden. Aber ich habe mir eine andere Lösung dafür ausgedacht. Was wir getan haben, ist, dass wir ein Skript mit den obigen Befehlen erstellt und dieses Skript so ausgeführt haben, dass es während des Systemstarts ausgeführt wird.
Ich habe die folgende Zeile in /etc/rc.local hinzugefügt, um dies zu ermöglichen.
sudo bash /home/ubuntu/force-user-data.sh || exit 1
Aber hier ist der Haken, es wird das Skript bei jedem Start ausführen, sodass Ihre Benutzerdaten bei jedem einzelnen Start ausgeführt werden, genau wie #cloud-boothook. Keine Sorge, Sie können es einfach optimieren, indem Sie am Ende einfach die force-user-data.sh selbst entfernen. Ihre force-user-data.sh sieht also in etwa so aus
#!/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
Ich würde mich freuen, wenn jemand etwas Licht ins Dunkel bringen kann, warum die Benutzerdaten nicht ausgeführt werden können.