Skip to content

Latest commit

 

History

History
227 lines (170 loc) · 8.2 KB

File metadata and controls

227 lines (170 loc) · 8.2 KB

DevOps Full Stack AWS

Python FastAPI Docker Terraform AWS GitHub Actions Prometheus Grafana

Um projeto DevOps pronto para produção que demonstra Infraestrutura como Código, containerização, pipelines CI/CD e observabilidade em nuvem na AWS.

Sumário

  1. Visão Geral
  2. Arquitetura
  3. Pilha de Tecnologias
  4. Pré-requisitos
  5. Como Começar
  6. Estrutura do Projeto
  7. Pipeline CI/CD
  8. Infraestrutura
  9. Monitoramento
  10. Variáveis de Ambiente
  11. Contribuindo
  12. Licença

Visão Geral

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

Arquitetura

Diagrama de Arquitetura

Arquitetura AWS Full Stack

Componentes da Arquitetura

  1. 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
  2. Containerização

    • Docker para empacotamento consistente da aplicação
    • docker-compose para orquestração local de serviços
  3. 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
  4. Monitoramento

    • AWS CloudWatch: Insights de containers e logs
    • Stack Local: Prometheus e Grafana para desenvolvimento e testes

Pilha de Tecnologias

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

Pré-requisitos

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

Como Começar

1. Clone o Repositório

git clone https://github.com/seuusuario/devops-fullstack-aws.git
cd devops-fullstack-aws

2. Configure o Ambiente

cp .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.0

3. Deploy da Infraestrutura

make 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 Terraform

4. Executar Localmente (Desenvolvimento)

make 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)

5. Testes

make test           # Executa testes unitários com cobertura
make lint           # Executa verificações de qualidade de código

Estrutura do Projeto

devops-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

Pipeline CI/CD

O projeto utiliza GitHub Actions com três workflows:

1. Workflow de Pull Request (01-lint-test.yml)

  • Disparado em pull requests
  • Executa: linting, testes unitários, validação do Terraform

2. Workflow de Build/Push (02-build-push.yml)

  • Disparado ao fazer merge para a branch main
  • Executa: build da Docker image, push para o ECR

3. Workflow de Deploy (03-deploy.yml)

  • Disparado após o workflow de build/push
  • Executa: atualização do serviço ECS com a nova imagem

Infraestrutura

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

Monitoramento

AWS (Produção)

  • 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

Local (Desenvolvimento)

  • Prometheus: Coleta e armazenamento de métricas
  • Grafana: Visualização de dashboards
  • docker-compose.yml: Orquestração local dos serviços de monitoramento

Variáveis de Ambiente

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.

Contribuindo

  1. Crie uma branch para sua feature: git checkout -b feature/nome-da-feature
  2. Certifique-se de que os testes passam: make test
  3. Submit um Pull Request para a branch main
  4. Siga o estilo de código existente (verificado pelo make lint)

Licença

Este projeto está licenciado sob a licença MIT

Recursos Adicionais