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: Docker e Elastic Beanstalk na AWS

Infraestrutura como código: Docker e Elastic Beanstalk na AWS

Configurações do projeto - Apresentação

Eu sou o Leonardo Sartorello, e vou ser seu instrutor nesse curso de Infraestrutura como código. Mas o que vamos ver durante esse curso?

Vamos dar uma olhada em Docker, principalmente em imagens e containers, para colocá-los do Cloud. Também vamos dar uma olhada em cargos e permissões, o que elas são e como podemos configurá-las. E vamos fazer tudo isso no ambiente do Beanstalk, que é o ambiente da AWS, que conseguimos colocar de forma razoavelmente rápida containers do Docker para serem executados.

Quais ferramentas vamos utilizar para poder fazer todas essas partes da nossa aplicação? Vamos utilizar o Docker para manejar as nossas imagens e colocar a nossa aplicação dentro de containers e também vamos utilizar o Terraform, tanto para criar quanto para configurar nosso ambiente do Beanstalk.

Onde vamos fazer tudo isso? Vamos fazer tudo isso na AWS, que é uma Cloud da Amazon e uma das maiores no mercado hoje em dia.

Para quem é esse curso? Esse curso é focado para aquelas pessoas que já estão estudando IAC e já fizeram o curso que está no pré-requisito desse.

Fazendo esse curso, o que vamos consegui fazer? Vamos conseguir colocar imagens do Docker no ECR, que é o repositório de containers da AWS, vamos entender e configurar corretamente o que são os cargos ou em inglês também chamado de roles, e o que são as políticas, ou as policies, que dão acesso aos nossos recursos.

E por fim, vamos fazer o deploy da nossa aplicação com o Docker no Cloud da Amazon. Ficou empolgado? Porque eu fiquei. Vamos começar?

Configurações do projeto - Provedores

Já trabalhamos bastante com EC2. Criamos máquinas virtuais para colocar nosso código, load balancers para distribuir a carga entre essas máquinas, e montamos uma estrutura elástica, sempre usando o Terraform para manejar nossa estrutura e o Ansible para fazer as configurações.

Lembrando que toda vez que fizermos algum tipo de atualização na nossa aplicação, temos que criar e configurar as máquinas inteiras novamente. Além disso, temos um problema de atraso na inicialização da máquina por conta da instalação de bibliotecas e programas necessários.

Sendo assim, se tivermos um aumento muito rápido de usuários, não conseguiremos acompanhar, já que pode demorar de 5 a 10 minutos para que consigamos criar e configurar nossas máquinas.

Para resolvermos esses problemas, podemos usar outra abordagem. Hoje em dia tem-se utilizado muito o Docker, onde todos os componentes do sistema já estão dentro da imagem do container. Dessa forma, você só tem que subir a máquina e executar o container. Porém, se configurarmos as máquinas EC2 manualmente para executar o Docker, acabamos entrando em um problema improdutivo.

Isso porque se torna necessário subir as máquinas, configurá-las para rodar o Docker e só então conseguiremos executar a aplicação. De acordo com a própria Amazon, que é dona da AWS, a maneira mais rápida de usarmos o Docker na AWS é através do Elastic Beanstalk, ou "pé de feijão elástico" em português.

Eu sei que o nome não soa muito atrativo, mas é uma ferramenta muito boa e interessante de se utilizar. Vamos começar a trabalhar com ela e finalmente colocar nossa aplicação na AWS dentro do container Docker?

Para isso, vou abrir o Visual Studio Code, já na pasta que usaremos no curso. Clicarei com o botão direito e criarei uma nova pasta. Começaremos criando nossos ambientes e arquivos de infraestrutura.

Para os ambientes, ou "environments" em inglês, criaremos a pasta "env". Para infraestrutura, criaremos a pasta "infra". Assim, manteremos os arquivos separados para podermos reutilizar a infraestrutura independentemente do ambiente.

Vamos criar dois ambientes: "homolog", o ambiente de homologação, onde colocaremos as aplicações em alpha ou beta para testarmos, buscarmos bugs e assim por diante; e "prod", o ambiente de produção, onde colocaremos as aplicações quando não encontrarmos nenhum problema.

Com as pastas criadas, começaremos a desenvolver nossa aplicação pela infraestrutura. Iniciaremos pelo provedor, ou "provider". Criaremos o arquivo provider.tf, onde colocaremos todas as configurações do provedor. Para conseguirmos essas configurações, pesquisaremos no Google por "terraform" e acessaremos o site http://terraform.io.

Na página, acessaremos a seção "tutorials" ("tutoriais"), seguida por "AWS", que é onde vamos subir a aplicação. Aqui encontraremos alguns passo-a-passos que poderemos seguir, começando por uma introdução ao que é a infraestrutura como código, instalação do Terraform e a construção da infraestrutura.

Vamos acessar "build infrastructure". Se você tiver algum problema com o conceito de infraestrutura como código, os cursos anteriores podem lhe ajudar. Já se tiver algum problema em relação à instalação do Terraform, o passo-a-passo estará na atividade "Preparando o ambiente".

O tutorial pedirá que criemos uma pasta, algo que já fizemos, e um arquivo main.tf dentro dela - que no nosso caso chamamos de providers.tf, já que colocaremos nele somente o código relacionado ao provedor. Mais adiante, o tutorial nos orienta a criar o módulo do nosso provider, com aquilo que iremos importar; a configuração desse provider; e uma instância de EC2, algo que não faremos.

