Como fazer um acesso SSH no AWS Fargate

Como fazer um acesso SSH no AWS Fargate

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

Se você já possui o AWS CLI instalado e configurado, pode ignorar essa etapa!

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:

Uma vez que isso esteja pronto, podemos seguir para a próxima etapa.

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:

Uma vez que isso esteja pronto, podemos seguir para a próxima etapa

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:

Lembre-se de alterar os valores de region, cluster name, task id e container name para os valores reais que você está usando
💡
Se a imagem do seu container for baseado em debian, 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

Pronto! Você já conseguiu acessar o container do Fargate através do SSH!

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:

Lembre-se de alterar cluster name, service name e region para os valores reais que você está usando
aws 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.

Lembre-se de excluir todos os recursos ao final para não obter cobranças indesejadas e manter sua conta AWS limpa e organizada.
Espero que as informações tenham sido úteis para você.