Introdução
Se você utiliza o AWS Fargate como carga de trabalho para as suas aplicações, mais cedo ou mais tarde sentirá a necessidade de realizar um acesso SSH nos conteiners do Fargate para solucionar algum problema, fazer alguma depuração ou simplesmente testar algumas conexões e verificar alguns arquivos de configuração.
Se você usa o Lightsail Container, infelizmente descobrirá que não é possível fazer um acesso SSH nele, e por um tempo no Fargate também não era, porém agora é possível e vou descrever o passo a passo de como fiz isso.
Então se você está nessa situação e chegou até este artigo, ele é feito para você.
Etapa 1 - Instalar o AWS CLI
O primeiro passo é você instalar e configurar o AWS CLI V2
em sua máquina, se você estiver usando o Linux x86
por exemplo, pode instalar com o comando:
curl "https://awscli.amazonaws.com/awscli-exe-linux-aarch64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
Se houver dúvidas sobre essa instalação e configuração, você pode consultar nosso outro artigo que explica por completo como fazer isso:
Ou ainda pode verificar diretamente na documentação da AWS se estiver usando um Sistema Operacional diferente:
Etapa 2 - Instalar o Session Manager Plugin
Se você estiver usando o Linux x86
por exemplo, execute este comando:
curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/linux_64bit/session-manager-plugin.rpm" -o "session-manager-plugin.rpm"
sudo yum install -y session-manager-plugin.rpm
Se houver dúvidas ou se estiver usando um outro Sistema Operacional, verifique a documentação oficial da AWS:
Etapa 3 - Configure as Permissões
Crie uma Política IAM
1- Acesse o console AWS → IAM → Policies → Create Policy e defina o nome como por exemplo ECSFargateAllowExecuteCommand → insira o código json
em sua política:
{
"Statement": [
{
"Action": [
"ssmmessages:CreateControlChannel",
"ssmmessages:CreateDataChannel",
"ssmmessages:OpenControlChannel",
"ssmmessages:OpenDataChannel"
],
"Effect": "Allow",
"Resource": "*"
}
],
"Version": "2012-10-17"
}
Anexe a Role Adequada
1- Ainda no console AWS → IAM alterne de Policies para Roles e pesquise por ecsTaskExecutionRole → ao final, você deve obter uma tela parecida com:
Etapa 4 - Colete Informações para o Acesso
O comando AWS CLI ecs execute-command
requer 3 parâmetros:
O nome do cluster do ECS
O ID da tarefa do ECS
O nome do container
Então acesse o console AWS → ECS e anote as informações, por exemplo:
Etapa 5 - Faça o Acesso SSH no Container do Fargate
1- Execute o comando:
region
, cluster name
, task id
e container name
para os valores reais que você está usandodebian
, utilize /bin/bash
. Se a imagem do seu container for baseado em alpine
, utilize /bin/sh
aws ecs execute-command \
--region <your-region> \
--cluster <your-ecs-cluster-name> \
--task <your-task-id> \
--container <your-container-name> \
--command "/bin/bash" \
--interactive
Etapa 6 (Opcional) - Bônus
Habilite o Serviço do Fargate para Acesso SSH
Se você estiver tentando acessar por SSH um ID de tarefa que está sendo gerenciada por um serviço do Fargate, poderá receber a seguinte mensagem de 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
Isso acontece porque antes precisamos habilitar o serviço do Fargate para que suas tasks permitam o acesso SSH, então digite o comando:
cluster name
, service name
e region
para os valores reais que você está usandoaws ecs update-service \
--cluster <your-ecs-cluster-name> \
--service <your-ecs-service-name> \
--region <your-region> \
--enable-execute-command \
--force-new-deployment
Após isso é só repetir o mesmo comando da Etapa 5
e realizar o acesso SSH.
Conclusão
Vimos passo a passo como acessar através de SSH uma task do AWS Fargate, isso pode ser muito útil para soluções de problemas, por exemplo você pode querer testar a conexão da task do Fargate com o banco de dados RDS para garantir que não há problemas de conexão:
Ou imagine ainda que o deploy de um aplicativo construído em .Net Core
nos containers do Fargate são realizados através de um pipeline CI/CD, e que o arquivo appsettings.json
possui variáveis de ambiente por questões de segurança e muda os valores de acordo com o ambiente que está sendo implantado como production
, qa
, etc. Então você quer verificar se esses valores foram alterados corretamente:
Por fim, isso pode ser muito útil no seu dia a dia.