Passer au contenu

Comment puis-je résoudre les erreurs de délai d'attente du pipeline de génération dans Image Builder ?

Lecture de 8 minute(s)
0

Je souhaite résoudre les erreurs de délai d'attente du pipeline de génération que je reçois dans EC2 Image Builder.

Résolution

Remarque : si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'AWS CLI.

Pour résoudre les erreurs de délai d'attente du pipeline de génération, effectuez les actions suivantes en fonction de la date d'expiration du délai. Pour plus d'informations sur la procédure de surveillance des délais d'attente, consultez la section Surveiller les journaux d'Image Builder avec Amazon CloudWatch Logs.

Une expiration du délai se produit lorsque la génération vérifie la disponibilité de SSM Agent.

Si l’expiration du délai se produit lorsque le build vérifie AWS Systems Manager Agent (SSM Agent), vous pouvez recevoir l'un des messages d'erreur suivants :

« Workflow Execution ID: failed with reason: ExpectationNotMet. ssm:*CommandInvocations returned terminal state Failed in workflow step LaunchBuildInstance. »

« Workflow Execution ID: failed with reason: An error occurred (InvalidInstanceId) when calling the SendCommand operation: Instances [[i-1a1b1c1d1e1f1g1h1]] not in a valid state for account in workflow step LaunchBuildInstance. »

« Workflow Execution ID: failed with reason: ExpectationNotMet. ec2:DescribeInstanceStatus did not meet terminal states: [['passed']] after 100 attempts. Reason: Timeout. in workflow step LaunchBuildInstance. »

Pour résoudre ces erreurs, effectuez les actions suivantes :

Vérifiez que l'instance Amazon EC2 dispose des autorisations IAM requises

Assurez-vous que votre instance Amazon Elastic Compute Cloud (Amazon EC2) dispose des autorisations de Gestion des identités et des accès AWS (AWS IAM) requises. Associez la politique gérée AmazonSSMManagedInstanceCore au rôle IAM que vous utilisez pour Image Builder. Pour identifier le rôle que vous utilisez pour Image Builder, vérifiez les détails de configuration de l'infrastructure. Assurez-vous également que le rôle AWSServiceRoleForImageBuilder peut utiliser la clé AWS Key Management Service (AWS KMS) qui est spécifiée sur le périphérique de blocage de recettes d’image.

Assurez-vous que SSM Agent peut atteindre les points de terminaison

Vérifiez les paramètres suivants en fonction de votre configuration :

  • Si vous utilisez un sous-réseau public avec une passerelle Internet, configurez le sous-réseau pour attribuer automatiquement une adresse IPv4 publique.
  • Si vous utilisez un sous-réseau privé avec une passerelle NAT, configurez la passerelle NAT afin qu'elle utilise un sous-réseau public.
  • Si vous utilisez un sous-réseau privé avec des points de terminaison Amazon Virtual Private Cloud (Amazon VPC), configurez des points de terminaison privés pour AWS Systems Manager.
  • Vérifiez que le groupe de sécurité et les listes de contrôle d'accès au réseau (ACL réseau) autorisent les connexions entrantes sur les ports éphémères 1024-65535 et les connexions sortantes sur le port 443.
  • Si vous utilisez un sous-réseau privé avec des points de terminaison AWS PrivateLink, vérifiez que le groupe de sécurité du point de terminaison Amazon VPC autorise les connexions entrantes sur le port 443.
    Remarque : pour autoriser les connexions entrantes, utilisez le sous-réseau ou l'adresse CIDR Amazon VPC.

Pour des étapes de résolution de problèmes supplémentaires, consultez la section Pourquoi mon pipeline de génération d'images é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 ?

Une expiration du délai se produit lorsque le build télécharge l'AWS CLI

Si l'Amazon Machine Image (AMI) de l'instance EC2 ne dispose pas de l'AWS CLI, le script d’amorçage installe l'AWS CLI via Internet. Toutefois, si la génération est effectuée sur un sous-réseau privé qui n'autorise pas la connectivité Internet, elle expire à l'étape ApplyBuildComponents. Pour une génération de conteneur, l’expiration du délai se produit à l'étape BootstrapBuildInstance.

Pour résoudre ce problème de délai d’attente, autorisez la connectivité Internet sur le sous-réseau via une passerelle NAT ou une passerelle Internet. Vous pouvez également créer une AMI personnalisée sur laquelle vous installez l'AWS CLI.

L’expiration du délai se produit à l'étape LaunchBuildInstance.

Vous devez utiliser des noms de périphériques racine uniques dans votre instance de génération. Par conséquent, il n'est pas recommandé de nommer votre périphérique racine /dev/xvda ou /dev/sda1. Si vous utilisez un nom de périphérique racine en double lorsque vous utilisez l'API CreateImageRecipe, une expiration du délai d’attente se produit avec le message d'erreur suivant :

