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: preparando máquinas na AWS com Ansible e Terraform

Infraestrutura como código: preparando máquinas na AWS com Ansible e Terraform

Fundamentos da IaC - Apresentação

Leonardo: Olá! Eu sou o Leonardo Sartorello. Boas-vindas a este curso!

Audiodescrição: Leonardo é um homem branco de cabelo castanho curto e cacheado, barba curta castanha, e olhos azuis. Ele veste uma camisa branca e, ao fundo, há uma parede clara iluminada em lilás.

Guilherme: Olá! Eu sou o Guilherme Lima, e junto ao Leonardo, serei seu instrutor neste treinamento de infraestrutura como código.

Audiodescrição: Guilherme é um homem branco de cabelo castanho curto e liso, barba curta castanha, e olhos castanho-escuros. Ele usa óculos de armação retangular preta e veste um moletom preto. Ao fundo, uma parede clara iluminada em lilás.

O que vamos aprender?

Guilherme: Neste curso, vamos aprender os fundamentos de infraestrutura como código, entender quais são os problemas que essa abordagem resolve e como utilizá-la de forma prática.

Leonardo: Vamos explorar esses conceitos por meio de duas ferramentas: Terraform e Ansible. Essas são as ferramentas que usaremos para configurar e gerenciar nosso ambiente.

Guilherme: Além disso, precisaremos de um serviço de nuvem para hospedar toda essa infraestrutura. Neste treinamento, focamos na nuvem da AWS.

Para quem é este curso?

Leonardo: Este curso é principalmente para pessoas que estão dando seus primeiros passos em infraestrutura como código e também com as ferramentas Terraform, Ansible e a plataforma AWS de forma geral.

Guilherme: Após concluir este curso, você será capaz de criar, gerenciar e controlar sua infraestrutura, seja em ambiente de desenvolvimento ou em ambiente de produção, por meio de código de forma prática, objetiva e muito mais simples.

Leonardo: Vamos começar?

Fundamentos da IaC - Infraestrutura

Guilherme: Vamos iniciar os nossos estudos de infraestrutura como código?

Infraestrutura como código

Primeiramente, vamos conhecer a história de Ana. Ana é uma estudante de tecnologia e está trabalhando no desenvolvimento de seu TCC. Um dos requisitos do TCC é disponibilizar o ambiente do projeto que ela está desenvolvendo.

Ana está muito feliz, porque tudo funciona perfeitamente em sua máquina. No entanto, quando Ana colocou seu projeto para rodar, não funcionou. Alguma coisa aconteceu e ela começou a pesquisar.

A partir das pesquisas, Ana descobriu que seu projeto precisava de algumas dependências e, por algum motivo, uma dependência não estava sendo atualizada.

Embora Ana tenha conseguido atualizar a dependência em sua máquina local, o projeto ainda não funcionava. Além disso, o projeto não funcionava no ambiente de deploy na nuvem.

Sendo assim, Ana precisou fazer um novo deploy de forma manual. Quando Ana atualizou a infraestrutura do ambiente de deploy, seu projeto finalmente funcionou.

Porém, toda vez que Ana precisar realizar uma modificação, atualização ou manutenção de código em seu TCC, ela precisará submeter um novo deploy manualmente. Isso é bastante arriscado.

A pergunta é: existe alguma forma de controlar nossa infraestrutura? Podemos controlar os módulos que precisamos? Os pacotes? O próprio ambiente, isto é, o sistema operacional em que faremos o deploy, de forma automatizada? A resposta é sim!

É possível automatizar o processo de deploy e entrega de software. Isso significa que você pode gerenciar toda a sua infraestrutura sem clicar em uma página ou executar comandos no terminal via bash, como Ana fez para atualizar seu projeto.

Conseguimos controlar toda a infraestrutura por meio de um código. Esse é um conceito chamado infraestrutura como código, que nós, juntamente com Leonardo, vamos explorar a seguir!

Fundamentos da IaC - O que é IaC?

Guilherme: Neste vídeo, vamos entender o que é infraestrutura como código (IaC). Leonardo, o que significa essa sigla?

O que é IaC?

Leonardo: A infraestrutura como código, também chamada de IaC, é uma forma que nós temos de escrever e executar código para definir, implantar, atualizar e gerenciar a infraestrutura.

Uma característica importante do IaC é que ele pode gerenciar servidores, bancos de dados, redes, arquivos de log, configurações de aplicativos, documentação, testes automatizados, entre outras coisas, por meio de código.

Guilherme: De volta ao exemplo da Ana, ela teria total controle de todo o ambiente dela, isto é, de toda a infraestrutura necessária para controlar o ambiente em que está, tudo isso feito com código.

A Ana conseguiria definir todo o ambiente dela com código. Imaginamos que esse código terá um histórico, para saber em qual atualização estamos, qual ferramenta já foi atualizada ou não, e assim por diante. Portanto, ela conseguiria fazer o deploy, atualizar e gerenciar todos os módulos e pacotes necessários para o projeto dela.

