Passo 2: Criando os Security groups.
Passo 5: Criando e configurando o Nat Gateway.
Passo 6: Organizando os endpoints no script user data.
Passo 7: Criando um Bastion Host.
Passo 8: Criando um launch template.
Passo 10: Criando um Load Balancer.
Passo 11: Finalmente! Criando um auto scaling group e testando a nossa aplicação final.
No seu AWS Console, busque por VPC, em seguida clique em criar VPC.
| Nome | Especificações |
|---|---|
| WEB-WORDPRESS-VPC | 2 AZ (Zonas de Disponibilidade) |
| 3 subnets públicas | |
| 2 subnets privadas |
![]() |
|---|
Agora iremos criar os Security Groups(SG), iremos criar dois SG, um público, que será usado pelo Load Balancer e o Bastion Host. E um privado, que será usado, pelas instancias EC2, RDS e todos os resources que exigem níveis de segurança. Obs:Os security groups se relacionam entre si, então crie-os primeiro depois adicione ou edite as regras
|
Vá para:
- Especificações:
| Nome | VPC | Inbound Rules |
|---|---|---|
| WEB-WORDPRESS-PUBLIC-SG | WEB-WORDPRESS-VPC-vpc | - HTTPS: 443 - 0.0.0.0/0 - HTTP: 80 - 0.0.0.0/0 - SSH: 22 - 0.0.0.0/0 |
- Especificações:
| Nome | VPC | Inbound Rules |
|---|---|---|
| WEB-WORDPRESS-PRIVATE-SG | WEB-WORDPRESS-VPC-vpc | - Mysql/Aurora: 3306 - WEB-WORDPRESS-PRIVATE-SG - HTTPS: 443 - WEB-WORDPRESS-PUBLIC-SG - HTTP: 80 - WEB-WORDPRESS-PUBLIC-SG - SSH: 22 - WEB-WORDPRESS-PUBLIC-SG |
Após ter criado os security groups, vá no WEB-WORDPRESS-PRIVATE-SG, em editar regras de entrada, e adicione a seguinte regra:
- NFS - Source: WEB-WORDPRESS-PRIVATE-SG
| Nome | VPC | Inbound Rules |
|---|---|---|
| WEB-WORDPRESS-PRIVATE-SG | WEB-WORDPRESS-VPC-vpc | - NFS: 2049 - WEB-WORDPRESS-PRIVATE-SG - Mysql/Aurora: 3306 - WEB-WORDPRESS-PRIVATE-SG - HTTPS: 443 - WEB-WORDPRESS-PUBLIC-SG - HTTP: 80 - WEB-WORDPRESS-PUBLIC-SG - SSH: 22 - WEB-WORDPRESS-PUBLIC-SG |
- Especificações:
| .. | .. |
|---|---|
| Nome | WEB-WORDPRESS-RDS |
| Tipo de Banco de Dados | MYSQL |
| Plano | FreeTier |
| Nome do Banco de Dados | wordpress |
| Autenticação | admin - MyNewPass1 |
| Tipo de Instância | db.t3.micro |
| Conexão com EC2 | Não conectado |
| VPC | WEB-WORDPRESS-VPC-vpc |
| Security Group | WEB-WORDPRESS-PRIVATE-SG |
| Configuração Adicional | Banco de dados inicial: wordpress |
- Especificações:
| .. | .. |
|---|---|
| Nome | WEB-WORDPRESS-EFS |
| VPC | WEB-WORDPRESS-VPC-vpc |
Clique no file system criado, na seção de Network clique em manage e mude os security groups para o WEB-WORDPRESS-PRIVATE-SG.
![]() |
|---|
O Nat Gateway vai permitir a conexão das instancias privadas com a internet.
- Especificações:
| .. | .. |
|---|---|
| Nome | WEB-WORDPRESS-NAT-GATEWAY |
| Subnet | WEB-WORDPRESS-VPC-subnet-public1-us-east-1a |
| Tipo de Conectividade | Publica |
| Ação | Clicar em Alocar IP Elastico |
| VPC | WEB-WORDPRESS-VPC-vpc |
![]() |
|---|
Agora iremos associar o nat gateway às subnets privadas através da route table.
-
Na subnet: WEB-WORDPRESS-VPC-rtb-private1-us-east-1a:
-
Na subnet: WEB-WORDPRESS-VPC-rtb-private2-us-east-1b, faça o mesmo processo.
No nosso user data usamos dois endpoints, um do RDS e outro do EFS.
-
Copie o user data abaixo e colo em um editor de código, ou qualquer outro editor de texto.
-
Vá no seu RDS criado, clique nele, e na seção Conectivade e segurança, copie o endpoint.
-
No user data que está no seu editor de texto, vá no
<ENDPOINT RDS>e substitua pelo endpoint do RDS. -
Vá no EFS criado, clique nele, clique em
Attach/anexar, e copie o comando abaixo deUsando o client NFS. -
No user data procure a linha que inicia com
sudo mount -t nfs4, substitua-a pelo comando que você copiou. E no final do comando onde tiver:/ efs, substitiua por:/ /mnt/efs.
User Data
#!/bin/bash
# Atualiza os pacotes da maquina
yum update -y
# Instala o git e o docker
yum install git docker amazon-efs-utils -y
# Inicia o docker e instala o docker compose
systemctl enable docker
systemctl start 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
# Cria uma pasta no diretório raiz, para que o compose.yml não fique nos arquivos temporarios
mkdir -p /files
# Cria um arquivo compose.yml na pasta files
cat <<EOF> /files/compose.yml
services:
wordpress:
image: wordpress
restart: always
ports:
- 80:80
environment:
WORDPRESS_DB_HOST: <ENDPOINT RDS>:3306
WORDPRESS_DB_USER: admin
WORDPRESS_DB_PASSWORD: MyNewPass1
WORDPRESS_DB_NAME: wordpress
volumes:
- /mnt/efs:/var/www/html
EOF
sudo mkdir -p /mnt/efs
sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport fs-05cf370359e4902e5.efs.us-east-1.amazonaws.com:/ /mnt/efs
sudo docker-compose -f /files/compose.yml up -dVerifique todos os seus endpoints antes de prosseguir.
Por questões de segurança, criamos uma máquina que possa acessar as nossas instancias privadas.
- Especificações:
| .. | .. |
|---|---|
| Nome | WEB-WORDPRESS-BASTION-HOST |
| Key pair | pbnov24 |
| Editar configurações de rede | WEB-WORDPRESS-VPC |
| Subnet | subnet-public1-us-east-1a |
| Habilitar IP Público | Sim |
| Selecionar SG | WEB-WORDPRESS-PUBLIC-SG |
| Detalhes avançados | User data: Cole o seu user data no campo |
Espere a instancia ficar com o status checked.
Clique na instancia, Copie o IP Público dela e cole no seu navegador, não irá funcionar pois como ela é uma instancia pública, o banco de dados e o efs não conseguem chegar a ela devido aos grupos de segurança.
Mas, se você quiser testar, você pode criar um container manualmente, vá na instância, Conectar e conectar novamente.
- Dentro da instancia
sudo systemctl stop wordpress.service
sudo docker ps
sudo docker rm -f files-wordpress-1
sudo docker images
sudo docker rmi wordpress
sudo docker run -d -p 80:80 --name wordpress wordpress
sudo docker psCopie o IP público da instancia Bastion Host e cole no navegador, a página inicial será aberta mesmo que o banco não esteja conectado.
User Data
#!/bin/bash
# Atualiza os pacotes da maquina
yum update -y
# Instala o git e o docker
yum install git docker amazon-efs-utils -y
# Inicia o docker e instala o docker compose
systemctl enable docker
systemctl start 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
# Cria uma pasta no diretório raiz, para que o compose.yml não fique nos arquivos temporarios
mkdir -p /files
# Cria um arquivo compose.yml na pasta files
cat <<EOF> /files/compose.yml
services:
wordpress:
image: wordpress
restart: always
ports:
- 80:80
environment:
WORDPRESS_DB_HOST: <ENDPOINT RDS>:3306
WORDPRESS_DB_USER: admin
WORDPRESS_DB_PASSWORD: MyNewPass1
WORDPRESS_DB_NAME: wordpress
volumes:
- /mnt/efs:/var/www/html
EOF
sudo mkdir -p /mnt/efs
sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport fs-05cf370359e4902e5.efs.us-east-1.amazonaws.com:/ /mnt/efs
sudo docker-compose -f /files/compose.yml up -d
-
Especificações:
Especificação Valor Nome WEB-WORDPRESS-SERVERS Quick start Amazon Linux Tipo de instância t2.micro Key pair pbnov24 Subnet Não selecione a subnet Selecionar SG WEB-WORDPRESS-PRIVATE-SG Detalhes avançados User data: Cole o seu user data no campo
Selecione o template criado.
- Especificações:
.. .. Subnet WEB-WORDPESS-VPC-subnet-private1-us-east-1a
Cheque se todos os campos estão corretos, principalmente o SG e o user data.
Agora iremos verificar se a instancia está correta, acessando-a pelo Bastion Host.
![]() |
|---|
Clique em conect, e ele irá abrir dentro do BastionHost.
Iremos agora fazer o acesso ssh da instancia privada.
Abra a sua keypair utilizada na instancia e cole no arquivo pbnov24 aberto pelo nano, Ctrl + o e Enter e depois Ctrl + x para sair.
Copie o Ip privado da instancia criada.
sudo ssh -i "pbnov24" ec2-user@<ip privado da instancia>
![]() |
|---|
Siga os comonados da imagem acima.
cd .ssh
nano pbnov24 #cole o conteúdo da sua keypair
ls
sudo ssh -i "pbnov24" ec2-user@<ip privado da instancia>![]() |
|---|
Siga os comonados da imagem acima.
sudo docker ps
cd /mnt
df -hObserve se o seu mount está correto. Se o seu Bastion Host está mostrando o wordpress e o seu mount está mostrando o link do efs amazon, então agora nos resta apenas criar um Load Balancer e o Auto Scaling.
Procure por Classic Load Balancer e clique em criar.
| Nome | Especificações |
|---|---|
| WEB-WORDPRESS-CLB | - Internet-facing - Network mapping: WEB-WORDPRESS-VPC, Selecione as duas AZ e coloque a subnet pública - SG: WEB-WORDPRESS-PUBLIC-SG - Healthy checks: /wp-admin/install.php |
-
Agora crie outra instancia usando o template WEB-WORDPRESS-SERVERS para testarmos o Load Balancer.
![]() |
|---|
- Neste momento o que nos resta é associar as instancias criadas para verificar se o Load Balancer está de fato funcionando.
- Vá para a seção de target Instances, Manage Instances.
![]() |
|---|
- Agora na target Instances, verifique se o Healthy status das instancias está In-Service.
Copie e acesse o DNS do load balancer no seu navegador.
Já que o nosso Load Balancer está rodando, iremos dar inicio a criação do Auto Scaling.
Até agora temos:
|
| Nome | Especificações |
|---|---|
| WEB-WORDPRESS-ASG | - Selecione o Launch template: WEB-WORDPRESS-SERVERS - VPC: WEB-WORDPRESS-VPC - Selecione as subnets: privadas - Anexar a um Load Balancer existente: WEB-WORDPRESS-CLB - Habilitar ELB health checks - Group size: Capacidade desejada (2), Min(1), Max(2) - Target tracking scaling policy: Average CPU utilization (target - 70, 200s) - Terminate and Launch - Enable group metrics collection within CloudWatch - Add Notification: Ex: my-sns-topic(seuemail@gmai.com) |
-
Vá no link DNS aberto do Load balancer e faça o refresh ou recarregue com F5. Se você for nas suas instancias, o número delas deve ter aumentado.
Agora, a estrutura do nosso projeto
|
Testando em um dispositivo de outra rede e na minha própria rede.
