Vamos selecionar os blocos terraform e provider "aws", copiá-los com "Ctrl + C" e colá-los em nosos arquivo provider.tf. Agora temos a configuração para executarmos a aplicação na AWS.

O provider pede um módulo maior que a versão 3.27, algo que a própria Hashcorp, dona do Terraform, fornece. Além disso, também precisa de uma versão do Terraform maior que a 0.14.9. Em nosso caso, estamos usando a versão 1.0 ou superior, então não precisamos nos preocupar. Salvaremos com "Ctrl + S", e a configuração do provider está pronta.

Configurações do projeto - Estado distribuído

Sempre que executamos o Terraform, acabamos criando um arquivo de estado, que guarda todo o estado da nossa infraestrutura para podermos comparar qual estado que queremos que a nossa infraestrutura tenha com qual ela realmente tem, para podermos criar o que está faltando nela.

E para podermos executar o Terraform em qualquer máquina, é interessante guardarmos esse arquivo em um local que possa ser facilmente acessado. Nesse caso, vamos guardá-lo no S3 da AWS, assim, ele fica disponível para nossa conta e não vamos perdê-lo caso troquemos de máquina, por exemplo.

Também é muito interessante fazermos isso, caso formos colocar algum tipo de rotina de CD, ou continuous delivery, em português seria “entrega contínua”, que assim temos esse estado sempre disponível para as nossas máquinas.

E para montar esse estado, para podermos guardar esse arquivo de estado, vamos ter que ir no console da AWS e criar um bucket por lá. Esse bucket vai funcionar como se fosse uma pasta, e vamos colocar o arquivo dentro dele. E infelizmente não vamos poder fazê-lo pelo Terraform, já que precisamos dele para o Terraform funcionar.

Então vamos lá. Eu vou abrir o meu console AWS, procurar o S3, entrar no S3, e eu vou criar um bucket, vou em “Criar bucket”.

O que vamos precisar colocar? O nome do bucket. Nesse caso eu vou colocar como “terraform-state-alura”, vou colocar state, porque queremos guardar o arquivo do TF-State ou o Terraform State, e Alura eu vou colocar porque o nome dos buckets precisa ser exclusivo. Ou seja, quando você for criar o seu, você não pode colocar esse mesmo nome, você vai ter que trocar esse nome para uma coisa que fique melhor para você.

Então por exemplo, “terraform-state-“ e você pode colocar o seu nome, o seu nome de usuário ou alguma coisa que você escolher, que você preferir. A região eu vou deixar o “US-west2”, que é a região que eu estou usando atualmente, e o resto eu posso deixar todo padrão. E ele vai estar disponível só para a nossa conta.

Eu vou criar esse bucket, vou esperar um pouco para ele criar, ele foi criado com êxito, e agora temos “terraform-state-alura”.

No momento ele está vazio, acabamos de criá-lo. Vamos ver agora como podemos integrar o Terraform para o Terraform guardar sozinho o arquivo dele aqui dentro. Para isso, eu vou abrir uma nova página e vou pesquisar por “Backend terraform s3”. E vamos dar uma olhada, nós temos um anúncio e embaixo temos o “terraform.io”, que é o site do Terraform.

Dentro dele temos um exemplo de configuração, ele já nos dá um exemplo. Vamos copiar e vamos voltar para o nosso Visual Studio Code. Onde vamos guardar esse arquivo? Temos guardar dentro dos nossos ambientes. Eu vou fazer no ambiente de produção. Então novo arquivo, eu vou chamar de “backend.tf”. E eu vou colá-lo dentro.

Então temos terraform, backend s3, bucket = “mybucket”, então eu preciso colocar o nome do nosso bucket. Vamos voltar no nosso console da AWS, e eu vou só copiar o nome que eu acabei de colocar “terraform-state-alura”, para não ter nenhum tipo de erro de escrita. Copia e cola, bucket = “terraform-state-alura”.

O caminho, ou seja, onde vamos guardar esse arquivo. No meu caso, eu vou guardar esse arquivo na pasta “Prod”, que é o mesmo do nosso ambiente key = “Prod/terraform.tfstate”.

E a região que está no meu bucket não é “us-west-1”, é region = “us-west-2”, foi onde eu criei o meu bucket, é só para ficar mais fácil de conseguirmos descobrir onde está o nosso bucket, apesar de que o bucket vai se autorreplicar para o mundo inteiro. Então lembrando mais uma vez, o nome do bucket tem que ser um nome exclusivo e ele é para o mundo todo. Então você não pode ter 2 buckets com o mesmo nome, mesmo estando em regiões diferentes.

Eu vou dar “Ctrl + S” para salvar esse arquivo, e agora temos o nosso backend, vamos salvar o nosso arquivo de estado, o nosso “tfstate” dentro de um bucket do S3 na AWS. E precisamos distribuí-lo mais fácil, para conseguir acessarmos de varias máquinas diferentes.

Sobre o curso Infraestrutura como código: Docker e Elastic Beanstalk na AWS

O curso Infraestrutura como código: Docker e Elastic Beanstalk na AWS possui 123 minutos de vídeos, em um total de 45 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