Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
Come posso risolvere gli errori che ricevo quando utilizzo ECS Exec sulle mie attività Fargate?
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:
- Esegui il comando describe-tasks per verificare se il parametro enableExecuteCommand è impostato su true o false:
Nota: sostituisci example-cluster-name con il tuo cluster e example-task-id con il tuo task ID.aws ecs describe-tasks --cluster example-cluster-name --tasks example-task-id| grep enableExecuteCommand
- Se il parametro enableExecuteCommand è ** false**, esegui il seguente comando update-service per impostare il parametro su true:
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.aws ecs update-service --cluster example-cluster-name --service example-service --region example-region --enable-execute-command --force-new-deployment
- Esegui il seguente comando describe-tasks per verificare lo stato di ExecuteCommandAgent:
Nota: sostituisci example-cluster-name con il tuo cluster e example-task-id con il tuo task ID.aws ecs describe-tasks --cluster example-cluster-name --tasks example-task-id | grep -A 6 managedAgents
- 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:
- 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.
- 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. - 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:
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.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
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
