Este projeto é um sistema simples de cadastro, desenvolvido com Node.js e Docker. A infraestrutura é provisionada automaticamente na AWS usando Terraform e o processo de deploy é gerenciado com GitHub Actions para implementar pipelines de CI/CD.
- Visão Geral
- Tecnologias Usadas
- Estrutura da Infraestrutura
- Configuração do Terraform
- Pipeline CI/CD com GitHub Actions
- Como Rodar Localmente
- Como Realizar o Deploy na AWS
- Acessando o Swagger
- Considerações Finais
A ideia deste projeto é fornecer uma infraestrutura automatizada para subir um sistema de cadastro na nuvem, utilizando AWS EC2 para hospedar o sistema e EKS (Elastic Kubernetes Service) para gerenciar os containers, onde o sistema está configurado via Docker. O código é versionado e armazenado no GitHub, e o deploy é realizado automaticamente sempre que há alterações na branch main através de GitHub Actions.
- Provisão automática de infraestrutura na AWS utilizando Terraform.
- Automação de deploy usando pipeline CI/CD com GitHub Actions.
- Utilização de ECR para armazenar imagens Docker e EKS para gerenciar containers.
- Hospedagem do banco de dados MySQL em container na EC2.
Esse Projeto está licenciado sob a Licença MIT. Veja o arquivo LICENSE para mais detalhes.
Antes de começar, certifique-se de ter os seguintes itens instalados/localmente:
- Terraform
- AWS CLI
- Docker
- GitHub CLI ou autenticação configurada via SSH/Token
- Terraform: Provisionamento de infraestrutura como código.
- AWS (Amazon Web Services):
- EC2: Instância para rodar o sistema com Docker.
- ECR: Armazenamento das imagens Docker.
- EKS: Gerenciamento de containers com Kubernetes.
- IAM: Controle de permissões.
- Docker: Containerização da aplicação e banco de dados.
- MySQL: Banco de dados utilizado.
- GitHub Actions: Automação de deploy com CI/CD.
A infraestrutura na AWS é composta por:
- VPC: Rede privada que contém sub-redes para a EC2 e EKS.
- EC2: Instância para rodar a aplicação e o banco de dados MySQL dentro de containers Docker.
- EKS: Cluster Kubernetes para orquestração dos containers e deploy contínuo de novas versões da aplicação.
- ECR: Repositório Docker que armazena as imagens da aplicação.
- IAM Roles: Controlam as permissões necessárias para que o EKS e EC2 acessem o ECR e outros serviços.
AWS Infra:
VPC -> Contém Sub-redes, EC2 (Docker + MySQL), e EKS.
EKS -> Gerencia os contêineres e usa imagens do ECR.
IAM Roles -> Controlam permissões de acesso.
ECR -> Armazena as imagens Docker.
O Terraform é utilizado para automatizar a criação da infraestrutura na AWS. As principais configurações incluem:
- VPC : Rede privada para os recursos. Subnets: Duas sub-redes para suportar o EC2 e o EKS.
- EC2: Instância criada com Docker e banco MySQL rodando em container.
- ECR: Repositório Docker para armazenar as imagens da aplicação.
- EKS: Cluster para orquestração de containers.
Lembando que precisa estar dentro da pasta do terraform nesse caso o main.tf (terraform/ec2)
Inicialize o Terraform:
terraform initCrie o plano de execução:
terraform planAplique a infraestrutura:
terraform apply -auto-approvePipeline CI/CD com GitHub Actions
- O GitHub Actions é configurado para executar pipelines de CI/CD. Toda vez que o código é alterado na branch main, o Terraform é executado para provisionar ou atualizar a infraestrutura.
Estrutura do Pipeline
- Verificação de código: O pipeline verifica o repositório e configura o Terraform.
- Terraform Apply: Provisiona a infraestrutura na AWS.
- Deploy: Executa o Docker na EC2, configurando o MySQL e a aplicação.
- O pipeline está definido no arquivo .github/workflows/terraform.yml
Certifique-se que o Terraform esteja configurado corretamente.
Execute o pipeline CI/CD com GitHub Actions, ou manualmente via:
terraform apply -auto-approveA aplicação será provisionada na instância EC2 e o container Docker será iniciado com a aplicação rodando.
Acessando o Swagger Após o deploy, a aplicação pode ser acessada via o endereço público da instância EC2, que estará rodando o Swagger da API. Você pode acessá-lo com:
http://<public-ip-da-ec2>/swaggerRepositório GitHub: CadastroDevOps