... | @@ -8,10 +8,14 @@ Ao final deste roteiro, o aluno terá construído uma infraestrutura na [AWS](ht |
... | @@ -8,10 +8,14 @@ Ao final deste roteiro, o aluno terá construído uma infraestrutura na [AWS](ht |
|
|
|
|
|
> :point_right: [Manual de criar conta](https://tools.ages.pucrs.br/modelos/estudos/tutorialFluxoAges/blob/916322335b7bd2fa9fa338ff6e74bcf93bc6bbe0/Criando_sua_conta_pessoal_na_AWS.pdf)
|
|
> :point_right: [Manual de criar conta](https://tools.ages.pucrs.br/modelos/estudos/tutorialFluxoAges/blob/916322335b7bd2fa9fa338ff6e74bcf93bc6bbe0/Criando_sua_conta_pessoal_na_AWS.pdf)
|
|
|
|
|
|
|
|
> :point_right: [Informações sobre o nível gratuito da AWS](https://aws.amazon.com/pt/free/?trk=ps_a134p0000078Pq7AAE&trkCampaign=acq_paid_search_brand&sc_channel=ps&sc_campaign=acquisition_BR&sc_publisher=google&sc_category=core-main&sc_country=BR&sc_geo=LATAM&sc_outcome=acq&sc_detail=aws&sc_content=Brand%20Core%20AWS_p&sc_matchtype=p&sc_segment=507891927302&sc_medium=ACQ-P%7CPS-GO%7CBrand%7CDesktop%7CSU%7CCore-Main%7CCore%7CBR%7CEN%7CText%7Cxx%7CPH&s_kwcid=AL!4422!3!507891927302!p!!g!!aws&ef_id=Cj0KCQjw_8mHBhClARIsABfFgpjy82IrDkpFiF4rg2TmvSVPv9w1kh8VX6-v5vagE2pGyFEFq0qzV1waAjHBEALw_wcB:G:s&s_kwcid=AL!4422!3!507891927302!p!!g!!aws&all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc&awsf.Free%20Tier%20Types=*all&awsf.Free%20Tier%20Categories=*all)
|
|
|
|
|
|
## Passo a passo
|
|
## Passo a passo
|
|
|
|
|
|
> :warning: Repare em qual zona de disponibilidade você está criando sua infraestrutura!
|
|
> :warning: Repare em qual zona de disponibilidade você está criando sua infraestrutura!
|
|
|
|
|
|
|
|
> :question: A notação **< x >** significa que **x** deve ser modificado
|
|
|
|
|
|
### Parte 1 - Criação da rede
|
|
### 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:
|
|
Primeiro vamos criar uma VPC (*Virtual Private Cloud*), ou seja, uma porção de rede exclusiva para o nosso App:
|
... | @@ -22,7 +26,7 @@ Primeiro vamos criar uma VPC (*Virtual Private Cloud*), ou seja, uma porção de |
... | @@ -22,7 +26,7 @@ Primeiro vamos criar uma VPC (*Virtual Private Cloud*), ou seja, uma porção de |
|
4. Inserir um nome (ex.: `swarm-vpc`) e inserir um bloco CIDR (ex.: `172.30.0.0/24`)
|
|
4. Inserir um nome (ex.: `swarm-vpc`) e inserir um bloco CIDR (ex.: `172.30.0.0/24`)
|
|
5. Clicar em **Create VPC**
|
|
5. Clicar em **Create VPC**
|
|
|
|
|
|
Após vamos criar uma subrede dentro da VPC para conectar nossas VMs:
|
|
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
|
|
1. Acessar o painel do serviço **VPC** no console da AWS
|
|
2. No menu lateral, acessar **Subnets**
|
|
2. No menu lateral, acessar **Subnets**
|
... | @@ -52,11 +56,11 @@ Por fim, vamos criar modificar a tabela de roteamento para endereçar o tráfego |
... | @@ -52,11 +56,11 @@ Por fim, vamos criar modificar a tabela de roteamento para endereçar o tráfego |
|
|
|
|
|
### Parte 2 - Criação do cluster
|
|
### Parte 2 - Criação do cluster
|
|
|
|
|
|
Inicialmente é necessário definir quais portas das VMs estarão expostar na internet:
|
|
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
|
|
1. Acessar o painel do serviço **EC2** no console da AWS
|
|
2. No menu lateral, acessar **Security Groups**
|
|
2. No menu lateral, acessar **Security Groups**
|
|
3. Clicar em **Create Security Group*
|
|
3. Clicar em **Create Security Group**
|
|
4. Inserir um nome (ex.: `swarm-sg`), descrição e selecionar a VPC criada (ex.: `swarm-vpc`)
|
|
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:
|
|
5. Na seção **Inbound Rules** acrescentar as seguintes regras:
|
|
- **type** `HTTP` e **origin** `0.0.0.0/0`
|
|
- **type** `HTTP` e **origin** `0.0.0.0/0`
|
... | @@ -65,13 +69,14 @@ Inicialmente é necessário definir quais portas das VMs estarão expostar na in |
... | @@ -65,13 +69,14 @@ Inicialmente é necessário definir quais portas das VMs estarão expostar na in |
|
- **type** `All UDP` 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** `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** `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**
|
|
6. 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:
|
|
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
|
|
1. Acessar o painel do serviço **EC2** no console da AWS
|
|
2. No menu lateral, acessar **Launch Templates**
|
|
2. No menu lateral, acessar **Launch Templates**
|
|
3. Clicar em **Create Launch Template*
|
|
3. Clicar em **Create Launch Template**
|
|
4. Inserir um nome (ex.: `swarm-template`) e descrição
|
|
4. Inserir um nome (ex.: `swarm-template`) e descrição
|
|
5. Na seção **Amazon Machine Image** selecionar `Amazon Linux 2 AMI`
|
|
5. Na seção **Amazon Machine Image** selecionar `Amazon Linux 2 AMI`
|
|
6. Na seção **Instance Type** selecionar o tipo `t2.micro` (*free tier*)
|
|
6. Na seção **Instance Type** selecionar o tipo `t2.micro` (*free tier*)
|
... | @@ -91,26 +96,73 @@ service docker start |
... | @@ -91,26 +96,73 @@ service docker start |
|
sudo usermod -a -G docker ec2-user
|
|
sudo usermod -a -G docker ec2-user
|
|
```
|
|
```
|
|
|
|
|
|
Por fim, vamos executar as VMs a partir do modelo criado:
|
|
Por fim, vamos executar os nodos a partir do modelo criado:
|
|
|
|
|
|
1. Acessar o painel do serviço **EC2** no console da AWS
|
|
1. Acessar o painel do serviço **EC2** no console da AWS
|
|
2. No menu lateral, acessar **Launch Templates**
|
|
2. No menu lateral, acessar **Launch Templates**
|
|
3. Selecionar o modelo criado (ex.: `swarm-template`) e, em **actions**, selecionar **Execute From Launch Template**
|
|
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`)
|
|
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`)
|
|
5. Clicar em **Execute From Launch Template**
|
|
5. Clicar em **Execute From Launch Template**
|
|
|
|
|
|
### Parte 3 - Configuração do cluster
|
|
### 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*:
|
|
$ ssh -i ages-winter-2021.pem ec2-user@<ipv4-publico-ec2>
|
|
|
|
|
|
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
|
|
|
|
```sh
|
|
|
|
# acessar via SSH
|
|
|
|
$ ssh -i <certificado> ec2-user@<ipv4-publico-ec2>
|
|
|
|
|
|
|
|
# iniciar a nodo como mestre Swarm
|
|
$ docker swarm init
|
|
$ docker swarm init
|
|
$ docker swarm join --token <swarm-token> <swarm-master>
|
|
|
|
```
|
|
```
|
|
|
|
5. Nomear esta máquina de `swarm master` no menu **Instances**
|
|
|
|
6. Para as demais instâncias (caso existam), executar:
|
|
|
|
```sh
|
|
|
|
# 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
|
|
### Parte 4 - Execução das aplicações
|
|
|
|
|
|
TODO
|
|
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:
|
|
|
|
|
|
|
|
```sh
|
|
|
|
# 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!! :tada: :clap: :rocket:
|
|
|
|
|
|
## Links interessantes:
|
|
## Referências:
|
|
|
|
|
|
- https://medium.com/@fidelissauro/docker-swarm-02-quickstart-do-seu-cluster-de-ec2-na-amazon-aws-com-docker-1394d365cb04 |
|
- [Swarm overview](https://docs.docker.com/engine/swarm/)
|
|
\ No newline at end of file |
|
- [Swarm route mesh](https://docs.docker.com/engine/swarm/ingress/)
|
|
|
|
- [Swarm overlay network](https://docs.docker.com/network/network-tutorial-overlay/)
|
|
|
|
- [Swarm em EC2](https://medium.com/@fidelissauro/docker-swarm-02-quickstart-do-seu-cluster-de-ec2-na-amazon-aws-com-docker-1394d365cb04) |
|
|
|
\ No newline at end of file |