Roteiro de trabalho
Ao final deste roteiro, o aluno terá construído uma infraestrutura na AWS capaz de suportar aplicações conteinerizadas publicadas no Amazon ECR utilizando o Docker Swarm para montar um pequeno cluster constituído de 3 Amazon EC2.
Pré requisitos:
- O aluno deve possuir uma conta na AWS
Passo a passo
⚠ Repare em qual zona de disponibilidade você está criando sua infraestrutura!
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 nossas VMs:
- 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 VPC
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 das VMs estarão expostar 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
- Clicar em Create Security Group
Para facilitar a criação do cluster, podemos criar um template de execução para que as VMs 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
- Na seção Network Configuration selecionar o grupo de segurança criado (ex.:
swarm-sg
) - 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!)
- 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 as VMs 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
) - Clicar em Execute From Launch Template
Parte 3 - Configuração do Docker Swarm
$ ssh -i ages-winter-2021.pem ec2-user@<ipv4-publico-ec2>
$ docker swarm init
$ docker swarm join --token <swarm-token> <swarm-master>