Como soluciono erros que recebo quando uso o ECS Exec em minhas tarefas do Fargate?
Quero solucionar os erros que recebo ao usar o Amazon Elastic Container Service (Amazon ECS) Exec em minhas tarefas do AWS Fargate.
Breve descrição
Ao usar o ECS Exec em tarefas do Fargate, você pode receber uma das seguintes mensagens de erro:
- “Ocorreu um erro (InvalidParameterException) ao chamar a operação ExecuteCommand: O comando de execução falhou porque o comando de execução não estava ativado quando a tarefa foi executada ou o atendente de comando de execução não está em execução. Aguarde e tente novamente ou execute uma nova tarefa com o comando de execução ativado e tente novamente.”
- “Ocorreu um erro (TargetNotConnectedException) ao chamar a operação ExecuteCommand: O comando de execução falhou devido a um erro interno. Tente novamente mais tarde.”
Resolução
Observação: Se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Para resolver erros comuns que ocorrem quando você usa o ECS Exec em tarefas do Fargate, é uma prática recomendada usar o AWS CloudShell. O CloudShell vem pré-instalado com o AWS Systems Manager Session Manager Agent (SSM Agent) e a AWS CLI.
Erro InvalidParameterException
Se a opção ExecuteCommand da tarefa do Fargate estiver desativada, você receberá o erro InvalidParameterException.
Para solucionar esse problema, realize as etapas a seguir:
- Execute o comando describe-tasks para verificar se o parâmetro enableExecuteCommand está definido como true ou false:
Observação: substitua example-cluster-name pelo cluster e example-task-id pelo ID da tarefa.aws ecs describe-tasks --cluster example-cluster-name --tasks example-task-id| grep enableExecuteCommand
- Se o parâmetro enableExecuteCommand for false, execute o seguinte comando update-service para atualizar o parâmetro para true:
Observação: substitua example-cluster-name pelo seu cluster, example-service pelo seu serviço e example-region pela sua região AWS. A opção force-new-deployment cria uma nova implantação que inicia novas tarefas e interrompe tarefas anteriores com base na configuração de implantação do serviço. Se seus serviços usam implantação azul/verde por meio do AWS CodeDeploy, em vez de force-new-deployment, inicie uma implantação CODE_DEPLOY. Não é possível usar force-new-deployment para implantação azul/verde porque essa opção inicia uma atualização contínua.aws ecs update-service --cluster example-cluster-name --service example-service --region example-region --enable-execute-command --force-new-deployment
- Execute o seguinte comando describe-tasks para verificar o status de ExecuteCommandAgent:
Observação: substitua example-cluster-name pelo cluster e example-task-id pelo ID da tarefa.aws ecs describe-tasks --cluster example-cluster-name --tasks example-task-id | grep -A 6 managedAgents
- Verifique a saída do comando para verificar o estado do atendente ExecuteCommand. Se lastStatus de ExecuteCommandAgent não estiver EM EXECUÇÃO, verifique os logs do atendente ExecuteCommandAgent para identificar a causa-raiz. Vá até as etapas de resolução de problemas Gerar logs do ECS Exec para identificar problemas para gerar os logs do ExecuteCommandAgent.
Se ExecuteCommandAgent não conseguir recuperar as credenciais porque você configurou um proxy no contêiner, adicione a seguinte opção NO_PROXY aos arquivos de configuração da instância de contêiner:env no_proxy=169.254.169.254,169.254.170.2
TargetNotConnectedExceptionerror
Para resolver o erro TargetNotConnectionException, prossiga com as seguintes medidas.
Adicione as permissões necessárias e confirme se a configuração de rede está correta
Conclua as seguintes etapas:
- Adicione as permissões necessárias ao seu perfil do AWS Identity and Access Management (IAM) da tarefa do Amazon ECS. Se o perfil do IAM da tarefa já tiver as permissões necessárias, verifique se alguma política de controle de serviço (SCPs) bloqueia a conexão da tarefa com o SSM Agent.
- Se você usa endpoints de interface do Amazon Virtual Private Cloud (Amazon VPC) com o Amazon ECS, crie os seguintes endpoints:
ec2messages.region.amazonaws.com
ssm.region.amazonaws.com
ssmmessages.region.amazonaws.com
Observação: substitua region pela sua região. - Para confirmar que seu ambiente da AWS CLI e o cluster ou tarefa do Amazon ECS estão prontos para o Amazon ECS Exec, execute o script check-ecs-exec.sh. Para informações sobre pré-requisitos e uso, consulte Amazon ECS Exec Checker no site do GitHub.
A saída do script check-ecs-exec.sh mostra o que você deve resolver antes de usar o ECS Exec. Exemplo de saída:
A saída anterior mostra que o ECS Exec está desativado na tarefa e que o perfil da tarefa não tem as permissões necessárias do Systems Manager. Observação: você deve definir o parâmetro ReadonlyRootFilesystem como false na definição da tarefa para executar o ECS Exec. Se ReadonlyRootFileSystem for true, o SSM Agent não poderá criar os diretórios necessários.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
Verifique se você configurou as credenciais de usuário do IAM no nível do contêiner, como uma chave de acesso ou uma chave de acesso secreta. O SSM Agent usa o AWS SDK para Java ao verificar a autenticação. Se você configurar a chave de acesso ou a chave de acesso secreta na instância de contêiner como variáveis de ambiente, substituirá as permissões no nível da tarefa. Para usar o ECS Exec, as credenciais do IAM no nível do contêiner devem fornecer permissões para o SSM Agent.
Usar o ECS Exec para entrar no contêiner com o shell correto
Imagens de base diferentes podem ter camadas diferentes dentro delas. Se você usar o shell incorreto, receberá erros. Verifique se você está usando o shell correto com base na imagem da sua aplicação.
Para usar o ECS Exec para entrar no contêiner, execute o comando execute-command:
aws ecs execute-command --region example-region --cluster example-cluster --container example-container --task example-task --command "example_shell" --interactive
Observação: substitua example-region pela sua região, example-cluster pelo nome do cluster, example-container pelo nome da instância de contêiner e example-task pelo nome da tarefa.
Gerar logs para que o ECS Exec identifique problemas
Para determinar por que o ECS Exec não está funcionando, execute o seguinte comando na seção de ambiente da definição do contêiner para gerar logs do SSM Agent:
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"
Observação: Aplicações diferentes têm diferentes shells e editores. Modifique os parâmetros de comando anteriores de acordo com os requisitos da sua aplicação.
Se você usa o driver de log awslogs, os comandos anteriores geram registros do SSM Agent e os transferem para o grupo de logs do Amazon CloudWatch. Se você usa outros drivers de log ou endpoints de registro, os logs do SSM Agent são transferidos para esses locais.
Exemplo de JSON:
"entryPoint": [], "portMappings": [], "command": [ "bin/bash", "-c", "sleep 2m && cat /var/log/amazon/ssm/amazon-ssm-agent.log" ],
Informações relacionadas

Conteúdo relevante
- feita há 2 diaslg...
- feita há um mêslg...
- feita há um mêslg...
- AWS OFICIALAtualizada há 10 meses
- AWS OFICIALAtualizada há 3 anos
- AWS OFICIALAtualizada há 4 anos
- AWS OFICIALAtualizada há 4 meses