Este projeto é uma atividade prática solicitada pela equipe de estágios da Compass.UOL. O objetivo é configurar um site WordPress através do Docker dentro de uma Virtual Private Cloud (VPC) na AWS, utilizando duas instâncias EC2 um banco de dados externo também da AWS.
- Criar VPC
- Criar os Grupos de Segurança
- Criar o sistema de arquivos EFS
- Criar banco de dados RDS
- Criar um modelo de execução
- Criar as instâncias EC2
- Acessar a uma instância via SSH
- Criar o Classic Load Balancer
- Criar o Auto Scaling
A arquitetura do projeto precisa conter uma VPC (Virtual Private Cloud) com uma subnet pública e uma subnet privada em uma AZ (Zona de Disponibilidade) e mais uma subnet pública e uma subnet privada em outra AZ. Cada subnet privada precisa hospedar uma instância EC2 executando uma imagem Docker do WordPress conectada a um sistema de arquivos EFS compartilhado e um banco de dados RDS para armazenamento persistente. As subnets privadas precisam estar conectadas a um NAT Gateway localizado em uma subnet pública para ter acesso à internet e com isso possibilitar acesso à internet para atualizações e dependências. As subnets públicas precisam estar conectadas a um Internet Gateaway para comunicação externa. É preciso haver também um Classic Load Balancer para gerenciar o tráfego e distribuir as requisições entre as instâncias EC2. O Classic Load Balancer precisa estar integrado a um Auto Scaling Group para adicionar e remover instâncias automaticamente conforme a demanda para garantir disponibilidade e escalabilidade do ambiente.
O VPC (Virtual Private Cloud) permite criar uma rede virtual privada. Você pode definir sub-redes, configurar tabelas de roteamento, gateways de internet e outras funcionalidades de rede.
As opções não especificadas aqui, deixar em default.
Passo a passo
Opção | Selecionar | Explicação |
---|---|---|
Recursos a serem criados | VPC e muito mais | Use essa opção apenas para agilizar o processo |
Geração automática da etiqueta de nome | Ativar Gerar automaticamente | Isso padroniza os nomes dos recursos |
Número de zonas de disponibilidade (AZs) | 2 | Para este projeto só precisaremos de duas zonas |
Número de sub-redes privadas | 2 | Cada sub-rede receberá uma instância |
Gateways NAT (USD) | Em 1 AZ | Necessário para as instâncias terem acesso à internet mesmo em sub-redes privadas |
Os grupos de segurança são firewalls virtuais que controlam o tráfego de entrada e saída de recursos. Eles permitem definir regras baseadas em IP, protocolos e portas.
As opções não especificadas aqui, deixar em default.
Portas Necessárias para este projeto:
- TCP 80 (HTTP)
- TCP 22 (SSH)
- TCP 2049 (NFS)
- TCP 3306 (MYSQL)
Serão necessários grupos de segurança para as Instâncias, RDS, EFS e Load Balancer.
Para este projeto será apenas necessário ajustar as regras de entrada.
Para cada grupo de segurança, selecionar o VPC deste projeto.
Passo a passo
Grupo de segurança | Portas | Códigos |
---|---|---|
Instâncias | HTTP, SSH, NFS, MYSQL | 80, 22, 2049, 3306 |
Sistema de arquivos EFS | NFS e SSH | 2049 e 22 |
Banco de Dados RDS | MYSQL | 3306 |
Load Balancer | HTTP | 80 |
O Amazon EFS (Elastic File System) é um serviço de sistema de arquivos escalável e elástico fornecido pela Amazon Web Services (AWS). Ele permite que múltiplas instâncias do Amazon EC2 (ou outros serviços) acessem simultaneamente um sistema de arquivos compartilhado, com alta disponibilidade e baixa latência.
As opções não especificadas aqui, deixar em default.
Ao iniciar a criação do EFS, selecionar Personalizar.
Para este projeto, é necessário editar apenas a etapa 2.
Escolher um nome para o sistema de arquivos é opcional.
Passo a passo
Opção | Selecionar | Explicação |
---|---|---|
VPC | VPC criada anteriormente | É necessário escolher a mesma VPC do projeto |
Destinos de montagem | Selecionar as duas sub-redes privadas | É importante selecionar a sub-rede privada 1 para a zona 1 e a sub-rede privada 2 para a zona 2 |
Grupos de segurança | Grupo de segurança para NFS | Selecionar o mesmo grupo de segurança para as duas zonas |
O Amazon RDS é um serviço gerenciado de banco de dados na nuvem. Ele oferece backups automatizados, alta disponibilidade e escalabilidade.
As opções não especificadas aqui, deixar em default.
Passo a passo
Opção | Selecionar | Explicação |
---|---|---|
Opções do mecanismo | MySQL | |
Modelos | Nível gratuito | |
Gerenciamento de credenciais | Opcional | Escolha uma senha forte ou ative Gerar senha automaticamente. Lembre-se de guardar a senha em um local seguro |
Configuração da instância | db.t3.micro | |
Grupo de segurança de VPC (firewall) | Selecionar o grupo de segurança para banco de dados | |
Nome do banco de dados inicial | Opcional | Essa opção fica dentro de "Configuração adicional". Esse parâmetro será necessário para a conexão do WordPress |
Obs 1: Você encontrará o comando para conectar a instância EC2 com o sistema de arquivos EFS, selecionando o seu sistema de arquivos EFS (criado anteriormente) e clicando em Anexar.
Obs 2: Você encontrará o link DNS selecionando seu banco de dados (criado anteriormente).
As opções não especificadas aqui, deixar em default.
Esta configuração serve para agilizar a criação das instâncias EC2 e também será necessário pra a configuração do Auto Scaling Group
Passo a passo
Opção | Selecionar | Explicação |
---|---|---|
Nome e descrição do modelo de execução | Opcional | |
Imagens de aplicação e de sistema operacional | Amazon Linux | Essa documentação está sendo baseada nesta versão do Linux |
Tipo de instância | t2.micro | |
Configuração da instância | db.t3.micro | |
Par de chaves | Caso não tenha, é necessário criar um. | Essa chave é necessária para o acesso à instância via SSH. Lembre-se de guardar em um local seguro. |
Sub-rede | Não incluir no modelo de execução | Selecionar a sub-rede adequada apenas na criação da instância EC2 |
Firewall (grupos de segurança) | Selecionar grupo de segurança existente | |
Grupos de segurança | Selecionar o grupo de segurança para Instâncias |
Na seção Tags de recurso, utilizar as seguintes tags
Tag de recurso | Valor | Chave |
---|---|---|
1 | Name | PB - Nov 2024 |
2 | CostCenter | C092000024 |
3 | Project | PB - Nov 2024 |
O User-Data.sh é um script que pode ser executado automaticamente na inicialização de uma instância EC2 e assim automatizar configurações, atualizações, executar comandos entre outras funcionalidades.
Esse código é para ser anexado na seção Dados do usuário. Esta seção está localizada no final das configurações na criação da instância EC2.
#!/bin/bash
# Atualiza o sistema
sudo yum update -y
# Instala o docker
sudo yum install docker -y
# Cria o diretório para o download do Docker compose
sudo mkdir -p /usr/local/lib/docker/cli-plugins
# Download do Docker Compose
sudo curl -L https://github.com/docker/compose/releases/download/v2.30.3/docker-compose-linux-x86_64 -o /usr/local/lib/docker/cli-plugins/docker-compose
# Altera a permissão do docker-compose
sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
# Inicia o Docker
sudo systemctl start docker
# Configura para o Docker ser iniciado junto com o sistema
sudo systemctl enable docker
# Cria o diretório efs
sudo mkdir -p /efs
# Monta um sistema de arquivos da Amazon Elastic File System (EFS) no Linux
<link para anexar o sistema de arquivos EFS>
# Cria e edita o arquivo docker-compose.yml
cat <<EOF > /home/ec2-user/docker-compose.yml
services:
wordpress:
image: wordpress:latest
container_name: wordpress
restart: always
ports:
- "80:80"
environment:
WORDPRESS_DB_HOST: "<endpoint do banco de dados>:3306"
WORDPRESS_DB_USER: "<usuário do banco de dados>"
WORDPRESS_DB_PASSWORD: "<senha do banco de dados>"
WORDPRESS_DB_NAME: "<nome do banco de dados>"
volumes:
- /efs/wordpress:/var/www/html
EOF
cd /home/ec2-user
# Executa o arquivo docker-compose.yml
sudo docker compose up -d
O Amazon EC2 fornece capacidade de computação na nuvem. Ele permite criar e usar máquinas virtuais com diferentes sistemas operacionais.
As opções não especificadas aqui, deixar em default.
Selecionar a opção executar instância a partir de modelo e selecionar o modelo criado anteriormente.
Todas as configurações serão ajustadas automaticamente conforme o modelo, será necessário ajustar somente as sub-redes.
Passo a passo
Opção | Selecionar | Explicação |
---|---|---|
Sub-rede | Selecionar a sub-rede privada | Para este projeto, é necessário ter uma instância em cada sub-rede privada. Selecionar a sub-rede privada 1 para uma instância e a sub-rede privada 2 para a segunda instância. |
Você pode precisar acessar às instâncias eventualmente. Considenrando que as instâncias das sub-redes privadas estão configuradas corretamente ao EFS, qualquer alteração em no diretório EFS das instâncias das sub-redes públicas terá efeito nas instâncias nas sub-redes privadas.
Passo a passo para acessar a instância na sub-rede pública via SSH.
Não é recomendado haver uma instância em uma sub-rede púbica com ip público. Estas instâncias precisam ser temporárias. Logo, encerre estas instâncias quando não precisar delas.
Passo a passo
-
Crie uma nova instância com as mesmas configurações do tópico 5
-
Em Configurações de rede clique em Editar.
-
Em Sub-rede selecione uma sub-rede pública.
-
Em Atribuir IP público automaticamente selecione Habilitar.
-
Execute a instância.
-
Acesse um terminal.
-
Acesse o diretório onde está localizado a chave de acesso da instância.
-
Execute o seguinte comando abaixo substituindo o
nome da chave de acesso
e oIP público
da instância.
ssh -i <chaveDeAcesso>.pem ec2-user@<ipPublicoDaInstância>
O Classic Load Balancer é um serviço que distribui automaticamente o tráfego de entrada entre várias instâncias EC2 em uma ou mais zonas de disponibilidade.
As opções não especificadas aqui, deixar em default.
Passo a passo
Opção | Selecionar | Explicação |
---|---|---|
Nome do load balancer | Opcional | |
VPC | Selecionar a VPC deste projeto | |
Zonas de disponibilidade | Selecionar as duas zonas de disponibilidade e uma sub-rede pública para cada zona. | Selecione a sub-rede pública 1 para a zona 1 e a sub-rede pública 2 para a zona 2 |
Grupos de segurança | Selecionar o grupo de segurança apropriado para o Load Balancer | |
Verificações de integridade | Em Caminho de ping, colocar: /wp-admin/install.php | É preciso um caminho que retorne o código 200 para o Load Balancer |
Acesse-o pelo navegador e você deve esperar a página inicial de configuração do WordPress como na imagem abaixo.
O Auto Scaling ajusta automaticamente a quantidade de instâncias EC2 com base na demanda de tráfego ou desempenho.
As opções não especificadas aqui, deixar em default.
Passo a passo
Opção | Selecionar | Explicação |
---|---|---|
Nome do grupo do Auto Scaling | Opcional | |
Modelo de execução | Selecionar o modelo de execução criado anteriormente | |
VPC | Selecionar o VPC deste projeto | |
Zonas de disponibilidade e sub-redes | Selecionar as duas sub-redes públicas | O Auto Scaling vai distribuir as novas instâncias entre as duas sub-redes |
Balanceamento de carga | Anexar a um balanceador de carga existente | |
Anexar a um balanceador de carga existente | Escolher entre Classic Load Balancers | Selecione o Classic Load Balancer criado anteriormente |
Capacidade desejada | 0 | Inicialmente haverá apenas as duas instâncias criadas anteriormente |
Capacidade mínima desejada | 0 | Inicialmente haverá apenas as duas instâncias criadas anteriormente |
Capacidade máxima desejada | Opcional | Ajustar conforme a necessidade futura |
- AWS
- WordPress
- Docker
- VPC
- Banco de Dados MySQL
Obrigado Ana Soares Nunes pela parceria. Obrigado pelo auxílio, Davi Santos Cardoso da Silva e Paulo Henrique Nunes Silva.