Skip to content

Repository files navigation

DevOps Full Stack AWS

PythonFastAPIDockerTerraformAWSGitHub ActionsPrometheusGrafana

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

CategoriaTecnologiaPropósito
AplicaçãoPython / FastAPIAPI web de alto desempenho
ContainerDockerEmpacotamento da aplicação
IaCTerraformProvisionamento de infraestrutura
NuvemAWSProvedor de nuvem (ECS, ECR, ALB, VPC)
CI/CDGitHub ActionsPipelines automatizados
MonitoramentoCloudWatch / GrafanaObservabilidade 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/leonardodebs/devops-full-stack-aws.git
cd devops-full-stack-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-full-stack-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
├── src/ # Frontend React + Vite
├── 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)
├── 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ávelDescriçãoObrigatório
AWS_REGIONRegião da AWS alvoSim
ENVIRONMENTNome do ambiente (dev/prod)Sim
APP_VERSIONVersão da aplicaçãoNão
AWS_ACCOUNT_IDID da conta AWSSim (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


About

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

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages