Wie behebe ich den Fehler bei der Ausführung der Image-Build-Pipeline „TOE kann nicht gestartet werden“ im Image Builder

Letzte Aktualisierung: 25.07.2022

Die Ausführung meiner Image-Build-Pipeline schlägt mit dem Fehler „TOE kann nicht gestartet werden“ in EC2 Image Builder fehl. Wie kann ich dies beheben?

Kurzbeschreibung

In der Erstellungsphase einer Image-Build-Pipeline installiert die Amazon-Elastic-Compute-Cloud-Build-Instance (Amazon EC2) das AWS-Task-Orchestrator-and-Executor-Bootstrap-Skript (AWS TOE) bootstrap.sh und führt es aus. Wenn die Amazon-EC2-Build-Instance das Bootstrap-Skript nicht installieren oder ausführen kann, wird in der EC2-Image-Builder-Konsole ein Fehler angezeigt.

Beispiel-Fehlermeldung:

SSM execution '7729e837-22d4-49dd-bb60-cc2c835a2625' failed for image arn: 'arn:aws:imagebuilder:us-west-2:account-ID:image/test/1.0.0/1' with 
status= 'Failed' in state = 'BUILDING' and failure message = 'Unable to bootstrap TOE'

Image Builder verwendet AWS Systems Manager Automation, um benutzerdefinierte Images zu erstellen. Die Automatisierung schlägt normalerweise beim Schritt RunBuildScriptsWithLogging oder RunBuildScriptsWithoutLogging fehl.

Im Folgenden sind häufige Gründe für Bootstrap-Skriptfehler aufgeführt:

  • Die EC2-Build-Instance hat keinen Zugriff auf Amazon Simple Storage Service (Amazon S3).
  • Das Basis-Amazon Machine Image (AMI) ist CIS-gehärtet, und das Standardverzeichnis /tmp wird mit noexec gemountet.

Auflösung

Um das Problem zu beheben, verwenden Sie die SSM-Automation-Ausführungs-ID aus der Fehlermeldung.

  1. Öffnen Sie die EC2-Image-Builder-Konsole.
  2. Wählen Sie die fehlerhafte Build-Pipeline.
  3. Notieren Sie sich die Ausführungs-ID von SSM Automation aus der Fehlermeldung. Die ID aus der vorangegangenen Beispiel-Fehlermeldung lautet 7729e837-22d4-49dd-bb60-cc2c835a2625.
  4. Öffnen Sie die AWS-Systems-Manager-Konsole.
  5. Wählen Sie Automatisierungen im Navigationsbereich aus.
  6. Wählen Sie die Automatisierung aus, die der Ausführungs-ID von SSM Automation zugeordnet ist.
  7. Wählen Sie die ID für den Schritt RunBuildScriptsWithoutLogging aus, um weitere Details zum Bootstrap-Skriptfehler zu erhalten.

Die Build-Instance hat keinen Zugriff auf Amazon S3

Während des Schritts RunBuildScriptsWithoutLogging wird die folgende Fehlermeldung mit Keine solche Datei oder Verzeichnis angezeigt:

