Alura > Cursos de DevOps > Cursos de Infraestrutura como Código > Conteúdos de Infraestrutura como Código > Primeiras aulas do curso Infraestrutura como código: Terraform, Docker e Elastic Container Service

Infraestrutura como código: Terraform, Docker e Elastic Container Service

Iniciando o projeto - Apresentação

Olá, eu sou Leonardo Sartorello e vou ser seu instrutor nesse curso de infraestrutura com código.

Para começar, o que vamos aprender? Vamos dar uma olhada no ECS ou no Elastic Container Service, que é um serviço da AWS onde podemos colocar container do Docker para executar a nossa aplicação. Ele é um mais escalável do que o BizTalk, que já utilizamos anteriormente, porém ele tem algumas coisas diferentes nas quais vamos dar uma olhada.

Nós também vamos repassar em cargos e permissões nos conjuntos do IAM que é são uma parte muito importante e essencial para conseguirmos mexer no Cloud hoje em dia. E por fim, vamos falar de Módulos, que são partes de programação que são parecidas com bibliotecas em outras linguagens. Eles permitem com que consigamos executar a nossa aplicação de forma mais rápida e gastando menos tempo no desenvolvimento da nossa infraestrutura.

Nós vamos utilizar como ferramentas o Docker, que é o nosso container, e o Terraform que vai cuidar de criar a nossa infraestrutura e também de fazer as configurações para a nossa infraestrutura. Nós vamos subir isso na AWS, que é uma das maiores provedores de Cloud atualmente.

Esse curso é um curso focado em IaC, se você já está estudando IaC há algum tempo esse curso é para você desde que você já tenha feito o curso que é pré requisito desse daqui, já que tratamos de alguns assuntos que já tratamos anteriormente.

Ao fazer esse curso você vai conseguir colocar imagens no OCR, que é o repositório de containers da AWS, você vai conseguir configurar alguns cargos e permissões na AWS para conseguirmos colocar a nossa aplicação. E você vai conseguir trabalhar com o módulos, que são, como eu disse anteriormente, como se fossem bibliotecas das linguagens de programação, que acelera o desenvolvimento e diminui a nossa taxa de erros. Por fim, vamos fazer o deploy da nossa aplicação para começarmos a fazer alguns testes.

Você ficou interessado? Eu fiquei, vamos lá.

Iniciando o projeto - Provedores

Lá atrás vimos a Ana que estava fazendo o TCC dela e queria usar a infraestrutura como código para acelerar o processo de desenvolvimento da sua aplicação. Agora que ela já se formou ela decidiu criar uma startup e colocou a aplicação que estava em desenvolvimento para a produção, assim ela pode começar a ter novos clientes e começar a responder requisições.

Essa aplicação foi adicionada para contêineres Docker, já que os contêineres rodam os mesmos projetos, porém em ambiente isolado e já preparado, além de ter fácil portabilidade entre provedores.

A Ana também sabe que a AWS, que o provedor ela tem mais familiaridade, disponibiliza o ECS, que é o Elestic Container Service ou Serviço Elástico de Contêineres, para que seja possível executar aplicações do Docker dentro da AWS. Vamos ajudá-la?

Para isso vamos começar aqui criando o nosso projeto. E para iniciar o nosso projeto precisamos de uma pasta para organizar nossos arquivos, vamos a mesma estrutura de pasta que já usamos nos outros cursos. Que é uma pasta para infraestrutura, que vamos chamar de “Infra”, e uma pasta para os novos ambientes, a pasta “env” que é de environment ou ambientes. Neste caso as duas na pasta padrão do nosso projeto.

Dentro da pasta de ambientes vamos criar a nossa pasta de produção “prod” que vai ser onde vai colocar os códigos da aplicação em produção. Aqui também podemos criar outros ambientes como desenvolvimento e homologação. Homologação sendo ambientes de testes que vamos ter logo que terminarmos de desenvolver a nossa aplicação.

Criamos as nossas pastas e vamos começar já colocando as informações dos nossos provedores, no caso da AWS. Para isso eu vou vir aqui no site do Terraform, vou entrar no menu e vou entrar em "Tutoriais", aqui temos os tutorias para iniciar com a AWS, eu vou entrar nesse tutorial e eu vou entrar direto "criando infraestrutura* ou “Build Infrastructure - Terraform AWS Example”.

Aqui vai ter o nosso código base que vamos poder utilizar para podermos começar a criar os códigos da AWS, que é esse trecho de código, são: Terraform, o Providers, algumas configurações do Providers e o Providers AWS com configurações dele também.

Eu vou copiar esse trecho de código, vou voltar para o nosso código na pasta de infraestrutura e já vamos criar um novo arquivo que eu vou chamar de “Provider.tf”. Tudo o que formos colocar relacionado a Provider vai ficar aqui dentro. Temos aqui uma estrutura de Provider para podermos começar com a AWS.

