Amazon EC2 benutzerdefiniertes AMI nicht ausgeführt bootstrap (Benutzer-Daten)
Dem ich begegnet ein Problem, das beim erstellen von benutzerdefinierten AMIs (Bilder), die auf EC2-Instanzen. Wenn ich beim starten einen Windows 2012 Standard server-Instanz mit einem benutzerdefinierten bootstrap/user-data-Skript wie;
<powershell>
PowerShell "(New-Object System.Net.WebClient).DownloadFile('http://download.microsoft.com/download/3/2/2/3224B87F-CFA0-4E70-BDA3-3DE650EFEBA5/vcredist_x64.exe','C:\vcredist_x64.exe')"
</powershell>
Es so funktionieren wie Sie sollen und gehen Sie auf die URL und laden Sie die Datei herunter und speichern es auf dem Laufwerk C:.
Aber wenn ich setup eine Windows Server-Instanz, und erstellen Sie anschließend ein Bild aus, und speichern Sie Sie als Benutzerdefinierte AMI, dann verteilen Sie es mit den exakt gleichen custom-user-data-Skript wird es nicht funktionieren. Aber wenn ich gehen, um die Instanz-url (http://169.254.169.254/latest/user-data
) es wird sich zeigen, das Skript wurde erfolgreich importiert, aber noch nicht durchgeführt wurde.
Nach überprüfung des Fehler-logs, die ich habe bemerkt, das auf einen regelmäßigen Anlass:
Failed to fetch instance metadata http://169.254.169.254/latest/user-data with exception The remote server returned an error: (404) Not Found.
InformationsquelleAutor Joe Chatterton | 2014-10-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Update 4/15/2017: Für EC2Launch und Windows Server 2016 AMIs
Pro AWS-Dokumentation für EC2Launch, Windows Server 2016-Benutzer können weiterhin mit der anhaltenden tags eingeführt EC2Config 2.1.10:
Benutzer-Daten Beispiel:
Für nachfolgende Stiefel:
Windows Server 2016 müssen die Benutzer zusätzlich aktivieren konfigurieren und aktivieren EC2Launch statt EC2Config. EC2Config war veraltet, auf Windows Server 2016 AMIs zu Gunsten von EC2Launch.
Führen Sie den folgenden powershell-planen, dass ein Windows-Task ausgeführt wird, die Daten der Benutzer auf der nächsten boot:
Durch design, diese Aufgabe ist deaktiviert, nachdem es zum ersten mal ausgeführt. Jedoch, mit der anhalten-tag Ursachen Invoke-UserData planen, eine separate Aufgabe über Register-FunctionScheduler, weiterhin Ihre user-Daten auf nachfolgenden Stiefel. Sie sehen diese für sich selbst zu
C:\ProgramData\Amazon\EC2-Windows\Launch\Module\Scripts\Invoke-Userdata.ps1
.Weitere Fehlerbehebung:
Wenn Sie zusätzliche Probleme mit Ihren user-Daten Skripte, Sie können finden die Daten der Benutzer execution logs in
C:\ProgramData\Amazon\EC2-Windows\Launch\Log\UserdataExecution.log
für Instanzen stammen aus dem WS 2016 base AMI.Original Antwort: Für EC2Config und älteren Versionen von Windows Server
User data execution wird automatisch deaktiviert, nachdem das erste boot. Wenn Sie angelegt Ihr Bild, ist es wahrscheinlich, dass die Ausführung bereits deaktiviert. Dies ist konfigurierbar manuell in
C:\Program Files\Amazon\Ec2ConfigService\Settings\Config.xml
.Den Dokumentation zu "Konfigurieren einer Windows-Instanz Mithilfe der EC2Config Service" schlägt mehrere Optionen:
Programmgesteuert erstellen Sie eine geplante Aufgabe zum ausführen beim Systemstart mit
schtasks.exe /Create
, und zeigen Sie die geplanten task, um die Daten der Benutzer-Skript (oder ein script) anC:\Program Files\Amazon\Ec2ConfigServer\Scripts\UserScript.ps1
.Programmgesteuert aktivieren Sie die Benutzer-Daten-plug-in in Config.xml.
Beispiel aus der Dokumentation:
<persist>true</persist>
aktivieren Sie die plug-in, wenn der Benutzer die Daten der Ausführung.Beispiel aus der Dokumentation:
Könnte Sie klären, was aktualisiert werden muss? Diese Antwort ist bereits jetzt, dass die Empfehlung, soweit ich das sagen kann.
Sicher, das bit, das sagt:
Ah 🙂 Nein Nein, das ist nicht das, was das sagt. Lassen Sie mich klarstellen: ich habe erwähnt, dass die version von EC2Config zu ziehen, dass EC2Launch weiter zu unterstützen, die gleichen Funktionen-zur Unterstützung dieser früheren Lösung, die das fortbestehen tags über die Benutzer-Daten-script. Sie sind richtig, dass die WS 2016 muss EC2Launch -- und die Antwort ist nicht einverstanden mit dieser Behauptung -- EC2Config 2.1.10 wurde nur erwähnt, zeichnen den Kontext, wo diese Funktionalität ursprünglich aus, dass die gleiche Lösung funktioniert auch für EC2Launch, und warum Sie es tut. Hoffe, das hilft.
InformationsquelleAutor Anthony Neace
Andere Lösung, die für mich gearbeitet ist, um führen Sie Sysprep mit EC2Launch.
Das Problem ist, dass AWS nicht wieder den Weg zu den Profil-Dienst (169.254.169.254) in Ihrem benutzerdefinierten AMI. Siehe die Antwort von SanjitPatel in diesem post. Also, wenn ich habe versucht, mein benutzerdefiniertes AMI erstellen, spot-instance-Anforderungen, meine neue Instanzen waren nicht zu finden, den user-Daten.
Herunterfahren mit Sysprep, im wesentlichen Kräfte AWS re-do alle setup-Arbeit, die auf die Instanz, wenn es zum ersten mal ausgeführt. Also, wenn Sie erstellen Sie die Instanz Herunterfahren, die mit Sysprep und dann erstellen Sie Ihre benutzerdefinierte AMI, AWS-setup das Profil-service route richtig für die neuen Instanzen und führen Sie Ihre Benutzer-Daten. Dies verhindert auch das manuelle ändern von Windows Tasks und die Ausführung von user-Daten auf nachfolgenden Stiefel, wird als beharren tag hat.
Hier ist eine kurze Schritt-für-Schritt:
Hoffe, das hilft!
InformationsquelleAutor Yuri Danilchenko
Am Ende der ersten bootstrap (UserData) Skript, fügen Sie einfach fortbestehen zu tag wie unten gezeigt.
Funktioniert perfekt.
InformationsquelleAutor dspatil
Für jene Leute, hab hier von Google und werden einen Server laufen 2016 Instanz, es scheint, dass dies nicht mehr möglich ist.
Server2016 nicht ec2config service und so können Sie nicht verwenden, die bestehen bleiben Flagge.
Beschrieben in Anthony Neace post.
Server 2016 verwendet EC2Launch und ich habe noch nicht gesehen, wie es ist möglich, dass ein Skript bei jedem Systemstart. Sie können ein Skript ausführen, auf dem ersten boot, aber die nachfolgenden Stiefel, wird es nicht ausführen.
gibt es eine Möglichkeit, ein Skript auszuführen, jedes mal, wenn eine Instanz Stiefel?
Ja, diese Aufgabe läuft einfach die
C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1
Powershell-Skript. Dieses Skript wird zuerst deaktiviert den task und dann ruft der Benutzer Daten. So können Sie einfach reaktivieren Sie die Aufgabe, die Daten der Benutzer mit PowershellOder kommen Sie, daran zu denken, kommentieren Sie die Aufgabe deaktivieren in InitializeInstance.ps1
Bitte siehe meine aktualisierte Antwort; EC2Launch wurde entwickelt, um weiterhin die Unterstützung der anhalten-tags.
InformationsquelleAutor Lou O.