{"Status":"Failed","ResponseCode":1,"Output":"Waiting for Cloud-init to initialize ...
Cloud-init fails to initialize ... waiting another 5 minutes for the instance to stabilize
/var/lib/amazon/ssm/i-0ad513xxxxxxx/document/orchestration/bb0d8b53-994f-4c47-8297-e852a484501d/awsrunShellScript/0.awsrunShellScript/_script.sh: 
line 49: /tmp/imagebuilder/TaskOrchestratorAndExecutor/bootstrap.sh: No such file or directory
{\"failureMessage\":\"Unable to bootstrap TOE\"}

Der vorstehende Fehler bedeutet, dass die Datei bootstrap.sh auf der Build-Instance nicht vorhanden ist. Dieser Fehler tritt auf, wenn sich die Build-Instance in einem privaten Subnetz befindet und das AWS-TOE-Bootstrap-Skript nicht heruntergeladen werden kann.

Um dieses Problem zu beheben, überprüfen Sie, ob sich der Amazon S3-Gateway-Endpunkt com.amazonaws.region.s3 in derselben Amazon Virtual Private Cloud (Amazon VPC) wie die Infrastrukturkonfiguration der Pipeline befindet. Wenn sich der Endpunkt in derselben Amazon VPC befindet, überprüfen Sie, ob er mit der richtigen Routing-Tabelle verknüpft ist. Der Endpunkt muss der Routing-Tabelle zugeordnet sein, die von dem in der Infrastrukturkonfiguration angegebenen Subnetz verwendet wird.

Stellen Sie außerdem sicher, dass die Sicherheitsgruppe, die an die Build-Instance angehängt ist, ausgehende HTTPS-Konnektivität (Port 443) mit der öffentlichen S3-IP-Adresse zulässt. Die Build-Instance muss ausgehende HTTPS-Konnektivität zulassen, um das Bootstrap-Skript aus dem Image Builder S3-Bucket herunterzuladen. Überprüfen Sie den öffentlichen S3-IP-Adressbereich, der der AWS-Region der Pipeline entspricht.

Hinweis: Endpunkte der Amazon-S3-Schnittstelle unterstützen die private DNS-Funktion nicht. Weitere Informationen finden Sie unter Zugriff auf einen AWS-Service über einen VPC-Schnittstellen-Endpunkt.

Stellen Sie außerdem sicher, dass die Richtlinie des Endpunkts die Aktion GetObjects aus dem Image-Builder-S3-Bucket ec2ImageBuilder-toe-Region-prod zulässt. Die Richtlinie hat standardmäßig vollen Zugriff.

Das Verzeichnis /tmp wird mit noexec gemountet (gilt nur für Linux-AMI-Build)

Während des Schritts RunBuildScriptsWithoutLogging wird die folgende Fehlermeldung angezeigt, wenn die Berechtigung verweigert wurde:

{"Status":"Failed","ResponseCode":1,"Output":"Waiting for Cloud-init to initialize ...
/var/lib/amazon/ssm/i-0ad513xxxxxxx/document/orchestration/634699d5-3b04-4152-aab3-33d6981524cd/awsrunShellScript/0.awsrunShellScript/_script.sh:
line 49: /tmp/imagebuilder/TaskOrchestratorAndExecutor/bootstrap.sh: Permission denied
{\"failureMessage\":\"Unable to bootstrap TOE\"}

Der vorstehende Fehler bedeutet, dass die Build-Instance das Skript bootstrap.sh aufgrund von Problemen mit Betriebssystemberechtigungen nicht ausführen kann. Dieser Fehler tritt auf, wenn das Standardverzeichnis /tmp mit der Option noexec gemountet wird. Die noexec-Mount-Option verhindert, dass Binärdateien auf dem bereitgestellten Dateisystem ausgeführt werden.

Um zu überprüfen, ob das Verzeichnis /tmp mit noexec gemountet ist, starten Sie eine Testinstance aus dem Basis-AMI, das im Image-Rezept angegeben ist.

Führen Sie den folgenden Befehl aus:

sudo mount | grep -E '/tmp.*noexec'

Ausgabe:

dev/xvdf on /tmp type ext4 (rw,noexec,relatime,data=ordered)

Die vorhergehende Ausgabe bestätigt, dass das Verzeichnis /tmp als noexec gemountet ist. Um dieses Problem zu beheben, ändern Sie entweder das Arbeitsverzeichnis in der Bildrezeptur oder entfernen Sie die Option noexec aus dem Verzeichnis im Basis-AMI.

Um den Arbeitsverzeichnisparameter im Image-Rezept zu ändern, erstellen Sie eine neue Image-Rezeptversion. Bearbeiten Sie dann die Pipeline, um die neue Version zu verwenden. Stellen Sie sicher, dass sich das neue Verzeichnis bereits im AMI befindet und nicht für das Mounten mit der Option noexec konfiguriert ist.

So entfernen Sie die Option noexec aus dem Verzeichnis /tmp:

  1. Starten Sie manuell eine Instance aus dem Basis-AMI, das im Image-Rezept angegeben ist.
  2. Entfernen Sie in der Datei /etc/fstab die Option noexec aus dem Eintrag, der dem /tmp- oder Arbeitsverzeichnis zugeordnet ist.
  3. Erstellen Sie ein neues AMI aus der Instance, das als Basis-AMI des Image-Rezepts verwendet werden soll.

War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?