Neste projeto foi desenvolvido um ambiente escalável na AWS para hospedar um site WordPress, baseado na imagem Docker WordPress, utilizando o Amazon RDS, Auto Scaling Group (ASG), Classic Load Balancer (CLB), Amazon RDS, Amazon EFS e monitoramento com CloudWatch.
- Ferramentas AWS (Amazon EC2, Amazon RDS, Auto Scaling Group (ASG), Classic Load Balancer (CLB) e CloudWatch)
- Docker e Docker Compose
- Git e Github
- Uma conta na AWS com permissões de administrador
- Conhecimento básico em versionamento git
- Realize o cadastro na Amazon AWS; entre no Console de gerenciamento da AWS
- Selecione a região de United States - N. Virginia, que foi escolhida para o projeto.
- Clique na barra de pesquisa e digite ‘VPC’
- Na seção de Virtual private cloud, selecione Your VPCs. Logo em seguida, clique em Create VPC.
Será necessário criar SG’s para cada ferramenta, para que possa ser possível a conexão entre elas.
-
Clique na barra de pesquisa e digite EC2
-
Em seguida, vá para Security Groups na seção Network & Security e crie 4 Security Groups**:** um para a instância EC2, um para o RDS, um para o CLB e outro para EFS.
-
sg-ec2; sg-rds; sg-clb; sg-efs
-
Aplique as Inbound e Outbound rules de acordo com o quadro abaixo
🏷️ Insira tags “Name” para facilitar na busca entre SG’s
Ferramenta Nome SG Inbound rules Outbound rules EC2 SG EC2 HTTP ( sg-lb
)HTTP ( sg-clb
); MYSQL/Aurora (sg-rds
); NFS (sg-efs
); All trafic (0.0.0.0/0
)Aurora and RDS (Mysql) SG RDS MYSQL/Aurora ( sg-ec2
)MYSQL/Aurora ( sg-ec2
)CLB SG CLB HTTP (Anywhere IPv4) ( 0.0.0.0/0
)HTTP ( sg-ec2
)EFS SG EFS NFS ( sg-ec2
)NFS ( sg-ec2
) -
- Clique na barra de pesquisa e digite ‘RDS’
- Em seguida, vá para Databases e clique em Create database
- Segue abaixo o passo a passo para a criação do banco de dados:
-
Choose a database creation method → Standard create
-
Engine options → MySQL
-
Engine version → Escolha a última versão do MySQL (8.4.4)
-
Templates → Free Tier (automaticamente selecionará a opção Single-AZ DB instance deployment)
-
Settings → Vá para DB identifier e dê um nome para seu identificador de banco de dados → Escolha Self managed e crie um nome de usuário e uma senha forte
-
Instance configuration → Selecione o tipo de instância db.t3.micro
-
Storage → Additional storage configuration → Maximum storage threshold → digite 22 (mínimo permitido)
-
Connectivity → Compute resource (Don’t connect to an EC2 compute resource) → Network type (IPv4) → Virtual private cloud (VPC) (selecione a VPC criada) → Public access (No) → VPC security group (firewall) (selecione o SG criado para o RDS) → Availability Zone (No preference)
-
Role para baixo em Additional configuration e crie um nome para o banco de dados. Não altere mais nehuma configuração e clique em Create database
-
-
Clique na barra de pesquisa e digite ‘EFS’
-
Vá em ‘Create file system’
-
Crie um nome, selecione a VPC criada para o projeto e depois vá para Costumize
-
Siga as próximas etapas a partir dos prints a seguir:
-
Na etapa 1, em Lifecycle management, selecione None nas três seções
-
Em Throughput mode, selecione Bursting
-
Na etapa 2, selecione as subnets PRIVADAS de cada zona de disponibilidade e selecione o SG do EFS para os dois
-
Avance as próximas etapas até aparecer na última etapa o botão Create
-
Armazene o endereço do banco de dados e o ponto de montagem EFS
-
O endereço do banco de dados é o endpoint do RDS
-
Alterar o use-data e o docker-compose.yml
-
user-data
#!/bin/bash sudo yum update -y sudo yum install -y docker wget amazon-efs-utils sudo service docker start sudo systemctl enable docker.service sudo usermod -aG docker ec2-user sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose sudo mkdir -p /wordpress sudo mount -t efs -o tls #mount efs /wordpress wget -O /home/ec2-user/docker-compose.yml #seu raw do github sudo chown ec2-user:ec2-user /home/ec2-user/docker-compose.yml cd /home/ec2-user sudo docker-compose up -d
-
docker-compose.yml
services: web: image: wordpress restart: always ports: - "80:80" environment: WORDPRESS_DB_HOST: #endpoint database WORDPRESS_DB_USER: #username WORDPRESS_DB_PASSWORD: #password WORDPRESS_DB_NAME: #db_name volumes: - /wordpress:/var/www/html networks: - tunel networks: tunel: driver: bridge
-
-
Volte para o console do Amazon EC2 e navegue em Instances para Launch Template
-
Clique em Create launch template
-
Dê um nome e uma descrição. Assinale a opção de Auto Scaling guidance
-
Em Application and OS Images: Quick start → AMI: Amazon Linux → Instance type: t2.micro (disponível do free tier)
-
Não selecione nenhum par de chave
-
Em Network settings, não escolha nenhuma subnet. Depois, selecione o SG da EC2 criada anteriormente
-
Em Advanced details, copie e cole o user-data, com suas configurações já personalizadas e crie o launch template
-
Ainda no console da EC2, vá para Load balancer e clique em Create load balancer
-
Navegue para baixo na seção do Classic load balancer e clique em Create
-
Em Basic configuration, dê um nome para o CLB e selecione Internet-facing em Scheme
-
Em Network mapping, selecione a VPC criada e escolha as subnets PÚBLICAS de cada AZ
-
Em Security groups, selecione a SG criado para o CLB
-
Em Health checks, digite
/wp-admin/install.php
no Ping path (serve para verificar se a página de instalação do WordPress está acessível) -
Crie o CLB
-
No console da EC2, clique em Auto Scaling Group e clique em create
-
Dê um nome ao ASG e selecione o Launch template criado anteriormente. Depois, vá para a próxima etapa
-
Em Network, selecione a VPC criada para o projeto e nas subnets, escolha as PRIVADAS de cada AZ. Vá para próxima etapa
-
Em Load balacing, selecione a opção do meio e escolha o CLB criado anteriormente
-
Em Health checks, marque a primeira opção. Avance para a próxima etapa
-
Em Scaling, faça as configurações abaixo para permitir o escalonamento
-
Não escolha nenhuma política de manutenção de instância
-
Em Additional settings, selecione a caixinha do meio para o monitoramento do CloudWatch
-
Avance as etapas e crie o ASG
-
Após a criação das duas instâncias definidas pelo ASG, acesse o DNS do seu LB pelo navegador
-
ATENÇÃO: coloque
http://
antes de colar o DNS do load balancer -
Crie seu login e instale o WordPress
-
Página de login do wordpress
-
Painel de edição
-
Página de exemplo
-
Vá para Auto Scaling Group e clique no nome do ASG criado
-
Clique em Automatic scaling e em Dynamic scaling policies, clique em Create
-
Faça as seguintes alteraçõese clique em create:
-
Vá para o console do Cloud Watch e clique em Alarms → In alarm → Create alarm
-
Select metric → EC2 → By Auto Scaling Group
-
Procure por CPUUtilization e crie a nova métrica
-
Faça as configurações a seguir
-
Remova a primeira configuração e clique na terceira opção
-
Configure o Auto Scaling action e avance
-
Dê um nome ao alarme
-
Avance para a próxima etapa e crie o alarme
-
Veja o novo alarme
Este projeto demonstrou a implementação de uma arquitetura robusta e escalável para hospedar um site WordPress na AWS, utilizando um container Docker em conjunto com serviços gerenciados como Amazon RDS para banco de dados, EFS para armazenamento persistente, Auto Scaling Group para ajuste automático de capacidade e Classic Load Balancer para distribuição de tráfego, resultando em uma infraestrutura resiliente e de alto desempenho que pode ser monitorada em tempo real através do CloudWatch, servindo como exemplo prático de infraestrutura como código e melhores práticas de arquitetura em nuvem.