Comment résoudre les erreurs que je reçois lorsque j’exécute Amazon ECS Exec sur mes tâches Fargate ?

Lecture de 6 minute(s)
0

Je souhaite résoudre les erreurs que je reçois lorsque j’exécute Amazon Elastic Container Service (Amazon ECS) Exec sur mes tâches AWS Fargate.

Brève description

Lorsque vous utilisez Amazon ECS Exec pour des tâches Fargate, vous pouvez recevoir les messages d’erreur suivants :

  • Une erreur s’est produite (InvalidParameterException) lors de l’appel de l’opération ExecuteCommand : La commande d’exécution a échoué, car elle n’était pas activée lors de l’exécution de la tâche ou parce que l’agent de commande d’exécution n’était pas en cours d’exécution. Attendez et réessayez, ou exécutez une nouvelle tâche avec la commande d’exécution activée, puis réessayez.
  • Une erreur s’est produite (TargetNotConnectedException) lors de l’appel de l’opération ExecuteCommand : La commande d’exécution a échoué en raison d’une erreur interne. Réessayez ultérieurement.

Pour résoudre ces erreurs, réglez les problèmes de type InvalidParameter et TargetNotConnectedException.

Résolution

Remarque : Il est recommandé d’utiliser AWS CloudShell. CloudShell est préinstallé avec le plug-in Gestionnaire de session d’AWS Systems Manager et l’interface de la ligne de commande AWS (AWS CLI). Si vous recevez des erreurs lorsque vous exécutez des commandes AWS CLI, vérifiez que vous utilisez une version récente d’AWS CLI.

**Important :**Remplacez tous les exemples de chaînes dans les commandes AWS CLI par vos valeurs. Par exemple, remplacez example-cluster-name par le nom de votre cluster.

Résoudre l’erreur InvalidParameterException

Si vous n’activez pas l’option ExecuteCommand pour votre tâche Fargate, vous recevrez l’erreur InvalidParameterException. Pour résoudre ce problème, procédez comme suit :

1.    Vérifiez que le paramètre enableExecuteCommand est défini sur true ou false:

aws ecs describe-tasks --cluster <example-cluster-name> --tasks <example-task-id>| grep enableExecuteCommand

2.    Si le paramètre enableExecuteCommand est défini sur false, mettez-le à jour avec la valeur true :

aws ecs update-service --cluster <example-cluster-name> --service <example-service> --region <example-region> --enable-execute-command --force-new-deployment

**Remarque :**L’option force-new-deployment crée un nouveau déploiement qui lance de nouvelles tâches et arrête les anciennes en fonction de la configuration de déploiement du service. Pour en savoir plus, consultez la rubrique Mises à jour continues.

Résoudre l’erreur TargetNotConnectedException

Pour résoudre une erreur TargetNotConnectedException, procédez comme suit :

  • Vérifiez les autorisations requises et la configuration réseau.
  • Utilisez Amazon ECS Exec pour accéder au conteneur avec le shell approprié.
  • Générez des journaux pour Amazon ECS Exec afin de cerner les problèmes.

Vérifiez les autorisations requises et la configuration réseau

1.    Amazon ECS Exec nécessite un rôle IAM de tâche afin d’accorder des autorisations pour les conteneurs. Utilisez la politique suivante pour ajouter les autorisations SSM requises pour votre rôle IAM de tâche :

{
   "Version": "2012-10-17",
   "Statement": [
       {
       "Effect": "Allow",
       "Action": [
            "ssmmessages:CreateControlChannel",
            "ssmmessages:CreateDataChannel",
            "ssmmessages:OpenControlChannel",
            "ssmmessages:OpenDataChannel"
       ],
      "Resource": "*"
      }
   ]
}

Pour en savoir plus, consultez la rubrique Rôle IAM de tâche.

2.    Si vous utilisez des points de terminaison Amazon Virtual Private Cloud (Amazon VPC) avec Amazon ECS, créez les points de terminaison suivants pour le gestionnaire de session de Systems Manager :

  • ec2messages.region.amazonaws.com
  • ssm.region.amazonaws.com
  • ssmmessages.region.amazonaws.com

Pour en savoir plus, consultez l’étape 6 : (Facultatif) Utilisez AWS PrivateLink pour configurer un point de terminaison VPC pour le gestionnaire de session.

3.    Exécutez le script Hecke-ecs-exec.sh pour confirmer que votre environnement AWS CLI et votre cluster ou votre tâche Amazon ECS sont prêts pour l’exécution d’Amazon ECS Exec. Vérifiez que les conditions requises sont remplies. Pour en savoir plus, consultez la page Vérificateur Amazon ECS Exec Checker sur le site Web de GitHub.

