Introdução
Este artigo tem como objetivo ensinar como é possível levantar uma imagem Docker de uma Web API em ASP.NET para AWS ECS utilizando o GitLab Container Registry e o AWS Academy.
Antes de Começarmos
Para poder utilizar o ECS da AWS, antes deve-se ter um registro de uma imagem Docker do seu projeto. Nesse caso, será utilizado como exemplo um registro no repositório do GitLab, mas também é possível utilizar outros registros como o do próprio Docker (DockerHub) ou o registro do ECR da AWS. Além disso, deve-se ter um cadastro na plataforma da AWS para uso das ferramentas. No caso deste artigo, será utilizado uma conta de estudante com acesso limitado a alguns módulos. Outro ponto a se considerar é a conexão da API com o banco de dados. No exemplo fornecido, a API está conectada a um banco levantado no próprio AWS por RDS, por meio de uma string de conexão no próprio código fonte.
O Que é o ECS?
De acordo com a documentação oficial da Amazon, o ECS é um serviço totalmente gerenciado de orquestração de contêineres que ajuda a implantar, gerenciar e dimensionar facilmente aplicações conteinerizadas. Sendo assim, esse serviço se encaixa perfeitamente para as necessidades desse artigo.
Salvando a imagem Docker em um Registry
Para esse exemplo será utilizado o Container Registry do GitLab para salvar e disponibilizar a imagem do Docker contendo o projeto.
Crie um repositório com o projeto que deseja dockerizar no GitLab.
Ao criar o repositório, vá até Deploy -> Container Registry na barra lateral.
- Utilize os comandos mostrados na tela principal para realizar a publicação da imagem do Docker:
docker login registry.gitlab.com
docker build -t [url do registro do projeto] .
docker push [url do registro do projeto]
Os comandos de build podem variar contendo outras tags dependendo do projeto, então é importante prestar atenção a esses cuidados.
Levantando o ECS em AWS
Iniciando o Lab
Para começar o levantamento do ECS, primeiro deve-se acessar o AWS Lab para ter acesso aos serviços.
Clique em Start Lab, assim que o símbolo de AWS ficar verde clique nele.
Criando o ECS
Após isso, na aba de pesquisa coloca-se ECS para encontrar o serviço.
Clicando um ECS a seguinte tela deve aparecer.
Crie um cluster para o serviço seguindo os passos, nesse caso será criado um cluster AWS Fargate (Sem servidor):
- Insira um nome para o cluster
- Selecione AWS Fargate
Criando tarefas para rodar no Cluster
- Acesse Definições da tarefa na barra lateral.
Clique em Criar nova definição de tarefa.
Defina um nome para a tarefa.
- Configure os requisitos de infraestrutura, nesse caso será mantido o AWS Fargate no tipo de inicialização, o sistema operacional deve ser o sistema no qual o seu Docker irá rodar, o tamanho da tarefa deve ser definido a partir dos requisitos da sua Web API (Para APIs com muita computação é aconselhável alterar os valores).
Em funções da tarefa é interessante que em Função de execução de tarefas seja selecionado um perfil com as permissões necessárias para as ações da API, ou no caso de contas de estudante (como a utilizada), seja selecionada uma opção permitida. Nesse caso, será utilizado o perfil LabRole.
- Agora será o momento de configurar o container para que rode no cluster.
- Comece colocando um nome para o contêiner, o link para a imagem do Docker no repositório, mantenha a opção de Contêiner Essencial como Sim, caso as imagens do repositório sejam privadas é necessário a configuração de um Secrets Manager no AWS para autenticação e acesso a imagem no repositório.
Caso não saiba, para conseguir o link para a imagem no repositório você deve ir em Deploy -> Container Registry após ter publicado a imagem e clicar no botão de copiar ao lado do nome da imagem.
- Em mapeamento de porta coloque a porta em que a API estará respondendo, no exemplo será a porta 8080. Caso queira o protocolo da aplicação pode ser alterado também (por exemplo HTTP2 para HTTPS).
No caso do exemplo o resto das opções podem ser mantidas como padrão.
Inserindo a tarefa no Cluster
- Acesse o Cluster e clique em Criar na aba de Tarefa.
- Em Ambiente selecione a opção Tipo de Inicialização e mantenha em Fargate.
- Em Configuração de Implantação selecione Serviço. No caso da Web API, selecione a família da tarefa criada para o cluster, atribua um nome, mantenha o tipo de serviço no padrão e coloque quantas tarefas irão ser inicializadas.
Após isso, para esse exemplo pode-se manter o resto em padrão e clicar em Criar.
Acessar a API Web por IP Público
Depois de criado o serviço no cluster basta acessar o cluster e na aba services selecionar o serviço criado.
Na tela do serviço clique em Tarefas e clique na Tarefa do serviço.
Ao clicar na tarefa, na aba de Configuração será possível ver uma aba com o IP Público, por meio desse IP será possível acessar a API externamente.
Lembre-se de colocar a porta que deve ser acessada, assim como os caminhos próprios da API na URL para verificar funcionalidade.
Conclusão
Dessa forma, por meio desse artigo temos ao fim uma ASP.NET Web API Dockerizada rodando em ECS AWS. Essa publicação teve em mente detalhar e exemplificar melhor o processo de criação desse serviço utilizando imagens dos módulos. Por fim, é importante incentivar a leitura da documentação oficial do AWS assim como a busca por outros fóruns capazes de sanar dúvidas e questões relacionadas a passos específicos não elaborados suficientemente aqui.
Top comments (1)
muito bom 👏👏👏