Outro ponto importante para podermos começarmos a fazer nossa aplicação é preparar o back-end da aplicação. Vamos dar olhada em como podemos fazer esse back-end.

Eu vou utilizar aqui o back-end que usamos no último concurso. Para configurar nosso back-end do Terraform eu vou pesquisar: “terraform backend s3”, ele vai trazer aqui no próprio “Terraform.io”, que é o site do Terraform, e ele vai trazer um exemplo de configuração. Eu vou copiar aqui esse exemplo, voltar no meu código e agora eu vou criar o meu back-end.

O meu back-end vai ficar dentro da pasta de ambiente, cada ambiente tem o seu back-end. Vamos criar um novo arquivo, eu vou chamar o arquivo de “Backend.tf”, vamos colocar aqui e agora para o nome de bucket, o nome de quê e a região que vamos usar, vamos usar os mesmos parâmetros que utilizamos no último curso.

O bucket é bucket = “terraform- state-alura”, o key ou qual vai ser o arquivo que vamos guardar dentro desse bucket no back-end, vamos guardar dentro de key = "Prod/terraform.tfstate" e a região que estamos usando a mesma região do nosso projeto, é region = us-west-2.

Pronto temos as configurações necessárias para começarmos a criar nosso projeto. Agora a nossa próxima parte vai ser criar o nosso repositório onde vamos deixar a nossa imagem do Docker.

Iniciando o projeto - Repositório Docker

No caso de aplicação da Ana, que já foi colocada em imagem do Docker, é interessante que essa imagem fique disponível em um repositório, assim não precisamos nos preocupar com a disponibilidade e nem em perdermos essa imagem.

Para criarmos esse repositório vamos na documentação do Terraform e vamos dar uma olhada em quais são os campos obrigatórios para podermos criar. Essa documentação vamos conseguir achar pesquisando por “Terraform” o recurso que queremos, no nosso repositório da AWS chama ECR que é o Elastic Container Repository. Vamos dar uma olhada nele.

Temos aqui o recurso do ECR e precisamos descrever com recurso, no caso aws_ecr_repository, que é o repositório do ECR, o nome lógico, e alguns campos. Vamos dar uma olhada. O nome é um campo obrigatório, algum tipo de interpretação, não, de criptografia não é necessário, não é necessário image-tag_instability não precisa, é opcional. Se colocarmos o image_scarning_confuguration p scan_on_push é obrigatório colocarmos, mas se não colocarmos é opcional. E tags também são opcionais.

Só precisamos de um nome para esse repositório. Vamos copiar o recurso até a parte do nome só resource "aws_ecr_repository" "foo" { name = "bar" }, vamos voltar no nosso código e vamos criar esse repositório no código. Para isso eu vou criar um novo arquivo dentro da pasta de infra que vou chamar de “ECR.tf” e tudo relacionado ao ECR vai ficar dentro desse arquivo. Vamos colocar aqui e fechar as chaves.

