Este projeto é desenvolvido com o intuito de criar uma infraestrutura na AWS utilizando uma VPC, Subnets, Security Groups, EC2, RDS, Load Balancer, EFS, Bastion Host e Auto Scaling Group.
- Git
- Conta na AWS
- VSCode ou qualquer editor de texto de sua preferência
Na imagem acima, é possível visualizar a criação de uma VPC.
Configurações: (Você pode colocar a configuração que desejar, abaixo está a configuração que foi utilizada nesse laboratório)
- Nome:
wordpress-vpc - CIDR Block:
10.0.0.0/16 - IPv4 CIDR Block:
No IPv4 CIDR Block - Tenancy:
Default - Número de AZs:
2(us-east-1a, us-east-1b) - Número de subnets públicas:
2 - Número de subnets privadas:
2 - NAT Gateway:
none - VPC Endpoints:
S3
Na imagem acima, a VPC foi criada com sucesso.
Clicando em Create file system, é possível visualizar a criação de um EFS.
Dê um nome ao EFS e selecione a VPC criada no passo 1 wordpress-vpc.
Na imagem acima, é possível visualizar a criação de um EFS.
Na imagem acima, é possível visualizar a criação de um Security Group.
Configurações:
O primeiro SG será privado:
- Nome:
wordpress-privado-sg - Descrição:
Security Group para instâncias privadas - Regras de entrada:
- Type:
SSH - Protocol:
TCP - Port Range:
22 - Source:
0.0.0.0/0
- Type:
HTTP - Protocol:
TCP - Port Range:
80 - Source:
security group publico
- Type:
MySQL/Aurora - Protocol:
TCP - Port Range:
3306 - Source:
0.0.0.0/0
é muito importante que a porta 3306 esteja aberta para que a instância privada consiga se comunicar com o RDS.
- Type:
HTTPS - Protocol:
TCP - Port Range:
443 - Source:
security group publico
- Type:
O segundo SG será público:
- Nome:
wordpress-publico-sg - Descrição:
Security Group para instâncias públicas - Regras de entrada:
- Type:
SSH - Protocol:
TCP - Port Range:
22 - Source:
Anywhere IPv4
- Type:
HTTP - Protocol:
TCP - Port Range:
80 - Source:
0.0.0.0/0
- Type:
Agora com todos os passos anteriores realizados, vamos criar o RDS, que será o banco de dados utilizado pelo Wordpress.
Na imagem acima, é possível visualizar a criação de um RDS.
Selecionar o banco de dados MySQL.
Configurações:
- Engine options:
MySQL - Version:
MySQL 8.0.25 - Templates:
Free tier - Settings:
- DB instance identifier:
wordpress-db - Master username:
admin - Master password:
exemplosenha
- DB instance identifier:
- DB instance size:
db.t2.micro - Storage:
20 GB - Connectivity:
- VPC:
wordpress-vpc - Subnet group:
wordpress-private-subnet-group - Publicly accessible:
No - VPC security group:
wordpress-sg
- VPC:
- Additional configuration:
- Initial database name:
wordpress
- Initial database name:
- Desabilitando checks para evitar custo adicional.
Após a criação, é possível visualizar o endpoint do banco de dados.
Esse endpoint será utilizado para configurar o Wordpress.
No docker-compose.yml, é necessário alterar o endpoint, o nome do banco de dados, usuário e senha.
Acessando a EC2 e criando um banco chamado wordpress e alterando dentro do docker compose.
Para a instância privada acessar a internet, é necessário criar um NAT Gateway.
Configurações: (Esse NAT Gateway será associado na subnet privada conforme o nome abaixo do laboratório)
- Nome:
wordpress-nat-gateway - Subnet:
wordpress-public-subnet-aewordpress-public-subnet-b - Elastic IP:
Create new EIP
Após a criação, é necessário configurar a rota na tabela de rotas da VPC.
Coloque o NAT Gateway como destino e a Internet Gateway como alvo na tabela de rotas da subnet privada
Após a configuração, é possível acessar a instância privada e instalar o Docker e o Docker Compose.
Na imagem acima, é possível visualizar a criação de uma EC2.
A primeira EC2 será o Bastion Host.
Configurações:
- AMI:
Amazon Linux 2023 - Instance type:
t2.micro - Network:
wordpress-vpc - Subnet:
wordpress-public-subnet-a - Auto-assign Public IP:
Enable - Security Group:
wordpress-publico-sg - Key pair:
wordpress-key-pair - user data (Opcional), desejado apenas nas máquinas privadas (passo abaixo).
Você pode acessar a sua bastion host através do console AWS ou através da chave .pem do Bastion Host. (wordpress-key-pair)
A segunda EC2 será a instância privada.
Configurações:
- AMI:
Amazon Linux 2023 - Instance type:
t2.micro - Network:
wordpress-vpc - Subnet:
wordpress-private1-subnet-a - Auto-assign Public IP:
Disable - Security Group:
wordpress-privado-sg - Key pair:
wordpress-key-pair - user data
A terceira EC2 será a instância privada.
Configurações:
- AMI:
Amazon Linux 2023 - Instance type:
t2.micro - Network:
wordpress-vpc - Subnet:
wordpress-private2-subnet-b - Auto-assign Public IP:
Disable - Security Group:
wordpress-privado-sg - Key pair:
wordpress-key-pair - user data
O user data é um script que será executado na inicialização da instância.
#!/bin/bash
sudo yum update -y
sudo yum install -y docker
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker ec2-user
newgrp docker
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 /app
cat <<EOF > /app/compose.yml
services:
wordpress:
image: wordpress
restart: always
ports:
- 80:80
environment:
WORDPRESS_DB_HOST: projeto-wordpress-db.czwaygssin91.us-east-1.rds.amazonaws.com
WORDPRESS_DB_USER: admin
WORDPRESS_DB_PASSWORD: 12072006
WORDPRESS_DB_NAME: admin
volumes:
- /mnt/efs:/var/www/html
EOF
sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport fs-01e562587e1798162.efs.us-east-1.amazonaws.com:/ /mnt/efs
docker-compose -f /app/compose.yml up -d
Após a criação, é necessário acessar a instância Bastion Host e configurar o acesso à instância privada.
Para acessar o Bastion Host é necessário colocar o sg-privado como rota de entrada de SSH como anywhere IPv4.
Configurações do Auto Scaling Group:
- Nome:
wordpress-asg - Launch configuration:
wordpress-launch-config - Min size:
1 - Max size:
3 - Desired capacity:
1 - Health check type:
EC2 - Health check grace period:
300 - Target group:
wordpress-tg - Availability Zones:
us-east-1a,us-east-1b
Com essas configurações, o auto scaling group será criado com sucesso.
Criação do Load Balancer para ter acesso ao Wordpress usando as instâncias privadas e disponibilizando o acesso via navegador.
Na imagem acima, é possível visualizar a criação de um Load Balancer.
Configurações:
- Nome:
wordpress-lb - Scheme:
internet-facing - VPC:
wordpress-vpc - Availability Zones:
us-east-1a,us-east-1bpublic subnet - Listeners:
- Protocol:
HTTP - Port:
80
- Protocol:
Conforme explicado acima, o Load Balancer será criado com o protocolo HTTP e a porta 80.
Health checks:
- Protocol:
HTTP - Path:
/wp-admin/install.php
O Load Balancer precisa estar vinculado com a instância EC2 para que o health check funcione, sem isso o Load Balancer não passará pelo health check.
Load Balancer criado com sucesso e em serviço, passando pelo health check.
Acessando o Wordpress através do DNS do Load Balancer.
Wordpress acessado com sucesso.
Este projeto foi desenvolvido por Carlos Henrique . Atribuído pela Compass.Uol e orientado por Thiago Geremias de Oliveira.
















