DEV Community

Cover image for Acessando Containers do Amazon ECS Fargate pelo AWS Cli
Alfredo Castro
Alfredo Castro

Posted on

1 1 1 1 1

Acessando Containers do Amazon ECS Fargate pelo AWS Cli

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".

Image description

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

Image description

Altere para a aba "Tasks".

Image description

Clique no ID da "Task".

Image description

Altere para a aba "Networking".

Image description

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

Image description

Clique em "Add permissions" e em seguida clique em "Create inline policy".

Image description

Altere o "Policy editor" para o modo "JSON".

Image description

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": "*"
        }
    ]
}
Enter fullscreen mode Exit fullscreen mode

Image description

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

Image description

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

Image description

Etapa 02 - Criando uma Access key

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

No menu lateral a esquerda, clique em "Users".

Image description

Clique em "Create user".

Image description

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

Image description

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

Image description

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

Image description

Clique no "User name" que acabamos de criar.

Image description

Clique em "Create access key".

Image description

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".

Image description

Clique em "Create access key".

Image description

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

Image description

Pronto, access key criada com sucesso.

Image description

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
Enter fullscreen mode Exit fullscreen mode

Image description

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
Enter fullscreen mode Exit fullscreen mode

Image description

Configurando o profile no AWS Cli.

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

Enter fullscreen mode Exit fullscreen mode

Image description

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".

Image description

Clique no "Cluster".

Image description

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

Clique na aba "Services".

Image description

Image description

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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

Image description

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.

Image description

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".

Image description

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

Clique na aba "Configuration".

Image description

Desça até o campo "Containers".

Image description

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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".

Image description

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

Image description

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.

Image description

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.

Image description

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

https://alfredocastro.com.br/

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read full post →

Top comments (0)

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more