Este projeto implementa uma infraestrutura completa e escalável para WordPress na AWS, seguindo as melhores práticas de:
- 🔒 Segurança - Grupos de segurança em camadas
- 📈 Escalabilidade - Auto Scaling automático
- 🏗️ Alta Disponibilidade - Multi-AZ deployment
- 🐳 Containerização - WordPress em Docker
┌─────────────────────────────────────────────────────────┐
│ Internet Gateway │
└─────────────────────────┬───────────────────────────────┘
│
┌─────────────────────────┴───────────────────────────────┐
│ Application Load Balancer │
│ (Public Subnets - Multi-AZ) │
└─────────────────────────┬───────────────────────────────┘
│
┌─────────────────────────┴───────────────────────────────┐
│ Auto Scaling Group (EC2) │
│ WordPress Containers + EFS Mount │
│ (Private Subnets - Multi-AZ) │
└─────────────────────────┬───────────────────────────────┘
│
┌───────────────┴────────────────┐
│ │
┌─────────▼─────────┐ ┌───────▼────────┐
│ RDS MySQL │ │ EFS │
│ (Private Subnets) │ │ (Regional HA) │
└───────────────────┘ └────────────────┘
Criação da infraestrutura de rede base:
| Componente | Configuração |
|---|---|
| VPC | WordPress-VPC - CIDR: 10.0.0.0/16 |
| Availability Zones | us-east-1a e us-east-1b |
| Subnets | 4 total (2 públicas + 2 privadas) |
| Internet Gateway | Acesso público para ALB |
| NAT Gateways | 2 unidades (uma por AZ) |
| Route Tables | Configuradas automaticamente |
Implementação de arquitetura de segurança em camadas:
| Security Group | Função | Porta | Origem |
|---|---|---|---|
alb-sg-wordpress |
Load Balancer | 80, 443 | 0.0.0.0/0 |
ec2-sg-wordpress |
Instâncias EC2 | 80 | alb-sg-wordpress |
rds-sg-wordpress |
Banco de dados | 3306 | ec2-sg-wordpress |
efs-sg-wordpress |
Sistema de arquivos | 2049 | ec2-sg-wordpress |
🛡️ Princípio do Menor Privilégio: Cada camada só aceita tráfego da camada anterior
Sistema de arquivos compartilhado para WordPress:
- Nome:
wordpress-efs - Tipo: Regional (Multi-AZ)
- Mount Targets: Subnets privadas
- Proteção:
efs-sg-wordpress
Instância MySQL isolada e segura:
- Nome:
wordpress-db - Engine: MySQL
db.t3.micro - Localização: Subnets privadas
- Subnet Group: Configurado automaticamente
- Acesso Público: ❌ Desabilitado
- Banco Inicial:
wordpress
Launch Template com automação Docker:
- Nome:
wordpress-docker-lt - SO: Ubuntu 22.04 LTS
- Automação: Script user-data completo
🔽 Clique para expandir o script user-data
#!/bin/bash
set -e
# Atualiza a lista de pacotes e instala pré-requisitos
apt-get update -y
apt-get install -y apt-transport-https ca-certificates curl software-properties-common nfs-common
# Instala o Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update -y
apt-get install -y docker-ce docker-ce-cli containerd.io
# Inicia e habilita o serviço do Docker
systemctl start docker
systemctl enable docker
# Adiciona o usuário ubuntu ao grupo docker
usermod -a -G docker ubuntu
# Instala o Docker Compose
DOCKER_COMPOSE_VERSION="v2.20.2"
curl -L "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
# Monta o sistema de arquivos EFS
EFS_ID="<SEU_EFS_ID>"
EFS_REGION="us-east-1"
EFS_MOUNT_POINT="/mnt/efs/wordpress"
mkdir -p ${EFS_MOUNT_POINT}
mount -t nfs -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport ${EFS_ID}.efs.${EFS_REGION}.amazonaws.com:/ ${EFS_MOUNT_POINT}
echo "${EFS_ID}.efs.${EFS_REGION}.amazonaws.com:/ ${EFS_MOUNT_POINT} nfs4 defaults,_netdev 0 0" >> /etc/fstab
# Cria o arquivo docker-compose.yml
cat <<EOF > /home/ubuntu/docker-compose.yml
version: '3.8'
services:
wordpress:
image: wordpress:latest
container_name: wordpress
restart: always
ports:
- "80:80"
environment:
WORDPRESS_DB_HOST: "<SEU_ENDPOINT_RDS>:3306"
WORDPRESS_DB_USER: "<SEU_USUARIO_RDS>"
WORDPRESS_DB_PASSWORD: "<SUA_SENHA_RDS>"
WORDPRESS_DB_NAME: "<SEU_NOME_DO_BANCO>"
volumes:
- ${EFS_MOUNT_POINT}:/var/www/html
EOF
# Concede permissões ao usuário ubuntu
chown -R ubuntu:ubuntu ${EFS_MOUNT_POINT}
chown ubuntu:ubuntu /home/ubuntu/docker-compose.yml
# Executa o Docker Compose
/usr/local/bin/docker-compose -f /home/ubuntu/docker-compose.yml up -dComponentes para alta disponibilidade:
| Componente | Configuração | Função |
|---|---|---|
| Target Group | wordpress-tg |
Agrupa instâncias EC2 |
| Application Load Balancer | wordpress-alb |
Distribui tráfego (subnets públicas) |
| Auto Scaling Group | wordpress-asg |
Gerencia e escala instâncias |
Configuração ASG:
- 📊 Capacidade Desejada: 2 instâncias
- 📈 Política de Escalonamento: Baseada em CPU
- 🌍 Distribuição: Multi-AZ (subnets privadas)
✅ Infraestrutura provisionada
✅ Ambiente testado e validado
✅ WordPress online via ALB
✅ Auto Scaling configurado
✅ Alta disponibilidade Multi-AZ
| Recurso | Ação Recomendada | Impacto no Custo |
|---|---|---|
| Auto Scaling Group | Definir Min/Desired/Max = 0 |
🔴 Alto - Encerra EC2 |
| Application Load Balancer | Deletar | 🟡 Médio - Cobrança por hora |
| RDS Instance | Parar (Stop) | 🟡 Médio - Reduz compute |
| NAT Gateways | Deletar | 🟡 Médio - Cobrança por hora/tráfego |
| Elastic IPs | Liberar (Release) | 🟢 Baixo - IPs não utilizados |
⚠️ Importante: Alguns recursos (EFS, VPC, Security Groups) têm custo zero ou muito baixo quando não utilizados.
- CPU Utilization (EC2/RDS)
- Network I/O (ALB/EC2)
- Database Connections (RDS)
- EFS Throughput
- Auto Scaling baseado em CPU
- Health Checks do Target Group
- RDS Connection Monitoring
🔽 Problemas Comuns e Soluções
- Verificar Health Check do Target Group
- Conferir logs do Docker:
docker logs wordpress - Validar conectividade RDS
- Verificar Security Groups NFS (porta 2049)
- Confirmar EFS Mount Targets nas AZs corretas
- Testar conectividade:
ping <efs-id>.efs.us-east-1.amazonaws.com
- Verificar métricas CloudWatch
- Conferir políticas de escalonamento
- Validar Launch Template
/home/ubuntu/
├── docker-compose.yml # Configuração do WordPress
└── /mnt/efs/wordpress/ # Arquivos WordPress (EFS)
# Verificar status do container
docker ps
# Ver logs do WordPress
docker logs wordpress
# Reiniciar aplicação
docker-compose down && docker-compose up -d
# Verificar montagem EFS
df -h | grep efs


