Come posso risolvere gli errori che ricevo quando utilizzo ECS Exec sulle mie attività Fargate?

6 minuti di lettura
0

Desidero risolvere gli errori che ricevo quando utilizzo Amazon Elastic Container Service (Amazon ECS) Exec sulle mie attività AWS Fargate.

Breve descrizione

Quando utilizzi ECS Exec sulle attività di Fargate, è possibile che venga visualizzato uno dei seguenti messaggi di errore:

  • "An error occurred (InvalidParameterException) when calling the ExecuteCommand operation: The execute command failed because execute command was not enabled when the task was run or the execute command agent isn't running. Wait and try again or run a new task with execute command enabled and try again."
  • "An error occurred (TargetNotConnectedException) when calling the ExecuteCommand operation: The execute command failed due to an internal error. Try again later."

Risoluzione

Nota: se si verificano errori durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Per risolvere gli errori più comuni che si verificano quando utilizzi ECS Exec sulle attività di Fargate, è consigliabile utilizzare AWS CloudShell. CloudShell è preinstallato con l'agente AWS Systems Manager Session Manager (agente SSM) e AWS CLI.

Errore InvalidParameterException

Se l'opzione ExecuteCommand è disattivata per la tua attività Fargate, ricevi l'errore InvalidParameterException.

Per risolvere questo problema, completa i passaggi seguenti:

  1. Esegui il comando describe-tasks per verificare se il parametro enableExecuteCommand è impostato su true o false:
    aws ecs describe-tasks --cluster example-cluster-name --tasks example-task-id| grep enableExecuteCommand
    Nota: sostituisci example-cluster-name con il tuo cluster e example-task-id con il tuo task ID.
  2. Se il parametro enableExecuteCommand è ** false**, esegui il seguente comando update-service per impostare il parametro su true:
    aws ecs update-service --cluster example-cluster-name --service example-service --region example-region --enable-execute-command --force-new-deployment
    Nota: sostituisci example-cluster-name con il tuo cluster, example-service con il tuo servizio ed example-region con la tua regione AWS. L'opzione force-new-deployment crea una nuova distribuzione che avvia nuove attività e interrompe quelle vecchie in base alla configurazione di distribuzione del servizio. Se i tuoi servizi utilizzano un'implementazione blu/verde tramite AWS CodeDeploy, invece di force-new-deployment, avvia una distribuzione CODE_DEPLOY. Non puoi usare force-new-deployment per un'implementazione blu/verde perché questa opzione avvia un aggiornamento progressivo.
  3. Esegui il seguente comando describe-tasks per verificare lo stato di ExecuteCommandAgent:
    aws ecs describe-tasks --cluster example-cluster-name --tasks example-task-id | grep -A 6 managedAgents
    Nota: sostituisci example-cluster-name con il tuo cluster e example-task-id con il tuo task ID.
  4. Controlla l'output del comando per verificare lo stato dell'agente ExecuteCommand. Se l'ultimo stato (lastStatus) di ** ExecuteCommandAgent** non è IN ESECUZIONE, controlla i log dell'agente ExecuteCommandAgent per identificare la causa principale. Procedi con i passaggi di risoluzione Genera log per ECS Exec per identificare i problemi per generare i log di ExecuteCommandAgent.
    Se ExecuteCommandAgent non riesce a recuperare le credenziali perché hai configurato un proxy nel container, aggiungi la seguente opzione NO_PROXY ai file di configurazione dell'istanza di container:
    env no_proxy=169.254.169.254,169.254.170.2

Errore TargetNotConnectedException

Per risolvere un errore TargetNotConnectionException, intraprendi le seguenti azioni.

**Aggiungi le autorizzazioni richieste e verifica che la configurazione di rete sia corretta **

Completa i seguenti passaggi:

  1. Aggiungi le autorizzazioni richieste al ruolo AWS Identity and Access Management (IAM) della tua attività Amazon ECS. Se il ruolo IAM dell'attività dispone già delle autorizzazioni richieste, controlla se eventuali policy di controllo dei servizi (SCP) bloccano la connessione dell'attività all'agente SSM.
  2. Se utilizzi endpoint di interfaccia Amazon Virtual Private Cloud (Amazon VPC) con Amazon ECS, crea i seguenti endpoint:
    ec2messages.region.amazonaws.com
    ssm.region.amazonaws.com
    ssmmessages.region.amazonaws.com
    Nota: sostituisci region con la tua regione.
  3. Per confermare che l'ambiente AWS CLI e il cluster o l'attività Amazon ECS sono pronti per ECS Exec, esegui lo script check-ecs-exec.sh. Per informazioni sui prerequisiti e sull'utilizzo, consulta Amazon ECS Exec Checker sul sito web di GitHub.
    L'output dello script check-ecs-exec.sh mostra cosa è necessario risolvere prima di utilizzare ECS Exec. Esempio di output:
    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
    L'output precedente mostra che ECS Exec è disattivato per l'attività e che il ruolo dell'attività non dispone delle autorizzazioni di Systems Manager richieste. Nota: è necessario impostare il parametro ReadonlyRootFilesystem su false nella definizione dell'attività per eseguire ECS Exec. Se ReadonlyRootFileSystem è true, l'agente SSM non può creare le directory richieste.

Verifica se hai configurato le credenziali utente IAM a livello di container, ad esempio una chiave di accesso o una chiave di accesso segreta. SSM Agent utilizza AWS SDK per Java quando verifica l'autenticazione. Se configuri la chiave di accesso o la chiave di accesso segreta nell'istanza di container come variabili di ambiente, sovrascrivi le autorizzazioni a livello di attività. Per utilizzare ECS Exec, le credenziali IAM a livello di container devono fornire le autorizzazioni per l'agente SSM.

Utilizza Amazon ECS Exec per entrare nel container con la shell corretta

Immagini di base diverse possono avere al loro interno shell diverse. Se utilizzi la shell sbagliata, ricevi degli errori. Assicurati di utilizzare la shell corretta in base all'immagine dell'applicazione.

Per utilizzare ECS Exec per accedere al container, esegui il comando execute-command:

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

Nota: sostituisci example-region con la tua regione, example-cluster con il nome del tuo cluster, example-container con il nome della tua istanza di container ed example-task con il nome della tua attività.

Genera log per ECS Exec per identificare i problemi

Per determinare il motivo per cui ECS Exec non funziona, esegui il seguente comando nella sezione ambiente della definizione del container per generare i log dell'agente SSM:

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"

Nota: applicazioni diverse hanno shell ed editor diversi. Modifica i parametri di comando precedenti in base ai requisiti dell'applicazione.

Se utilizzi il driver di log awslogs, i comandi precedenti generano i log dell'agente SSM e li trasferiscono al gruppo di log di Amazon CloudWatch. Se utilizzi altri driver di log o endpoint di registrazione, i log dell'agente SSM vengono trasferiti in tali posizioni.

Esempio JSON:

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

Informazioni correlate

Utilizzo di ECS Exec

AWS UFFICIALE
AWS UFFICIALEAggiornata 4 mesi fa