Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • W wiki
  • Project information
    • Project information
    • Activity
    • Labels
    • Planning hierarchy
    • Members
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Create a new issue
  • Jobs
  • Issue Boards
Collapse sidebar
  • workshop-ages-winter-2021
  • wiki
  • Wiki
  • Dia 2: Amazon Web Services (AWS)

Last edited by Henrique Reis Kops Jul 22, 2021
Page history

Dia 2: Amazon Web Services (AWS)

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:

  • O aluno deve possuir uma conta na AWS

  • O aluno deve ter conhecimentos básicos em Docker.

👉 Manual de criar conta

👉 Informações sobre o nível gratuito da AWS

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:

  1. Acessar o painel do serviço VPC no console da AWS
  2. No menu lateral, acessar Your VPCs
  3. Clicar em Create VPC
  4. Inserir um nome (ex.: swarm-vpc) e inserir um bloco CIDR (ex.: 172.30.0.0/24)
  5. Clicar em Create VPC

Após vamos criar uma subrede dentro da VPC para conectar nossos nodos:

  1. Acessar o painel do serviço VPC no console da AWS
  2. No menu lateral, acessar Subnets
  3. Clicar em Create Subnet
  4. Selecione a VPC criada (ex.: swarm-vpc)
  5. Inserir um nome (ex.: swarm-subnet) e colocar o mesmo bloco CIDR (ex.: 172.30.0.0/24)
  6. Clicar em Create Subnet
  7. Acessar novamente o painel do serviço VPC no console da AWS
  8. No menu lateral, acessar Subnets
  9. Selecionar a subnet criada, clicar em Actions e selecionar Modify Auto-assign IP Settings
  10. 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:

  1. Acessar o painel do serviço VPC no console da AWS
  2. No menu lateral, acessar Internet Gateways
  3. Clicar em Create Internet Gateway
  4. No menu de criação, clicar em Create Internet Gateway
  5. Voltar para o menu de Internet Gateways
  6. Com o botão direito do mouse, clicar no novo Internet Gateway (detached) e escolher attach to VPC
  7. 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:

  1. Acessar o painel do serviço VPC no console da AWS
  2. No menu lateral, acessar Route Tables
  3. Selecionar a Route table que está associada à VPC criada (ex.: swarm-vpc)
  4. Na seção Routes, no fim da página, clicar em Edit Route
  5. Clicar em add route e inserir 0.0.0.0/0 para destination e seu Internet Gateway para target
  6. Clicar em Save Changes

Parte 2 - Criação do cluster

Inicialmente é necessário definir quais portas dos nodos estarão expostas na internet:

  1. Acessar o painel do serviço EC2 no console da AWS
  2. No menu lateral, acessar Security Groups
  3. Clicar em Create Security Group
  4. Inserir um nome (ex.: swarm-sg), descrição e selecionar a VPC criada (ex.: swarm-vpc)
  5. Na seção Inbound Rules acrescentar as seguintes regras:
    • type HTTP e origin 0.0.0.0/0
    • type SSH e origin 0.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 interval 8080 e origin 0.0.0.0/0
    • type Custom TCP e port interval 9090 e origin 0.0.0.0/0
  6. 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:

  1. Acessar o painel do serviço EC2 no console da AWS
  2. No menu lateral, acessar Launch Templates
  3. Clicar em Create Launch Template
  4. Inserir um nome (ex.: swarm-template) e descrição
  5. Na seção Amazon Machine Image selecionar Amazon Linux 2 AMI (x86)
  6. Na seção Instance Type selecionar o tipo t2.micro (free tier)
  7. 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!
  8. Na seção Network Configuration selecionar o grupo de segurança criado (ex.: swarm-sg)
  9. 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:

  1. Acessar o painel do serviço EC2 no console da AWS
  2. No menu lateral, acessar Launch Templates
  3. Selecionar o modelo criado (ex.: swarm-template) e, em actions, selecionar Execute From Launch Template
  4. Selecionar a quantidade de de instâncias para executar (ex.: 3)
  5. Na seção Network Configuration selecionar a suberde criada (ex.: swarm-subnet)
  6. 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:

  1. Acessar o painel do serviço EC2 no console da AWS
  2. No menu lateral, acessar Instances
  3. Verificar as instâncias (nodos) criadas e buscar Public IPV4 Address
  4. 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
  5. Nomear esta máquina de swarm-master no menu Instances
  6. 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>
  7. 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:

  1. Acessar o painel do serviço EC2 no console da AWS
  2. No menu lateral, acessar Instances
  3. Buscar o Public IPV4 Address da instância (nodo) mestre
  4. Colocar como endereço no seu navegador e utilizar as portas 8080, 9090 e 80!

Agora você tem uma aplicação conteinerizada na AWS, parabéns!! 🎉 👏 🚀

Referências:

  • Swarm overview
  • Swarm route mesh
  • Swarm overlay network
  • Swarm em EC2
  • How VPC works
Clone repository
  • Dia 1: Frontend, Backend e Git
  • Dia 2: Amazon Web Services (AWS)
  • Dia 3: Containers Docker e CI CD
  • Home