Remarque : Après avoir exécuté le script check-ecs-exec.sh, la sortie indique ce que vous devez résoudre avant d’utiliser ECS Exec.

Exemple de sortie :

Prerequisites for check-ecs-exec.sh v0.7
-------------------------------------------------------------
  jq      | OK (/usr/bin/jq)
  AWS CLI | OK (/usr/local/bin/aws)

-------------------------------------------------------------
Prerequisites for the AWS CLI to use ECS Exec
-------------------------------------------------------------
  AWS CLI Version        | OK (aws-cli/2.11.0 Python/3.11.2 Linux/4.14.255-291-231.527.amzn2.x86_64 exec-env/CloudShell exe/x86_64.amzn.2 prompt/off)
  Session Manager Plugin | OK (1.2.398.0)

-------------------------------------------------------------
Checks on ECS task and other resources
-------------------------------------------------------------
Region : us-east-1
Cluster: Fargate-Testing
Task   : ca27e41ea3f54fd1804ca00feffa178d
-------------------------------------------------------------
  Cluster Configuration  | Audit Logging Not Configured
  Can I ExecuteCommand?  | arn:aws:iam::12345678:role/Admin
     ecs:ExecuteCommand: allowed
     ssm:StartSession denied?: allowed
  Task Status            | RUNNING
  Launch Type            | Fargate
  Platform Version       | 1.4.0
  Exec Enabled for Task  | NO
  Container-Level Checks |
    ----------
      Managed Agent Status - SKIPPED
    ----------
    ----------
      Init Process Enabled (Exec-check:2)
    ----------
         1. Disabled - "nginx"
    ----------
      Read-Only Root Filesystem (Exec-check:2)
    ----------
         1. Disabled - "nginx"
  Task Role Permissions  | arn:aws:iam::12345678:role/L3-session
     ssmmessages:CreateControlChannel: implicitDeny
     ssmmessages:CreateDataChannel: implicitDeny
     ssmmessages:OpenControlChannel: implicitDeny
     ssmmessages:OpenDataChannel: implicitDeny
  VPC Endpoints          | SKIPPED (vpc-abcd - No additional VPC endpoints required)
  Environment Variables  | (Exec-check:2)
       1. container "nginx"
       - AWS_ACCESS_KEY: not defined
       - AWS_ACCESS_KEY_ID: not defined
       - AWS_SECRET_ACCESS_KEY: not defined

La sortie précédente indique que ECS Exec n’est pas activé pour la tâche et que le rôle de tâche ne dispose pas des autorisations SSM requises.

4.    Vérifiez que vous avez configuré les informations d’identification utilisateur IAM au niveau du conteneur, par exemple en spécifiant une clé d’accès ou une clé d’accès secrète. Si vous avez configuré les informations d’identification utilisateur IAM au niveau du conteneur, cela remplace les autorisations au niveau de la tâche et provoque une erreur.

Utilisez Amazon ECS Exec pour entrer dans le conteneur avec le shell approprié

Différentes images de base peuvent contenir des shells différents ; l’utilisation de shells incorrects entraîne une erreur. Assurez-vous que vous utilisez le shell correspondant à l’image de votre application.

Exécutez la commande suivante pour utiliser ECS Exec afin d’accéder au conteneur. Remplacez example_shell par votre shell :

aws ecs execute-command --region <example-region> --cluster <example-cluster> --container <example-container> --task <example-task> --command "<example_shell>" --interactive

Générez des journaux pour Amazon ECS Exec afin de cerner les problèmes

Générez des journaux d’agent SSM afin de déterminer pourquoi ECS Exec ne fonctionne pas dans votre tâche Fargate. Exécutez la commande suivante dans la section environnement de la définition du conteneur :

Console :

bin/bash,-c,sleep 2m && cat /var/log/amazon/ssm/amazon-ssm-agent.log

JSON :

"/bin/bash","-c","sleep 2m && cat /var/log/amazon/ssm/amazon-ssm-agent.log"

Si vous utilisez le pilote de journal awslogs, les commandes précédentes génèrent des journaux de l’agent SSM et les transfèrent vers le groupe de journaux Amazon CloudWatch. Si vous utilisez d’autres pilotes de journal ou des points de terminaison de journal, l’agent SSM capture le transfert vers ces emplacements.

Exemple utilisant JSON :

"entryPoint": [],
      "portMappings": [],
      "command": [
        "bin/bash",
        "-c",
        "sleep 2m && cat /var/log/amazon/ssm/amazon-ssm-agent.log"
      ],

Remarque : Différentes applications ont des shells et des éditeurs différents. Vérifiez et modifiez les paramètres de commande pour qu’ils correspondent à votre application.

Informations connexes

Utilisation d’ECS Exec

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an