Wie behebe ich Fehler, die bei der Ausführung von Amazon ECS Exec für meine Fargate-Aufgaben auftreten?

Lesedauer: 5 Minute
0

Ich möchte Fehler beheben, die bei der Ausführung von Amazon Elastic Container Service (Amazon ECS) Exec für meine AWS Fargate-Aufgaben auftreten.

Kurze Beschreibung

Bei der Verwendung von Amazon ECS Exec für Fargate-Aufgaben erhalten Sie möglicherweise die folgenden Fehlermeldungen:

  • Beim Aufrufen des ExecuteCommand-Vorgangs ist ein Fehler aufgetreten (InvalidParameterException): Der Befehl „Ausführen“ ist fehlgeschlagen, weil der Befehl „Ausführen“ nicht aktiviert war, als die Aufgabe ausgeführt wurde, oder der Agent „Befehl ausführen“ nicht ausgeführt wird. Warten Sie und versuchen Sie es erneut, oder führen Sie eine neue Aufgabe mit aktiviertem Befehl „Ausführen“ aus und versuchen Sie es erneut.
  • Beim Aufrufen des ExecuteCommand-Vorgangs ist ein Fehler aufgetreten (TargetNotConnectedException): Der Befehl „Ausführen“ ist aufgrund eines internen Fehlers fehlgeschlagen. Versuchen Sie es später erneut.

Um diese Fehler zu korrigieren, beheben Sie InvalidParameter und TargetNotConnectedException.

Lösung

**Hinweis:**Es hat sich bewährt, AWS CloudShell zu verwenden. CloudShell ist mit dem AWS Systems Manager Session Manager-Plugin und der AWS Command Line Interface (AWS CLI) vorinstalliert. Wenn Sie beim Ausführen von AWS CLI-Befehlen Fehlermeldungen erhalten, vergewissern Sie sich, dass Sie eine aktuelle Version der AWS CLI ausführen.

**Wichtig:**Ersetzen Sie alle Beispielzeichenfolgen in den AWS CLI-Befehlen durch Ihre Werte. Ersetzen Sie beispielsweise example-cluster-name durch den Namen Ihres Clusters.

Beheben des Fehlers „InvalidParameterException“

Wenn Sie die Option ExecuteCommand für Ihre Fargate-Aufgabe nicht aktivieren, erhalten Sie die Fehlermeldung InvalidParameterException. Gehen Sie wie folgt vor, um dieses Problem zu beheben:

1.Überprüfen Sie, ob der Parameter enableExecuteCommand auf true oder false gesetzt ist:

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

2.Wenn der Parameter enableExecuteCommand false ist, aktualisieren Sie den Parameter auf true:

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

**Hinweis:**Die Option force-new-deployment erstellt eine neue Bereitstellung, die basierend auf der Bereitstellungskonfiguration des Dienstes neue Aufgaben startet und alte Aufgaben stoppt. Weitere Informationen finden Sie unter Fortlaufende Updates.

Beheben des Fehlers „TargetNotConnectedException“

Führen Sie die folgenden Schritte aus, um einen TargetNotConnectionException-Fehler zu beheben:

  • Überprüfen Sie die erforderlichen Berechtigungen und die Netzwerkkonfiguration.
  • Verwenden Sie Amazon ECS Exec, um mit der richtigen Shell in den Container zu gelangen.
  • Generieren Sie Protokolle für Amazon ECS Exec, um Probleme zu identifizieren.

Überprüfen Sie die erforderlichen Berechtigungen und die Netzwerkkonfiguration

1.Amazon ECS Exec benötigt eine IAM-Aufgabenrolle, um Berechtigungen für Container zu erteilen. Verwenden Sie die folgende Richtlinie, um die erforderlichen SSM-Berechtigungen für Ihre IAM-Aufgabenrolle hinzuzufügen:

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

Weitere Informationen finden Sie unter IAM-Aufgabenrolle.

2.Wenn Sie Endpunkte der Schnittstelle Amazon Virtual Private Cloud (Amazon VPC) mit Amazon ECS verwenden, erstellen Sie die folgenden Endpunkte für Systems Manager Session Manager:

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

Weitere Informationen finden Sie in Schritt 6: (Optional) Verwenden Sie AWS PrivateLink, um einen VPC-Endpunkt für Session Manager einzurichten.

3.Führen Sie das Skript check-ecs-exec.sh aus, um zu bestätigen, dass Ihre AWS CLI-Umgebung und Ihr Amazon ECS-Cluster oder Ihre Aufgabe für Amazon ECS Exec bereit sind. Stellen Sie sicher, dass Sie die Voraussetzungen erfüllen. Weitere Informationen finden Sie unter Amazon ECS Exec Checker auf der GitHub-Website.

**Hinweis:**Nach dem Ausführen des Skripts check-ecs-exec.sh gibt die Ausgabe an, was Sie vor der Verwendung von ECS Exec beheben müssen.

Beispiel für eine Ausgabe:

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

Die vorherige Ausgabe weist darauf hin, dass ECS Exec für die Aufgabe nicht aktiviert ist und dass die Aufgabenrolle nicht über die erforderlichen SSM-Berechtigungen verfügt.

4.Überprüfen Sie, ob Sie die IAM-Benutzeranmeldeinformationen auf Containerebene konfiguriert haben, z. B. indem Sie einen Zugriffsschlüssel oder einen geheimen Zugriffsschlüssel angegeben haben. Wenn Sie IAM-Benutzeranmeldeinformationen auf Containerebene konfiguriert haben, werden dadurch die Berechtigungen auf Aufgabenebene überschrieben und ein Fehler verursacht.

Verwenden Sie Amazon ECS Exec, um mit der richtigen Shell in den Container zu gelangen

Unterschiedliche Basisbilder können unterschiedliche Shells enthalten, und die Verwendung falscher Shells führt zu einem Fehler. Stellen Sie sicher, dass Sie die richtige Shell gemäß Ihrem Anwendungsbild verwenden.

Führen Sie den folgenden Befehl aus, um mit ECS Exec in den Container zu gelangen. Ersetzen Sie example_shell durch Ihre Shell:

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

Generieren Sie Protokolle für Amazon ECS Exec, um Probleme zu identifizieren

Generieren Sie SSM-Agent-Protokolle, um festzustellen, warum ECS Exec in Ihrer Fargate-Aufgabe nicht funktioniert. Führen Sie den folgenden Befehl im Umgebungsabschnitt der Container-Definition aus:

Konsole:

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"

Wenn Sie den Protokolltreiber awslogs verwenden, generieren die vorherigen Befehle SSM-Agent-Protokolle und übertragen sie an die Amazon CloudWatch-Protokollgruppe. Wenn Sie andere Protokolltreiber oder Protokollierungsendpunkte verwenden, werden die Protokolle des SSM-Agents an diese Standorte übertragen.

Beispiel mit JSON:

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

**Hinweis:**Unterschiedliche Anwendungen verfügen über unterschiedliche Shells und Editoren. Überprüfen und ändern Sie die Befehlsparameter unbedingt entsprechend Ihrer Anwendung.

Ähnliche Informationen

Verwenden von ECS Exec

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr