Ir para o conteúdo principal

Acessando Containers do Amazon ECS Fargate pelo AWS Cli

·1166 palavras·6 minutos
aws ecs fargate role iam aws cli container
Alfredo Castro
Autor
Alfredo Castro
AWS Solutions Architect | AWS x3 | LPI x2 | CompTIA Linux+
A utilização de containers, especialmente no ambiente da nuvem, revolucionou a maneira como desenvolvemos, implantamos e escalamos aplicações. No ambiente AWS, o AWS Fargate proporciona um mecanismo de computação sem servidor para execução de containers, permitindo maior agilidade e eficiência. Contudo, mesmo em ambientes altamente automatizados, a necessidade de debugar e realizar troubleshooting pode surgir, e é aí que o AWS Exec se torna uma ferramenta crucial.

O AWS Exec é uma ferramenta poderosa que simplifica o processo de acesso a containeres em execução no AWS Fargate. Essa funcionalidade proporciona aos desenvolvedores a capacidade de interagir diretamente com os containeres, permitindo diagnósticos mais precisos e a resolução eficiente de problemas.

Existem diversas razões pelas quais o AWS Exec se destaca na importância do processo de debug e troubleshooting em ambientes AWS Fargate. Uma delas é a capacidade de se conectar diretamente aos containeres em execução, possibilitando a execução de comandos interativos. Isso significa que os desenvolvedores podem inspecionar o estado interno do container, analisar logs em tempo real e até mesmo realizar alterações na configuração para testes pontuais.

Pré-requisito: #

Um Cluster ECS com uma task em execução.

Etapa 01 - Configurando a permissão necessária na Task Role do Cluster ECS #

Para acessarmos o Container, precisamos adicionar uma policy com permissão de SSM.

Acesse a console AWS e procure pelo serviço “Elastic Cotainer Service”.

No menu lateral a esquerda, clique em “Clusters”.

IMAGEM 01

Clique no “Cluster” onde possui o container que você quer acessar.

IMAGEM 02

Altere para a aba “Tasks”.

IMAGEM 03

Clique no ID da “Task”.

IMAGEM 04

Altere para a aba “Networking”.

IMAGEM 05

Clique no nome da “Task role”, você será redirecionado para o “IAM” onde poderá editar a Role.

IMAGEM 06

Clique em “Add permissions” e em seguida clique em “Create inline policy”.

IMAGEM 07

Altere o “Policy editor” para o modo “JSON”.

IMAGEM 08

Adicione o seguinte JSON e clique em “Next”.

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

IMAGEM 09

Defina um nome para a Policy e clique em “Create policy”.

IMAGEM 10

Pronto, permissões necessárias adicionadas ao “Task role” do nosso cluster.

IMAGEM 11

Etapa 02 - Criando uma Access key #

Acesse a console AWS e procure pelo serviço “IAM”.

No menu lateral a esquerda, clique em “Users”.

IMAGEM 01

Clique em “Create user”.

IMAGEM 02

Defina um nome para o “User name” e clique em “Next”.

IMAGEM 03

Marque a opção “Attach policies directly”, pesquise pela policy “AmazonECS_FullAccess” (policy gerenciada pela AWS) e selecione ela, em seguida clique em “Next”.

IMAGEM 04

Revise as informações e clique em “Create user”.

IMAGEM 05

Clique no “User name” que acabamos de criar.

IMAGEM 06

Clique em “Create access key”.

IMAGEM 07

Selecione “Command Line Interface (CLI)”, marque a opção “I understand the above recommendation and want to proceed to create an access key.”, em seguida clique em “Next”.

IMAGEM 08

Clique em “Create access key”.

IMAGEM 09

Anote a “Access key” e a “Secret access key” gerada, em seguida clique em “Done”.

IMAGEM 10

Pronto, access key criada com sucesso.

IMAGEM 11

Etapa 03 - Instalando e configurando o AWS Cli e o SSM Plugin #

Na máquina que você irá utilizar para acessar o container, execute os seguintes comandos para realizar a instalação do AWS Cli e do SSM Plugin. Em seguida realize a configuração de um profile com a “Access key” e a “Secret access key” que geramos anteriormente.

Para ambiente Ubuntu Server (22.04):

Instalando o AWS Cli.

cd /tmp
apt-get update
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --version

IMAGEM 01

Instalando o SSM Plugin.

curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/ubuntu_64bit/session-manager-plugin.deb" -o "session-manager-plugin.deb"
sudo dpkg -i session-manager-plugin.deb
session-manager-plugin

IMAGEM 02

Configurando o profile no AWS Cli.

aws configure --profile Site-Alfredo
AKIAR3YIWCET6PRJOIMI
GNL5NDMFKMqsA5umnIPBLiPLODchQl5wjhnYFDex
us-east-1

