Come faccio a risolvere gli errori che ricevo quando eseguo Amazon ECS Exec sulle mie attività su Fargate?
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
Contenuto pertinente
- AWS UFFICIALEAggiornata 3 anni fa
- AWS UFFICIALEAggiornata 6 mesi fa
- AWS UFFICIALEAggiornata un anno fa