Este projeto provisiona uma infraestrutura completa na AWS utilizando Terraform, incluindo:
- VPC com subnets públicas e privadas
- Instância EC2 com Docker
- Banco de dados PostgreSQL (RDS)
- Bucket S3 para armazenamento de logs
- IAM roles e policies para segurança
terraform-aws-infra/
├── main.tf # Configuração principal
├── variables.tf # Definição de variáveis
├── outputs.tf # Outputs do Terraform
├── terraform.tfvars # Valores das variáveis
├── providers.tf # Configuração do provider AWS
├── backend.tf # Configuração do backend
├── modules/ # Módulos Terraform
│ ├── vpc/ # Configuração de rede
│ ├── ec2/ # Instância EC2 com Docker
│ ├── rds/ # Banco de dados PostgreSQL
│ ├── s3/ # Bucket S3 para logs
│ └── iam/ # Roles e policies IAM
└── docs/ # Documentação
└── architecture_diagram.png
- Terraform >= 1.2.0
- AWS CLI configurado com credenciais
- Bucket S3 para armazenamento de estado (opcional)
-
Clone este repositório:
git clone https://github.com/seu-usuario/terraform-aws-infra.git cd terraform-aws-infra -
Personalize as variáveis no arquivo
terraform.tfvarsconforme necessário. -
Inicialize o Terraform:
terraform init
-
Verifique o plano de execução:
terraform plan
-
Aplique a configuração:
terraform apply
-
Após a conclusão, anote os outputs (incluindo o IP público da EC2 e o endpoint do RDS).
-
Acesse a aplicação web pelo navegador:
http://<IP-PUBLICO-EC2> -
Para a aplicação Flask:
http://<IP-PUBLICO-EC2>:5000
- O RDS está em uma subnet privada, acessível apenas pela EC2
- O bucket S3 tem acesso público bloqueado
- Bloqueio de acesso público habilitado
- IAM com permissões mínimas necessárias
Para destruir toda a infraestrutura:
terraform destroy- Este projeto foi criado para fins demonstrativos
- Em ambiente de produção, considere:
- Usar NAT Gateway para permitir acesso à internet da subnet privada
- Configurar backup automático para o RDS
- Implementar monitoramento e alarmes
- Configurar um domínio personalizado com SSL
- Implementar CI/CD para o deployment da aplicação
