Come faccio a risolvere gli errori che ricevo quando eseguo Amazon ECS Exec sulle mie attività su Fargate?

6 minuti di lettura
0

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

Breve descrizione

Quando utilizzi Amazon ECS Exec per le attività di Fargate, potresti ricevere le seguenti dichiarazioni di errore:

  • Si è verificato un errore (InvalidParameterException) durante la chiamata all'operazione ExecuteCommand: Il comando execute non è riuscito perché il comando execute non è stato abilitato quando l'operazione è stata eseguita o l'agente del comando di esecuzione non è in esecuzione. Attendi e riprova o esegui una nuova attività con il comando di esecuzione abilitato e riprova.
  • Si è verificato un errore (targetNotConnectedException) durante la chiamata all'operazione ExecuteCommand: Il comando di esecuzione non è riuscito a causa di un errore interno. Riprova più tardi.

Per risolvere questi errori, risolvi InvalidParameter e TargetNotConnectedException.

Risoluzione

Nota: Utilizzare AWS CloudShell è una best practice. CloudShell è preinstallato con il plugin AWS Systems Manager Session Manager e l'interfaccia a riga di comando AWS (AWS CLI). Se ricevi errori durante l'esecuzione dei comandi dell'interfaccia a riga di comando di AWS, conferma di utilizzare una versione recente dell'interfaccia a riga di comando di AWS.

Importante: Sostituisci tutte le stringhe di esempio nei comandi dell'interfaccia a riga di comando di AWS con i tuoi valori. Ad esempio, sostituisci example-cluster-name con il nome del tuo cluster.

Risolvi l'errore InvalidParameterException

Se non attivi l'opzione ExecuteCommand per la tua attività Fargate, ricevi l'errore InvalidParameterException. Per risolvere questo problema, completa i seguenti passaggi:

1.    Controlla se il parametro EnableExecuteCommand è impostato su true o false:

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

2.    Se il parametro EnableExecuteCommand è false, aggiorna il parametro come true:

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

Nota: 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. Per ulteriori informazioni, vedi Aggiornamenti periodici.

Risolvi l'errore TargetNotConnectedException

Per risolvere un errore TargetNotConnectionException, completa i seguenti passaggi:

  • Controlla le autorizzazioni richieste e la configurazione di rete.
  • Usa Amazon ECS Exec per entrare nel contenitore con la shell corretta.
  • Genera log per Amazon ECS Exec per identificare i problemi.

Verifica le autorizzazioni richieste e la configurazione di rete

1.    Amazon ECS Exec richiede un ruolo Task IAM per concedere le autorizzazioni per i container. Utilizza la seguente politica per aggiungere le autorizzazioni SSM richieste per il tuo ruolo IAM nell'attività:

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

Per ulteriori informazioni, vedi Task IAM role.

2.    Se utilizzi gli endpoint di interfaccia Amazon Virtual Private Cloud (Amazon VPC) con Amazon ECS, crea i seguenti endpoint per Systems Manager Session Manager:

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

Per ulteriori informazioni, consulta la Fase 6: (Facoltativo) Usa AWS PrivateLink per configurare un endpoint VPC per Session Manager.

3.    Esegui lo script check-ecs-exec.sh per confermare che l'ambiente CLI di AWS e il cluster o l'attività Amazon ECS siano pronti per Amazon ECS Exec. Assicurati di soddisfare i prerequisiti. Per ulteriori informazioni, consulta Amazon ECS Exec Checker sul sito Web di GitHub.

Nota: Dopo aver eseguito lo script check-ecs-exec.sh, l'output indica 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 indica che ECS Exec non è attivato per l'attività e che il ruolo dell'attività non dispone delle autorizzazioni SSM richieste.

4.    Verifica se hai configurato le credenziali utente IAM a livello di contenitore, ad esempio specificando una chiave di accesso o una chiave di accesso segreta. Se hai configurato le credenziali utente IAM a livello di contenitore, ciò sovrascrive le autorizzazioni a livello di attività e causa un errore.

Usa Amazon ECS Exec per entrare nel contenitore con la shell corretta

Immagini di base diverse possono contenere shell diverse al loro interno e l'utilizzo di shell errate genera un errore. Assicurati di utilizzare la shell corretta secondo l'immagine dell'applicazione.

Esegui il seguente comando per utilizzare ECS Exec per entrare nel contenitore. Sostituisci example_shell con la tua shell:

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

Genera log per Amazon ECS Exec per identificare i problemi

Genera i log di SSM Agent per determinare perché ECS Exec non funziona nell'ambito della tua attività Fargate. Esegui il seguente comando nella sezione ambiente della definizione del contenitore:

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"

Se utilizzi il driver di registro 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 registro o endpoint di registrazione, i log di SSM Agent vengono trasferiti in tali posizioni.

Esempio di utilizzo di JSON:

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

Nota: Applicazioni diverse hanno shell ed editor diversi. Assicurati di rivedere e modificare i parametri dei comandi in base alla tua applicazione.

Informazioni correlate

Utilizzo di ECS Exec

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa