Utilizei o Terraform para subir minha infra na AWS. Serviços que utilizei: IAM, VPC, ECR, ECS, Application Load Balancer (ALB) e Target Group.
Criei um dockerfile para Containerizar a API Flask do arquivo comment.py Tive Problemas com as dependências, então fui em busca de uma solução e deu certo.
Utilizei o GitHub Actions no meu CI-CD, no CI ele pega o arquivo dockerfile para criar a imagem docker e em seguida, no CD, ele envia essa imagem para o ECR da aws e então vai pra o container no ECS que já está configurado pelo Terraform.
Configurei o ALB no terraform para acessar a API, containerizada no ECS, via browser. Esse método é escalável e fornece alta disponibilidade para aplicações containerizadas na AWS.
Tive problemas com a task-definition do ECS porque estava faltando uma permissão IAM que não tinha sido posta no código do Terraform. Também tive um pouco de dificuldade inicial em entender o funcionamento da API, visto que nunca tinha estudado API, mas logo consegui entender.
Utilizei os seguintes comando para testar a interação com a API.
- matéria 1
curl -sv host/api/comment/new -X POST -H 'Content-Type: application/json' -d '{"email":"[email protected]","comment":"first post!","content_id":1}'
curl -sv host/api/comment/new -X POST -H 'Content-Type: application/json' -d '{"email":"[email protected]","comment":"ok, now I am gonna say something more useful","content_id":1}'
curl -sv host/api/comment/new -X POST -H 'Content-Type: application/json' -d '{"email":"[email protected]","comment":"I agree","content_id":1}'
- matéria 2
curl -sv host/api/comment/new -X POST -H 'Content-Type: application/json' -d '{"email":"[email protected]","comment":"I guess this is a good thing","content_id":2}'
curl -sv host/api/comment/new -X POST -H 'Content-Type: application/json' -d '{"email":"[email protected]","comment":"Indeed, dear Bob, I believe so as well","content_id":2}'
curl -sv host/api/comment/new -X POST -H 'Content-Type: application/json' -d '{"email":"[email protected]","comment":"Nah, you both are wrong","content_id":2}'
- listagem matéria 1
curl -sv host/api/comment/list/1
- listagem matéria 2
curl -sv host/api/comment/list/2
Por padrão, o ECS oferece monitoramento básico e coleta de métricas para containers que estão rodando uma aplicação. Essas métricas são coletadas e disponibilizadas através do Amazon CloudWatch, o serviço de monitoramento e gerenciamento de logs da AWS. Aqui estão algumas das métricas básicas que o ECS coleta:
-
CPU Utilization: Utilização da CPU pelos containers.
-
Memory Utilization: Utilização de memória pelos containers.
-
Disk I/O: Operações de entrada/saída de disco.
-
Network I/O: Tráfego de rede (dados enviados e recebidos).
Também criei um alarme no CloudWatch, via Terraform, baseado nas métricas coletadas para alertar sobre comportamentos anômalos ou uso excessivo de recursos.