« Workflow Execution ID: failed with reason: ExpectationNotMet. ec2:DescribeInstanceStatus did not meet terminal states: [['passed']] after 100 attempts. Reason: Timeout. in workflow step LaunchBuildInstance. »

Remarque : si vous utilisez une instance basée sur le système AWS Nitro ou si vous utilisez un type d'instance Xen, vous pouvez utiliser un nom de périphérique en double.

Pour vérifier le nom du périphérique de l'AMI source, exécutez la commande describe-images de l'AWS CLI suivante :

aws ec2 describe-images \
    --region exampleregion \
    --image-ids exampleami

Remarque : remplacez exampleregion par votre région AWS et exampleami par l'ID de l’AMI source.

Dans la sortie, vérifiez la valeur de RootDeviceName. Assurez-vous d'utiliser le même nom de périphérique dans la formule Image Builder.

L’expiration du délai se produit lorsque le build reçoit des composants Image Builder

Si la génération est effectuée sur un sous-réseau privé et qu'Image Builder ne parvient pas à se connecter pour télécharger les composants, le message d'erreur suivant s'affiche :

« failed with reason: failed to download the EC2 Image Builder Component, operation error imagebuilder: GetComponent, exceeded maximum number of attempts, 3, dial tcp i/o timeout. »

Pour résoudre l'erreur précédente, assurez-vous que vos groupes de sécurité et votre résolution DNS autorisent la communication sur les ports requis. Vous pouvez également créer un point de terminaison Amazon VPC d’interface s'il n'existe pas pour les mêmes VPC et sous-réseau que ceux utilisés dans votre configuration Image Builder Infrastructure. Vérifiez également que votre configuration est conforme aux exigences d’Image Builder.

Une expiration du délai se produit lorsque le build récupère la mirrorlist

Amazon Linux stocke la mirrorlist dans un compartiment Amazon Simple Storage Service (Amazon S3). Si la génération est effectuée sur un sous-réseau privé qui n'a pas accès à Amazon S3, le message d'erreur de délai d’attente suivant s'affiche :

« Could not retrieve mirrorlist; error was 12:: Timeout was reached. »

Pour résoudre ce problème, créez un point de terminaison de passerelle Amazon VPC pour Amazon S3. Par défaut, Amazon VPC ajoute la liste des préfixes Amazon S3 à la table de routage lorsque vous créez un point de terminaison. Cependant, il est recommandé de vérifier que la liste des préfixes se trouve dans la table de routage.

Si vous utilisez une AMI qui n'est pas Amazon Linux, la mirrorlist n'est pas stockée sur Amazon S3. Dans ce scénario, une expiration du délai d’attente de génération peut se produire lorsque le build reçoit le référentiel/la mirrorlist. Assurez-vous d'autoriser l'adresse ou l'URL du référentiel dans votre pare-feu réseau ou proxy. Si le référentiel/la mirrorlist requiert Internet, permettez l’accès à internet sur le sous-réseau via une passerelle NAT.

Une expiration du délai se produit à l'étape ApplyBuildComponents

Si une expiration du délai d’attente de génération se produit à l'étape ApplyBuildComponents, vous recevez le message d'erreur suivant :

« Workflow Execution ID: failed with reason: ExpectationNotMet. ssm:ListCommandInvocations did not meet terminal states: [['Success']] after 1440 attempts. Reason: Timeout. in workflow step ApplyBuildComponents. »

Pour résoudre ce problème, analysez les journaux qu'Image Builder a envoyés au compartiment Amazon S3 de l'infrastructure. Pour plus d'informations, consultez la section Examiner les journaux d'exécution du flux de travail de la rubrique Résoudre les problèmes liés aux builds de pipeline.

Analysez également les journaux de composant de l'instance que vous utilisez pour générer ou tester une nouvelle image. Avant de consulter les journaux, désactivez Résilier l'instance en cas d'échec. Pour accéder à cette fonctionnalité, procédez comme suit :

  1. Ouvrez la console Image Builder.
  2. Choisissez Modifier l'infrastructure.
  3. Choisissez Modifier, puis sélectionnez Spécifier les paramètres pour résoudre les problèmes liés à la génération de votre image.
  4. Choisissez Paramètres de l'instance, puis désactivez l'option Résilier l'instance en cas d'échec.

Remarque : le fichier journal detailedoutput.json décrit le motif pour lequel le composant a échoué ou expiré. Le fichier application.log fournit des informations de dépannage pour le débogage.

Enfin, vérifiez la valeur du paramètre timeoutSeconds dans le schéma YAML de votre document. La valeur par défaut est 7200. Pour augmenter le délai d'attente avant qu'Image Builder n’expire, mettez à jour la valeur du document YAML. La valeur de -1 est infinie.

AWS OFFICIELA mis à jour il y a 8 mois