Pourquoi mon pipeline de génération d'image échoue-t-il avec l'erreur « Step timed out while step is verifying the Systems Manager Agent availability on the target instance(s) » dans Image Builder ?

Dernière mise à jour : 22/06/2022

Ma génération d'image expire dans EC2 Image Builder. Ensuite, je reçois l'erreur « failure message = 'Step timed out while step is verifying the SSM Agent availability on the target instance(s)' » (message d'erreur = 'L'étape a expiré pendant la vérification de la disponibilité de SSM Agent sur la ou les instances cibles'). Comment puis-je résoudre ce problème ?

Brève description

EC2 Image Builder utilise AWS Systems Manager Automation afin de créer des images personnalisées. Assurez-vous que l'instance Amazon Elastic Compute Cloud (Amazon EC2) utilisée pour créer des images et exécuter des tests a accès au service AWS Systems Manager.

Le message d'erreur failure message = 'Step timed out while step is verifying the SSM Agent availability on the target instance(s)' peut se produire pour les raisons suivantes :

  • L'instance de génération ou de test ne peut pas accéder aux points de terminaison Systems Manager. Afin de résoudre ce problème, vérifiez les règles de trafic entrant et sortant de votre groupe de sécurité et de votre liste de contrôle d'accès au réseau (ACL réseau).
  • Le profil d'instance ne dispose pas des autorisations requises. Afin de résoudre ce problème, vérifiez que le profil d'instance est attaché aux politiques appropriées.
  • L'instance ne peut pas atteindre le service de métadonnées d'instance (IMDS). Afin de résoudre ce problème, vérifiez que l'instance peut atteindre IMDS.
  • L'AWS Systems Manager Agent (SSM Agent) n'est pas installé sur l'image de base.

Solution

Vérifiez les règles de trafic sortant et entrant de votre groupe de sécurité et de votre ACL réseau

Si votre instance de génération ou de test ne peut pas accéder aux points de terminaison Systems Manager, vérifiez les éléments suivants :

  • La sortie de votre groupe de sécurité est ouverte pour le port 443.
  • L'entrée de votre ACL réseau est ouverte pour les ports éphémères (1024–65535), et sa sortie est ouverte pour le port 443.

Pour les générations de sous-réseaux publics :

  • Le paramètre Enable auto-assign public IPv4 address (Activer l'attribution automatique d'adresse IPv4 publique) doit être activé sur le sous-réseau.
  • La table de routage doit être attachée à une passerelle Internet.

Pour les générations de sous-réseaux privés :

  • La table de routage doit disposer d'une passerelle ou d'une instance NAT, ou de points de terminaison AWS PrivateLink vers Systems Manager (ssm, ssmmessages, ec2messages) et Image Builder. Si la journalisation est activée, la table de routage doit également disposer de points de terminaison vers Amazon Simple Storage Service (Amazon S3) ou Amazon CloudWatch.
  • Le groupe de sécurité pour le point de terminaison Amazon Virtual Private Cloud (Amazon VPC) doit autoriser le trafic entrant sur le port 443 vers le CIDR du VPC.

Vérifiez que le profil d'instance dispose des politiques appropriées

Le profil d'instance est le rôle AWS Identity and Access Management (IAM) défini dans la configuration de l'infrastructure. La génération échoue s'il ne possède pas les autorisations requises. Le profil d'instance doit être attaché aux politiques gérées suivantes pour être autorisé à créer des images :

  • EC2InstanceProfileForImageBuilder
  • EC2InstanceProfileForImageBuilderECRContainerBuilds (pour les images Docker)
  • AmazonSSMManagedInstanceCore

Vous pouvez également créer des politiques personnalisées dotées d'autorisations similaires aux précédentes politiques gérées.

Remarque : vérifiez la politique d'approbation du rôle afin de vous assurer que ec2.amazonaws.com est autorisé à assumer le rôle.

Vérifiez que l'instance peut atteindre IMDS

IMDS est utilisé pour accéder aux métadonnées à partir d'une instance en cours d'exécution. La génération échoue si votre instance ne parvient pas à atteindre IMDS. Assurez-vous que le pare-feu de votre système d'exploitation autorise le trafic 169.254.169.254 sur le port 80 afin que l'instance puisse atteindre IMDS.

Utilisez la commande suivante pour tester la connectivité :

$ telnet 169.254.169.254 80

Si vous utilisez un proxy, configurez SSM Agent de sorte qu'il fonctionne avec un proxy. Pour Linux, veuillez consulter la section Configurer SSM Agent pour utiliser un proxy (Linux). Pour Microsoft Windows, veuillez consulter la section Configurer SSM Agent pour utiliser un proxy pour les instances Windows Server.

Vérifiez que SSM Agent est installé sur l'image de base

Si SSM Agent n'est pas préinstallé sur l'image de base, installez-le via les données utilisateur lors de la phase de génération. SSM Agent doit être installé pour ajouter des données utilisateur personnalisées à la recette d'image.

Afin de vérifier si SSM Agent est préinstallé sur l'image de base, lancez une instance Amazon EC2 à l'aide de l'image de base. Ensuite, exécutez la commande suivante pour le système d'exploitation de votre instance :

Amazon Linux

$ sudo systemctl status amazon-ssm-agent

Amazon Linux 2

$ sudo systemctl status amazon-ssm-agent

macOS

$ Check for an agent log file at /var/log/amazon/ssm/amazon-ssm-agent.log

SUSE Linux Enterprise Server

$ sudo systemctl status amazon-ssm-agent

Ubuntu Server 16.04 (32-bit)

$ sudo status amazon-ssm-agent

Ubuntu Server 16.04 instances 64 bits (deb)

$ sudo systemctl status amazon-ssm-agent

Ubuntu Server 16.04, 18.04, 20.04 LTS et 20.10 STR 64 bits (Snap)

$ sudo systemctl status snap.amazon-ssm-agent.amazon-ssm-agent.service

Windows Server

Exécutez dans PowerShell :

Get-Service AmazonSSMAgent

Pour plus d'informations, veuillez consulter la section Amazon Machine Images (AMI) avec SSM Agent préinstallé.

Désactivez « Terminate instance on failure » (Résilier l'instance en cas d'échec)

Si les solutions précédentes ne résolvent pas le problème, alors :

1.    Ouvrez la console EC2 Image Builder.

2.    Désactivez Terminate instance on failure (Résilier l'instance en cas d'échec) sous Infrastructure configuration (Configuration de l'infrastructure), puis exécutez à nouveau le pipeline.

3.    Connectez-vous à l'instance et exécutez les commandes suivantes afin de vérifier la connexion aux points de terminaison Systems Manager :

Instance Linux

$ curl -v https://ssm.region.amazonaws.com
$ curl -v https://ec2messages.region.amazonaws.com
$ curl -v https://ssmmessages.region.amazonaws.com

Instance Windows

Test-NetConnection ssm.region.amazonaws.com -port 443
Test-NetConnection ec2messages.region.amazonaws.com -port 443
Test-NetConnection ssmmessages.region.amazonaws.com -port 443

Remarque : remplacez region (région) par votre Région AWS.

4.    Utilisez les chemins suivants pour vérifier les journaux SSM et détecter d'éventuelles erreurs :

Linux

  • /var/log/amazon/ssm/amazon-ssm-agent.log
  • /var/log/amazon/ssm/errors.log

Windows

  • %PROGRAMDATA%\Amazon\SSM\Logs\amazon-ssm-agent.log
  • %PROGRAMDATA%\Amazon\SSM\Logs\errors.log

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


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