Um projeto DevOps pronto para produção que demonstra Infraestrutura como Código, containerização, pipelines CI/CD e observabilidade em nuvem na AWS.
- Visão Geral
- Arquitetura
- Pilha de Tecnologias
- Pré-requisitos
- Como Começar
- Estrutura do Projeto
- Pipeline CI/CD
- Infraestrutura
- Monitoramento
- Variáveis de Ambiente
- Contribuindo
- Licença
Este projeto demonstra as melhores práticas de DevOps modernas usando a AWS como provedor de nuvem. Ele inclui:
- Aplicação: API RESTful construída com Python e FastAPI
- Containerização: Empacotamento da aplicação usando Docker
- Infraestrutura como Código: Provisionamento de recursos AWS usando Terraform
- CI/CD: Pipelines automatizados usando GitHub Actions
- Monitoramento e Observabilidade: CloudWatch da AWS e stack local Prometheus/Grafana
-
Camada de Aplicação
- API RESTful com endpoints para verificação de saúde e informações do sistema
- Construída com Python/FastAPI para alto desempenho
-
Containerização
- Docker para empacotamento consistente da aplicação
- docker-compose para orquestração local de serviços
-
Infraestrutura AWS (via Terraform)
- VPC: Rede isolada com subnets públicas e privadas em 2 Zonas de Disponibilidade
- Application Load Balancer (ALB): Distribui tráfego para tarefas ECS
- Amazon ECS Fargate: Orquestração de containers sem servidor
- Amazon ECR: Registro privado de Docker com políticas de lifecycle
- NAT Gateway: Permite que tarefas privadas acessem a internet para atualizações
- IAM: Funções com privilégios mínimos para execução de tarefas
-
Monitoramento
- AWS CloudWatch: Insights de containers e logs
- Stack Local: Prometheus e Grafana para desenvolvimento e testes
| Categoria | Tecnologia | Propósito |
|---|---|---|
| Aplicação | Python / FastAPI | API web de alto desempenho |
| Container | Docker | Empacotamento da aplicação |
| IaC | Terraform | Provisionamento de infraestrutura |
| Nuvem | AWS | Provedor de nuvem (ECS, ECR, ALB, VPC) |
| CI/CD | GitHub Actions | Pipelines automatizados |
| Monitoramento | CloudWatch / Grafana | Observabilidade e logging |
Antes de começar, certifique-se de ter instalado:
- AWS CLI v2
- Terraform v1.7+
- Docker & Docker Compose
- Python 3.11
- Conta no GitHub
- Conta na AWS com permissões adequadas
git clone https://github.com/seuusuario/devops-fullstack-aws.git
cd devops-fullstack-awscp .env.example .env
# Edite o arquivo .env com seus detalhes da AWS:
# AWS_REGION=sua-região
# AWS_ACCOUNT_ID=sua-conta-id
# ENVIRONMENT=dev
# APP_VERSION=1.0.0make setup # Torna os scripts executáveis e executa o setup
make tf-init # Inicializa o Terraform no ambiente dev
make tf-apply # Aplica a configuração do Terraformmake run # Inicia os serviços do docker-compose
# Acesse:
# - API: http://localhost:8000
# - Prometheus: http://localhost:9090
# - Grafana: http://localhost:3001 (usuário: admin, senha: admin)make test # Executa testes unitários com cobertura
make lint # Executa verificações de qualidade de códigodevops-fullstack-aws/
├── .github/workflows/ # Pipelines CI/CD (3 arquivos YAML)
├── app/ # Código da aplicação FastAPI
│ ├── main.py # Endpoints da API
│ ├── requirements.txt # Dependências Python
│ └── tests/ # Testes unitários
├── docker/ # Configurações do Docker
│ ├── docker-compose.yml
│ ├── prometheus.yml
│ └── Dockerfile
├── terraform/ # Infraestrutura como Código
│ ├── modules/ # Módulos Terraform reutilizáveis
│ └── environments/ # Configurações específicas de ambiente (dev)
├── monitoring/ # Dashboards e configurações de monitoramento
├── scripts/ # Scripts utilitários (setup, destroy)
├── docs/ # Documentação de arquitetura e runbooks
├── .env.example # Template de variáveis de ambiente
├── Makefile # Comandos de conveniência
└── README.md # Documentação do projeto
O projeto utiliza GitHub Actions com três workflows:
- Disparado em pull requests
- Executa: linting, testes unitários, validação do Terraform
- Disparado ao fazer merge para a branch
main - Executa: build da Docker image, push para o ECR
- Disparado após o workflow de build/push
- Executa: atualização do serviço ECS com a nova imagem
A infraestrutura é modularizada para reutilização:
- Networking: VPC, Subnets, NAT Gateway
- ECR: Registro privado com políticas de lifecycle
- ALB: Load balancer público voltado para a internet
- ECS: Cluster e serviço Fargate com auto-scaling
- IAM: Funções e políticas com privilégios mínimos
- CloudWatch Container Insights: Métricas de desempenho de containers
- CloudWatch Logs: Centralização de logs da aplicação
- Alarmes: Configuráveis para métricas críticas
- Prometheus: Coleta e armazenamento de métricas
- Grafana: Visualização de dashboards
- docker-compose.yml: Orquestração local dos serviços de monitoramento
| Variável | Descrição | Obrigatório |
|---|---|---|
| AWS_REGION | Região da AWS alvo | Sim |
| ENVIRONMENT | Nome do ambiente (dev/prod) | Sim |
| APP_VERSION | Versão da aplicação | Não |
| AWS_ACCOUNT_ID | ID da conta AWS | Sim (para ECR) |
Importante: Credenciais da AWS (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) devem ser configuradas como secrets no GitHub Actions ou variáveis de ambiente locais, nunca commitadas no repositório.
- Crie uma branch para sua feature:
git checkout -b feature/nome-da-feature - Certifique-se de que os testes passam:
make test - Submit um Pull Request para a branch
main - Siga o estilo de código existente (verificado pelo
make lint)
Este projeto está licenciado sob a licença MIT
- Documentação de Arquitetura - Detalhes técnicos da arquitetura
- Runbook - Procedimentos operacionais e troubleshooting
- Exemplos de Variáveis de Ambiente - Template para configuração
