Roteiro de trabalho
Ao final deste roteiro, o aluno terá construído uma infraestrutura na AWS capaz de suportar aplicações conteinerizadas utilizando o Docker Swarm para montar um pequeno cluster constituído de 3 Amazon EC2.
Pré requisitos:
Passo a passo
⚠ Repare em qual zona de disponibilidade você está criando sua infraestrutura!
❓ A notação < x > significa que x deve ser modificado
Parte 1 - Criação da rede
Primeiro vamos criar uma VPC (Virtual Private Cloud), ou seja, uma porção de rede exclusiva para o nosso App:
- Acessar o painel do serviço VPC no console da AWS
- No menu lateral, acessar Your VPCs
- Clicar em Create VPC
- Inserir um nome (ex.:
swarm-vpc
) e inserir um bloco CIDR (ex.:172.30.0.0/24
) - Clicar em Create VPC
Após vamos criar uma subrede dentro da VPC para conectar nossos nodos:
- Acessar o painel do serviço VPC no console da AWS
- No menu lateral, acessar Subnets
- Clicar em Create Subnet
- Selecione a VPC criada (ex.:
swarm-vpc
) - Inserir um nome (ex.:
swarm-subnet
) e colocar o mesmo bloco CIDR (ex.:172.30.0.0/24
) - Clicar em Create Subnet
- Acessar novamente o painel do serviço VPC no console da AWS
- No menu lateral, acessar Subnets
- Selecionar a subnet criada, clicar em Actions e selecionar Modify Auto-assign IP Settings
- Selecionar Enable auto-assign public IPv4 address e clicar em Save
Ainda é necessário que a nossa VPC tenha acesso à rede externa, portanto criaremos um gateway:
- Acessar o painel do serviço VPC no console da AWS
- No menu lateral, acessar Internet Gateways
- Clicar em Create Internet Gateway
- No menu de criação, clicar em Create Internet Gateway
- Voltar para o menu de Internet Gateways
- Com o botão direito do mouse, clicar no novo Internet Gateway (detached) e escolher attach to VPC
- Selecionar a VPC criada (ex.:
swarm-vpc
) e clicar em Attach Internet Gateway
Por fim, vamos criar modificar a tabela de roteamento para endereçar o tráfego em 0.0.0.0/0
(rota padrão) para o gateway criado:
- Acessar o painel do serviço VPC no console da AWS
- No menu lateral, acessar Route Tables
- Selecionar a Route table que está associada à VPC criada (ex.:
swarm-vpc
) - Na seção Routes, no fim da página, clicar em Edit Route
- Clicar em add route e inserir
0.0.0.0/0
para destination e seu Internet Gateway para target - Clicar em Save Changes
Parte 2 - Criação do cluster
Inicialmente é necessário definir quais portas dos nodos estarão expostas na internet:
- Acessar o painel do serviço EC2 no console da AWS
- No menu lateral, acessar Security Groups
- Clicar em Create Security Group
- Inserir um nome (ex.:
swarm-sg
), descrição e selecionar a VPC criada (ex.:swarm-vpc
) - Na seção Inbound Rules acrescentar as seguintes regras:
-
type
HTTP
e origin0.0.0.0/0
-
type
SSH
e origin0.0.0.0/0
-
type
All TCP
e origin o próprio Security Group (ex.:swarm-sg
) -
type
All UDP
e origin o próprio Security Group (ex.:swarm-sg
) -
type
All TCP
e origin o próprio Security Group (ex.:swarm-sg
) -
type
Custom TCP
e port interval8080
e origin0.0.0.0/0
-
type
Custom TCP
e port interval9090
e origin0.0.0.0/0
-
type
- Clicar em Create Security Group
Para facilitar a criação do cluster, podemos criar um template de execução para que os nodos iniciem com o Docker instalado:
- Acessar o painel do serviço EC2 no console da AWS
- No menu lateral, acessar Launch Templates
- Clicar em Create Launch Template
- Inserir um nome (ex.:
swarm-template
) e descrição - Na seção Amazon Machine Image selecionar
Amazon Linux 2 AMI
- Na seção Instance Type selecionar o tipo
t2.micro
(free tier) - Na seção Key pair clicar em Create New Key Pair
- Inserir um nome (ex.:
workshop-app
) e clicar em Create New Key Pair -
⚠ Baixe o arquivo pois a AWS não realiza backup deste certificado!
- Inserir um nome (ex.:
- Na seção Network Configuration selecionar o grupo de segurança criado (ex.:
swarm-sg
) - Na seção Advanced Details acessar o campo de texto User Data e inserir o seguinte shell scrpit:
#!/bin/bash # install docker yum update -y amazon-linux-extras install docker -y service docker start sudo usermod -a -G docker ec2-user
Por fim, vamos executar os nodos a partir do modelo criado:
- Acessar o painel do serviço EC2 no console da AWS
- No menu lateral, acessar Launch Templates
- Selecionar o modelo criado (ex.:
swarm-template
) e, em actions, selecionar Execute From Launch Template - Selecionar a quantidade de de instâncias para executar (ex.:
3
) - Na seção Network Configuration selecionar a suberde criada (ex.:
swarm-subnet
) - Clicar em Execute From Launch Template
Parte 3 - Configuração do cluster
Para configurar o cluster Swarm é necessário que seja feito o SSH em cada uma das máquinas criadas, iniciando a Docker Engine em swarm mode:
- Acessar o painel do serviço EC2 no console da AWS
- No menu lateral, acessar Instances
- Verificar as instâncias (nodos) criadas e buscar Public IPV4 Address
- Para a primeira instância executar
# acessar via SSH $ ssh -i <certificado> ec2-user@<ipv4-publico-ec2> # iniciar a nodo como mestre Swarm $ docker swarm init
- Nomear esta máquina de
swarm-master
no menu Instances - Para as demais instâncias (caso existam), executar:
# acessar nodo via SSH $ ssh -i <certificado> ec2-user@<ipv4-publico-ec2> # iniciar nodo como escravo Swarm $ docker swarm join --token <token-swarm> <ip-interno-swarm-master>
- Nomear as demais máquinas de
swarm-node-<numero>
no menu Instances
Parte 4 - Execução das aplicações
Para executar as aplicações no cluster devemos acessar a instância mestre (master
) e clonar os repositórios, e então criar suas respectivas imagens Docker para executá-las como serviços Swarm:
# criar uma rede overlay para execução dos apps
$ docker network create -d overlay <nome-rede>
# clonar repositório
$ git clone <repositório-gitlab>
# criar imagem Docker
$ docker build -t <tag-imagem> .
# executar imagem como serviço Swarm
$ docker service create --name <nome-serviço> --publish published=<porta-swarm>,target=<porta-container> --network <nome-rede> <tag-imagem>
Parte 5 - Acesso da aplicação
Para acessar a aplicação executando no cluster basta:
- Acessar o painel do serviço EC2 no console da AWS
- No menu lateral, acessar Instances
- Buscar o Public IPV4 Address da instância (nodo) mestre
- Colocar como endereço no seu navegador e utilizar as portas
8080
,9090
e80
!
Agora você tem uma aplicação conteinerizada na AWS, parabéns!!