IMAGEM 03

Pronto, instalamos o AWS Cli e o SSM Plugin e configuramos um profile com a Access key gerada na etapa anterior.

Etapa 04 - Habilitando o ECS Exec e acessando o container #

Acesse a console AWS e procure pelo serviço “Elastic Container Service”.

No menu lateral a esquerda, clique em “Clusters”.

IMAGEM 01

Clique no “Cluster”.

IMAGEM 02

Obs: Anote o “Cluster name” iremos utilizar para o próximo comando. Nesse exemplo o nome é “cluster-site-alfredo”.

Clique na aba “Services”.

IMAGEM 03
IMAGEM 04

Obs: Anote o “Service name” e a “Task definition” iremos utilizar para o próximo comando. Nesse exemplo o nome do service é “service-site-alfredo” e a task definition é “task-site-alfredo:3”.

Com as seguintes informações anotadas:

  • Cluster Name: cluster-site-alfredo
  • Service Name: service-site-alfredo
  • Task Definition: task-site-alfredo:3

Execute o comando abaixo.

aws ecs update-service \
  --cluster ECS_CLUSTER_NAME  \
  --service ECS_SERVICE_NAME \
  --task-definition ECS_TASK-DEFINITION_NAME \
  --force-new-deployment \
  --enable-execute-command \
  --profile CLI_PROFILE

Exemplo:

aws ecs update-service \
  --cluster cluster-site-alfredo  \
  --service service-site-alfredo \
  --task-definition task-site-alfredo:3 \
  --force-new-deployment \
  --enable-execute-command \
  --profile Site-Alfredo

Obs: Lembre-se de adicionar o –profile com o nome do profile que você configurou em seu AWS Cli.

IMAGEM 05

Altere para a aba de “Tasks”, no exemplo abaixo podemos ver que o ECS está com duas “Tasks”. Aguarde por alguns minutos, o ECS irá provisionar a “Task” com o AWS Exec habilitado.

IMAGEM 06

Após aguardar por alguns minutos, acesse novamente a aba de “Tasks”, no exemplo abaixo podemos ver que o ECS agora possui apenas uma “Task”. Clique na “Task ID”.

IMAGEM 07

Obs: Anote o “Task ID” iremos utilizar para o próximo comando. Nesse exemplo o ID da task é “3e63a718518c485fb64a749a3cc2a5ce”.

Clique na aba “Configuration”.

IMAGEM 08

Desça até o campo “Containers”.

IMAGEM 09

Obs: Anote o “Container name” iremos utilizar para o próximo comando. Nesse exemplo o nome do container é container-site-alfredo".

Com as seguintes informações anotadas:

  • Cluster Name: cluster-site-alfredo
  • Service Name: service-site-alfredo
  • Task Definition: task-site-alfredo:3
  • Task ID: 3e63a718518c485fb64a749a3cc2a5ce
  • Container Name: container-site-alfredo

Execute o comando abaixo.

aws ecs execute-command \
  --region us-east-1 \
  --cluster ECS_CLUSTER_NAME \
  --task ECS_TASK_ID \
  --container CONTAINER_NAME \
  --command "/bin/sh" \
  --interactive \
  --profile CLI_PROFILE

Exemplo:

aws ecs execute-command \
  --region us-east-1 \
  --cluster cluster-site-alfredo \
  --task 3e63a718518c485fb64a749a3cc2a5ce \
  --container container-site-alfredo \
  --command "/bin/sh" \
  --interactive \
  --profile Site-Alfredo

Obs: Lembre-se de adicionar o –profile com o nome do profile que você configurou em seu AWS Cli e da região onde está o seu ECS, no nosso exemplo estamos utilizando N. Virginia “us-east-1”.

IMAGEM 10

Pronto, se tudo ocorrer conforme o esperado você terá como retorno o shell do container Fargate e poderá executar comandos dentro do container.

IMAGEM 11

Extra - Troubleshooting #

Ao tentarmos acessar o container apresenta o seguinte erro “ERROR: Unable to start command: Failed to start pty: fork/exec /bin/bash: no such file or directory”.

O erro ocorre pois não foi possível encontrar o executável /bin/bash, altere o shell no exemplo que utilizamos usamos o shell /bin/sh.

IMAGEM 01

Ao tentarmos acessar o container apresenta o seguinte erro “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.”.

O erro ocorre porque não está habilitado o AWS Exec na “Task”, execute os procedimentos da Etapa 04, caso já tenha executado pode ser que o ECS ainda não atualizou a “Task”, aguarde alguns minutos até que ele atualize.

IMAGEM 02

Espero tê-lo ajudado! Se houver alguma dúvida, não hesite em entrar em contato.