Agora precisamos configurar o nome, tanto nome lógico quanto o nome da AWS. No nosso caso o nome lógico eu vou chamar de repositório, resource "aws_ecr_repository" "repositorio" { só para conseguirmos identificar com facilidade.

E o nome na AWS ao invés de usarmos um nome fixo vamos usar uma variável aqui para termos um pouco mais de controle em cada ambiente que formos fazer. Eu vou criar aqui ao invés de um nome fixo, vamos usar uma variável name = var.nome_repositorio.

Temos o nosso repositório pronto, porém precisamos iniciar essa variável em algum lugar. Para isso vamos de novo criar um novo arquivo que eu vou chamar de “Variaveis.tf” e aqui vamos colocar todas as nossas variáveis, vamos começar com essa: variable "nome_repositorio" {, e ela tem que ter um tipo dentro dela para sabermos se é uma string, se é um número, se é um booleano e assim por diante.

O tipo dentro dela podemos escrever como type e nesse caso vai ser uma string, type = string }.

Já conseguimos criar o nosso ECR e já temos a variável de nome desse ECR. Vamos subir até agora aqui a nossa aplicação para conseguirmos criar esse ECR e colocar a nossa imagem lá dentro. Para isso eu vou na nossa pasta de ambiente novamente, criar um novo arquivo que vou chamar de “Main.tf”.

Lembrando que os arquivos do Terraform podem ter qualquer nome, não precisa ser um nome específico para cada arquivo. Podemos colocar tudo em um arquivo só ou separar como estou fazendo que fica um pouquinho melhor para acharmos cada recurso depois.

Aqui no “Main,tf” vamos criar um módulo que vamos chamar de module “prod” de produção, vamos colocar o infra como source = "../../infra". Estamos aqui dentro da pasta de produção, precisamos voltar uma pasta, dois pontos barra e estamos na pasta de ambiente, dois pontos barra e estamos na nossa pasta principal do nosso projeto, agora podemos entrar na pasta “infra” e temos o source do nosso projeto.

Agora aqui podemos começar a colocar os valores das variáveis que criamos. nome_repositorio =, agora precisamos de um nome para esse repositório e vamos chamá-lo de produção e como é uma string tem que ser entre aspas e para evitar problema de compatibilidade também vamos evitar acentos e cedilha, vai ficar nome_repositorio = "producao”.

Está tudo pronto para criarmos o nosso repositório, vamos criá-lo e acabar com essa tarefa de uma vez por todas. Vamos vir aqui no nosso terminal, eu estou na pasta raiz do nosso projeto, eu preciso ir para a nossa pasta de ambiente que é “cd” a pasta “env” de environment e depois a pasta “prod” de produção, cd env/prod/. Vamos entrar aqui, dar o nosso terraform init para começarmos a trazer todos os nossos módulos que estamos utilizando, preparar nosso provider, fazer todas as configurações iniciais para o Terraform.

Agora com as configurações prontas podemos criar o nosso repositório em si, terraform apply. Vamos dar um "Enter" e agora ele vai ver o que temos de diferente entre o que queremos porque criamos, e o que temos hoje na AWS. Tem uma coisa diferente só que é o nosso repositório, vamos dar yes que ele pede aqui para podermos criar, vamos dar um "Enter". E como é um único recurso vai ser vai ser bem rapidinho para ele criar para nós.

Já criou, demorou 2 segundos só para criar o repositório, mas esse tempo pode variar um pouco, depende da sua conexão, como é que está a situação da AWS no momento, se eles estão com mais ou com menos carga, pode ter uma variação.

Vou limpar mais uma vez aqui e vamos aproveitar e colocar a nossa imagem do Docker que já temos aqui nesse repositório, vamos olhar as imagens do Docker que já temos: docker images.

Temos uma imagem que já está pronta para esse repositório, uma imagem de produção e duas imagens do Python. Vamos subir essa imagem que já está pronta para o nosso repositório. Se você quiser saber como essa imagem foi criada, dê uma olhada no último curso, no curso que é pré-requisito desse curso aqui, onde passamos por todos os processos para criarmos essa imagem.

Para subir essa imagem para o nosso repositório vamos ao nosso navegador e vamos pesquisar novamente: “docker push aws ecr”, que é o comando que queremos fazer, e queremos colocar no AWS ECR. Vamos pesquisar e já aparece para fazer o push da nossa imagem em Docker para o ECR da AWS.

Documentação da AWS, o que é uma ótima fonte para vermos o que temos que fazer, e ele diz que temos que começar fazendo o docker login no nosso repositório. Podemos copiar aqui essa linha de comando clicando no botão do lado e vamos ter que substituir alguns pontos, entre eles a região, o aws account id e a região aqui nesse outro ponto também.

Se você já executou esse comando antes no seu terminal, podemos usar as teclas "Ctrl + R" para pesquisar por ele, eu vou pesquisar por docker login e ele já vai carregar para mim o comando que está certinho como queremos, vamos só conformar. A us-west-2, está o ID da minha conta, a sua conta vai variar um pouco esse ID e a região novamente. Eu vou dar o "Enter" para ele executar esse comando e enquanto isso vamos dar uma olhada em qual é o próximo comando que precisamos executar.

Precisamos ver a docker image, colocar uma tag que é trocar o nome da nossa imagem porque já temos a nossa imagem pronta para subir, e dar o docker push na nossa imagem com o nome dela com já está, vamos lá. docker images, vamos olhar a nossa imagem que é essa daqui. De novo, se você não viu como fazemos para colocar esse tipo de nome na imagem, olhe o curso que é pré-requisito desse porque já passamos por isso lá naquele curso.

Em seguida o docker push na imagem, dois pontos e a tag, queremos a v1. Agora aqui ele vai colocar a nossa imagem no repositório, é uma imagem um pouco grande por isso vai demorar um pouco. Assim que ele terminar de colocar essa imagem no repositório eu volto aqui para podermos continuar.

A nossa imagem acabou de subir aqui para o repositório que criamos e podemos ter certeza disso porque ele dá para nós aqui o nosso digest, que é uma ref, que é número que sempre vai mudar dependendo do que você fizer e ele dar esse número grande que é o número de referência. Não precisamos guardar, mas é uma confirmação que deu tudo certo. Agora podemos partir para o próximo tópico que vai ser sobre as VPCs ou a Virtual Private Cloud.

Sobre o curso Infraestrutura como código: Terraform, Docker e Elastic Container Service

O curso Infraestrutura como código: Terraform, Docker e Elastic Container Service possui 123 minutos de vídeos, em um total de 53 atividades. Gostou? Conheça nossos outros cursos de Infraestrutura como Código em DevOps, ou leia nossos artigos de DevOps.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Infraestrutura como Código acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas