Comment puis-je résoudre une erreur « format exec » qui entraîne l'échec de mes tâches Amazon ECS ?

Lecture de 3 minute(s)
0

Je souhaite corriger l'erreur « format exec » qui entraîne l'échec de mes tâches Amazon Elastic Container Service (Amazon ECS).

Brève description

Cette erreur se produit lorsque les tâches exécutées pour une image de conteneur sont créées pour une architecture différente pour vos instances Amazon Elastic Compute Cloud (Amazon EC2). Par exemple, si vous avez créé une image de conteneur sur une instance basée sur ARM, puis que vous essayez d'exécuter la tâche sur une instance x86.

Remarque : La raison d'arrêt de la tâche est « Essential container in task exited » et le code de sortie est 1.

Résolution

Pour résoudre ce problème, modifiez l'architecture de vos tâches Amazon ECS ou reconstruisez l'image pour l'architecture appropriée.

Modifier l'architecture de vos tâches ECS

L'architecture d'une tâche est déterminée par le paramètre cpuArchitecture dans la définition de tâche. Les valeurs valides sont x86_64 et ARM64 avec x86_64 comme valeur par défaut.

Pour modifier l'architecture utilisée pour lancer les tâches, créez une nouvelle révision de la définition de tâche avec le paramètre cpuArchitecture défini sur la valeur souhaitée. Si les tâches font partie d'un service, utilisez l'architecture révisée pour mettre à jour le service et effectuer un déploiement afin de lancer de nouvelles tâches.

Pour les types de lancement Fargate, AWS provisionne automatiquement l'infrastructure avec l'architecture appropriée pour exécuter la tâche. Si vous utilisez des instances EC2 ou des instances externes comme type de lancement, vous devez gérer la capacité de votre configuration. Pour plus d'informations, consultez la section Gestion de la capacité.

Reconstruire l'image pour l'architecture correcte

Utilisez la même architecture que celle spécifiée dans la définition de tâche pour reconstruire l'image de conteneur.

Remarque : La plupart des outils de création d'images de conteneurs utilisent par défaut l'architecture de la machine hôte.

Utiliser Docker ou Finch

Ajoutez le paramètre --platform à la commande de build pour définir l'architecture cible. Par exemple, le build Docker --platform linux/arm64 [...] crée une image pour ARM64. Le build Finch --plaform linux/amd64 [...] crée une image pour l'architecture x86/64.

Exemple de commande de génération :

docker build -t my-image --platform linux/arm64

Pour plus d'informations sur le client de ligne de commande Finch, consultez la section Présentation de Finch : Un client open source pour le développement de conteneurs.

Pour plus d'informations sur la création d'images Docker, consultez la section Création d'images multiplateformes sur le site Web de Docker.

AWS CDK

Utilisez l'image AWS Cloud Development Kit (AWS CDK) ecs.ContainerImage.fromAsset pour créer et charger une image à partir d'un fichier Docker dans votre répertoire source. Pour plus d'informations, consultez la section Images.

CodeBuild

Vous pouvez également utiliser AWS CodeBuild avec des images Docker pour configurer l'architecture. Pour plus d'informations, consultez la section Modes et types de calcul de l'environnement de création.

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 8 mois