Como soluciono os erros que recebo ao executar o Amazon ECS Exec em minhas tarefas do Fargate?

6 minuto de leitura
0

Quero solucionar os erros que recebo ao executar o Amazon Elastic Container Service (Amazon ECS) Exec em minhas tarefas do AWS Fargate.

Breve descrição

Ao usar o Amazon ECS Exec em tarefas do Fargate, você pode receber as seguintes declarações de erro:

  • An error occurred (InvalidParameterException) when calling the ExecuteCommand operation: O comando de execução falhou porque o comando de execução não estava habilitado quando a tarefa foi executada ou o agente 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.
  • An error occurred (TargetNotConnectedException) when calling the ExecuteCommand operation: O comando de execução falhou devido a um erro interno. Tente novamente mais tarde.

Para resolver esses erros, solucione problemas de InvalidParameter e TargetNotConnectedException.

Resolução

**Observação:**É uma melhor prática usar o AWS CloudShell. O CloudShell vem pré-instalado com o plugin AWS Systems Manager Session Manager e a AWS Command Line Interface (AWS CLI). Se você receber erros ao executar comandos da AWS CLI, confirme que está executando uma versão recente da AWS CLI.

**Importante:**Substitua todas as sequências de caracteres de exemplo nos comandos da AWS CLI pelos seus valores. Por exemplo, substitua example-cluster-name pelo nome do seu cluster.

Solucionar o erro InvalidParameterException

Se você não ativar a opção ExecuteCommand para sua tarefa do Fargate, receberá o erro InvalidParameterException. Para resolver esse problema, conclua as seguintes etapas:

1.    Verifique se o parâmetro enableExecuteCommand está definido como verdadeiro ou falso:

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

2.    Se o parâmetro enableExecuteCommand for falso, atualize o parâmetro como verdadeiro:

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

Observação:A opçãoforce-new-deployment cria uma nova implantação que inicia novas tarefas e interrompe tarefas antigas com base na configuração de implantação do serviço. Para obter mais informações, consulte Atualizações contínuas.

Solucionar o erro TargetNotConnectedException

Para resolver um erro TargetNotConnectionException, conclua as seguintes etapas:

  • Verifique as permissões necessárias e a configuração de rede.
  • Use o Amazon ECS Exec para entrar no contêiner com o shell correto.
  • Gere registros para que o Amazon ECS Exec identifique problemas.

**Verifique as permissões necessárias e a configuração de rede **

1.    O Amazon ECS Exec exige uma função de tarefa do IAM para conceder permissões para contêineres. Use a política a seguir para adicionar as permissões de SSM necessárias para o perfil do IAM da sua tarefa:

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

Para obter mais informações, consulte Perfil do IAM da tarefa.

2.    Se estiver usando endpoints da interface Amazon Virtual Private Cloud (Amazon VPC) com o Amazon ECS, crie os seguintes endpoints para o Systems Manager Session Manager:

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

Para obter mais informações, consulte a Etapa 6: (Opcional) Usar o AWS PrivateLink para configurar um endpoint VPC para o Session Manager.

3.    Execute o script check-ecs-exec.sh para confirmar que seu ambiente de CLI da AWS e o cluster ou tarefa do Amazon ECS estão prontos para o Amazon ECS Exec. Certifique-se de atender aos pré-requisitos. Para obter mais informações, consulte Amazon ECS Exec Checker no site do GitHub.

**Observação:**Depois de executar o script check-ecs-exec.sh, a saída indica o que você deve resolver antes de usar o ECS Exec.

Exemplo de saída:

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

A saída anterior indica que o ECS Exec não está ativado para a tarefa e que a função da tarefa não tem as permissões SSM necessárias.

4.    Verifique se você configurou as credenciais de usuário do IAM no nível do contêiner, como especificar uma chave de acesso ou uma chave de acesso secreta. Se você configurou as credenciais de usuário do IAM no nível do contêiner, isso substituirá as permissões no nível da tarefa e causará um erro.

Usar o Amazon ECS Exec para entrar no contêiner com o shell correto

Imagens de base diferentes podem ter camadas diferentes dentro delas, e usar camadas incorretas resulta em um erro. Verifique se você está usando o shell correto de acordo com a imagem do seu aplicativo.

Execute o comando a seguir para usar o ECS Exec para entrar no contêiner. Substitua exemplo_shell pelo seu shell:

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

Gere logs para que o Amazon ECS Exec identifique problemas

Gere registros do SSM Agent para determinar por que o ECS Exec não está funcionando em sua tarefa do Fargate. Execute o comando a seguir na seção de ambiente da definição do contêiner:

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 você estiver usando 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ê estiver usando outros drivers de log ou endpoints de registro, os registros do SSM Agent são transferidos para esses locais.

Exemplo usando JSON:

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

**Observação:**Aplicativos diferentes têm diferentes shells e editores. Certifique-se de revisar e modificar os parâmetros de comando de acordo com seu aplicativo.

Informações relacionadas

Usar o ECS Exec

AWS OFICIAL
AWS OFICIALAtualizada há um ano