Comment résoudre l'erreur d'exécution du pipeline de création d'image « Unable to bootstrap TOE » dans Image Builder ?

Dernière mise à jour : 25-07-2022

L'exécution de mon pipeline de génération d'image échoue avec l'erreur « Unable to bootstrap TOE » dans EC2 Image Builder. Comment puis-je résoudre ce problème ?

Brève description

Lors de la phase de génération d'un pipeline de création d'image, l'instance de génération Amazon Elastic Compute Cloud (Amazon EC2) installe et exécute le script d'amorçage d'AWS Task Orchestrator and Executor (AWS TOE) bootstrap.sh. Si l'instance de génération Amazon EC2 ne peut pas installer ou exécuter le script d'amorçage, vous recevez une erreur dans la console EC2 Image Builder.

Exemple de message d'erreur :

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 utilise AWS Systems Manager Automation afin de générer des images personnalisées. L'automatisation échoue généralement à l'étape RunBuildScriptsWithLogging ou RunBuildScriptsWithoutLogging.

Voici les raisons courantes d'échec des scripts d'amorçage :

  • L'instance de génération EC2 n'a pas accès à Amazon Simple Storage Service (Amazon S3).
  • L'Amazon Machine Image (AMI) de base est renforcée avec CIS, et le répertoire /tmp par défaut est monté avec noexec.

Solution

Pour y remédier, utilisez l'ID d'exécution SSM Automation indiqué dans le message d'erreur.

  1. Ouvrez la console EC2 Image Builder.
  2. Choisissez le pipeline de génération qui a échoué.
  3. Notez l'ID d'exécution de SSM Automation indiqué dans le message d'erreur. L'ID de l'exemple de message d'erreur précédent est 7729e837-22d4-49dd-bb60-cc2c835a2625.
  4. Ouvrez la console AWS Systems Manager.
  5. Dans le volet de navigation, choisissez Automations.
  6. Sélectionnez l'automatisation associée à l'ID d'exécution de l'automatisation SSM.
  7. Choisissez l'ID de l'étape RunBuildScriptsWithoutLogging pour obtenir plus de détails sur l'échec du script d'amorçage.

L'instance de génération n'a pas accès à Amazon S3

Au cours de l'étape RunBuildScriptsWithoutLogging, le message d'erreur suivant s'affiche avec le message No such file or directory (Aucun fichier ou répertoire de ce type) :

{"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\"}

L'erreur précédente signifie que le fichier bootstrap.sh n'existe pas sur l'instance de génération. Cette erreur se produit lorsque l'instance de génération se trouve dans un sous-réseau privé et ne peut pas télécharger le script d'amorçage AWS TOE.

Pour résoudre ce problème, vérifiez si le point de terminaison de passerelle Amazon S3 com.amazonaws.region.s3 se trouve dans le même Amazon Virtual Private Cloud (Amazon VPC) que la configuration de l'infrastructure du pipeline. Si c'est le cas, vérifiez qu'il est associé à la bonne table de routage. Le point de terminaison doit être associé à la table de routage utilisée par le sous-réseau spécifié dans la configuration de l'infrastructure.

Vérifiez également que le groupe de sécurité attaché à l'instance de génération autorise la connectivité HTTPS sortante (port 443) à l'adresse IP publique S3. L'instance de génération doit autoriser la connectivité HTTPS sortante pour télécharger le script d'amorçage à partir du compartiment S3 d'Image Builder. Vérifiez la plage d'adresses IP publiques S3 qui correspond à la région AWS du pipeline.

Remarque : les points de terminaison de l'interface Amazon S3 ne prennent pas en charge la fonctionnalité DNS privé. Pour plus d'informations, consultez Accès à un service AWS à l'aide d'un point de terminaison d'un VPC d'interface.

Assurez-vous également que la politique du point de terminaison autorise l'action GetObjects à partir du compartiment S3 d'Image Builder ec2imagebuilder-toe-REGION-prod. Par défaut, la politique dispose d'un accès illimité.

Le répertoire /tmp est monté avec noexec (applicable uniquement pour la génération de l'AMI Linux)

Au cours de l'étape RunBuildScriptsWithoutLogging, le message d'erreur suivant s'affiche Permission denied (Autorisation refusée) :

{"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\"}

L'erreur précédente signifie que l'instance de génération ne peut pas exécuter le script bootstrap.sh en raison de problèmes d'autorisation du système d'exploitation. Cette erreur se produit lorsque le répertoire /tmp par défaut est monté avec l'option noexec. L'option de montage noexec empêche les binaires de s'exécuter sur le système de fichiers monté.

Pour vérifier si le répertoire /tmp est monté avec noexec, lancez une instance de test à partir de l'AMI de base spécifiée dans la recette d'image.

Exécutez la commande suivante :

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

Sortie :

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

La sortie précédente confirme que le répertoire /tmp est monté en tant que noexec. Pour résoudre ce problème, modifiez le répertoire de travail dans la recette d'image ou supprimez l'option noexec du répertoire de l'AMI de base.

Pour modifier le paramètre du répertoire de travail dans la recette d'image, créez une nouvelle version de recette d'image. Ensuite, modifiez le pipeline pour utiliser la nouvelle version. Assurez-vous que le nouveau répertoire se trouve déjà dans l'AMI, et qu'il n'est pas configuré pour être monté avec l'option noexec.

Pour supprimer l'option noexec du répertoire /tmp :

  1. Lancez manuellement une instance à partir de l'AMI de base spécifiée dans la recette d'image.
  2. Dans le fichier /etc/fstab, supprimez l'option noexec de l'entrée associée au répertoire /tmp ou de travail.
  3. Créez une nouvelle AMI à partir de l'instance à utiliser comme AMI de base de la recette d'image.

Cet article vous a-t-il été utile ?


Avez-vous besoin d'aide pour une question technique ou de facturation ?