Porém, quais ferramentas podemos utilizar para criar esse ambiente todo com código?

Quais ferramentas são utilizadas para isso?

Leonardo: Para isso, existem algumas ferramentas. Entre elas, temos o Terraform, que permite criar, alterar e melhorar a infraestrutura de forma rápida e previsível.

Temos também o Ansible, que permite automatizar a instalação e a atualização de aplicativos dentro dos nossos servidores e também gerenciar algumas configurações, além de ferramentas de entrega contínua.

Além disso, temos outras ferramentas, como Chef e Puppet, que fazem a mesma função do Ansible, e o Crossplane, que funciona dentro do Kubernetes, também para gerenciar a infraestrutura.

Gerenciamento da infraestrutura com script em bash

Guilherme: Quando falamos de infraestrutura como código, se a Ana fizesse um script em bash com Python ou Ruby para gerenciar toda a estrutura dela, isso daria certo, Leonardo?

Leonardo: Até daria certo, mas é difícil manter isso a longo prazo, porque cada vez que criamos um script desse, cada um vai escrever de um jeito diferente.

Além disso, esses scripts dependem muito do ambiente em que são executados. Então, tentar executar esse script que criamos em outra máquina, pode ser que haja alguma diferença.

Também existe a convenção do código. Não necessariamente os scripts que criamos em bash, por exemplo, estarão escritos da mesma forma. Assim, torna-se difícil dar manutenção no futuro.

Há também a questão de atualização. Se estivermos usando a AWS e ela atualizar algum comando e precisar de outros parâmetros ou algo diferente, o nosso script precisará ser atualizado também, porque ele não estará pronto para essa atualização. As ferramentas feitas para IaC, como o Terraform, por exemplo, dão suporte a essas atualizações futuras.

Por fim, temos a questão da idempotência. O que essa palavra significa? Se executarmos várias vezes o nosso código, devemos ter certeza de que terá sempre a mesma saída, mesmo executando em uma máquina em que ele já foi executado anteriormente.

Guilherme: Então a ideia seria o seguinte: se criamos um script em Python e em bash, precisamos garantir que não estamos tentando atualizar duas vezes o mesmo pacote, para manter a infraestrutura funcionando de forma correta.

Isso seria um grande problema, e pensando nesse ponto, o Terraform seria a primeira ferramenta que a Ana usaria? Isso faz sentido, Leonardo?

Leonardo: Sim, faz bastante sentido.

Guilherme: E como ele funciona?

Como o Terraform funciona?

Leonardo: O Terraform funciona da seguinte maneira: nós escrevemos um script de configuração com uma linguagem específica do Terraform, uma linguagem simples que iremos utilizar.

Esse script será interpretado pelo Terraform e ele fará a "mágica" por trás, que na verdade não é mágica, mas sim código. Portanto, com o mesmo script, conseguimos subir a nossa infraestrutura em vários provedores. Ou seja, conseguimos subir na AWS, na Azure, no Google Cloud, entre outros.

Quais são os benefícios efetivos da IaC?

Guilherme: Temos bastante informação. Porém, quais são de fato os benefícios efetivos de utilizar a IaC, Leonardo?

Leonardo: Os benefícios efetivos de utilizar a IaC são os seguintes: primeiro, com a infraestrutura como código, conseguimos fazer um processo de deploy automatizado. Ele é mais rápido, porque o computador faz essas etapas melhor do que uma pessoa, tornando o processo mais seguro e consistente.

Temos também o controle de versão. Conseguimos guardar essas atualizações que fazemos no código de forma simples. E, se houver algum problema, conseguimos voltar para uma versão anterior da infraestrutura, evitando problemas com o nosso aplicativo fora do ar.

Além disso, temos velocidade e segurança, pois está tudo definido em um arquivo, que é fácil de ler, não só hoje, mas no futuro também. Ele vai executar sempre da mesma forma e da forma mais otimizada possível.

Por fim, temos o reuso. Conseguimos copiar blocos de código e reutilizá-los para fazer outras partes da nossa infraestrutura, deixando todo o processo um pouco mais ágil.

Guilherme: Uma coisa que me chamou a atenção nesse ponto dos benefícios, é a parte do controle de versão. Teoricamente, teríamos um estado de como está a nossa infraestrutura na versão 1.

De repente, atualizamos um pacote ou fazemos algo, e a própria ferramenta (nesse caso, o Terraform) saberia o que mudou, o que foi alterado, semelhante a um Git da infraestrutura.

Leonardo: Exatamente, Guilherme. E nós geralmente guardamos esses arquivos em um Git.

Conclusão

Guilherme: Visto isso, vamos começar a criar o primeiro código para manter e gerenciar toda a nossa infraestrutura!

Sobre o curso Infraestrutura como código: preparando máquinas na AWS com Ansible e Terraform

O curso Infraestrutura como código: preparando máquinas na AWS com Ansible e Terraform possui 119 minutos de vídeos, em um total de 37 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