IAC e Terraform. O que é e porque são tão importantes? Ep.1
Published: 2024-05-03 16:35:25

Para falar de IAC ou infraestrutura como código, primeiramente precisamos abordar alguns assuntos e conceitos para entendermos a sua real necessidade. Vamos começar com a gerência de configuração e o movimento DevOps.

---

**GERÊNCIA DE CONFIGURAÇÃO E MOVIMENTO DEVOPS**

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ds0u5klxc4qkrp1dvqjd.png)



Existe um conceito super importante que vem lá do ITIL (Information Technology Infrastructure Library) que ajuda a gente entender a importância da utilização de infra como código, a gerência de configuração. A gerência de configuração pode ser resumida em um conjunto de atividades que viabiliza o controle das mudanças que acontecem nas diferentes etapas do nosso software.

E com essa prática a gente consegue identificar e documentar as características do nosso software, controlar as mudanças que vão ocorrer nele, registrar o estado em que ele se encontra, verificar a conformidade de acordo com os requisitos, e com isso a gente tem uma segurança no sentido da quebra do software.

Há um tempo atrás era essencial o preenchimento de uma GMUD (Um documento de gestão de mudanças) e isso era simple quando tínhamos ali um data center e esse data center possuia poucos servidores. Neste cenário o controle era fácil e as GMUD’s eram mais eficiêntes, mas quando temos uma escala grande de máquinas, com mais de 100 servidores, fica inviável, pois ao todo nesses servidores podemos ter uma quantidade de serviços absurda e controle fica super burocrático.

Pra ajudar a contornar essa burocracia o movimento DevOps veio para aproximar os precessos do pessoal de OPS com o pessoal de DEV e embora cada um tenha suas práticas, a necessidadade dessa integração trouxe atualizações na maneira de trabalhar, com versionamento de código, automações e entrega contínua. Com essas atualizações e a melhora na comunicação das equipes, a nuvem trouxe fortemenete a idéia da infraestrutura como código.

---

**IAC**

![photo by sun technologies](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wpaf9b0oacwtqt9y8gzw.png)

E o que é IAC? IAC como dito anteriormente é a prática de usar código para criar sua infraestrutura em cloud. Antes a gente abria o nosso console do provedor de nuvem e iamos clicando ou selecionando nos serviços e preenchendo os parâmetros para o funcionamento e agora, as boas prática recomenda o uso de infra as code.

_Mas porque fazer um código para criar um serviço, sendo que usar o console é mais fácil?_

Porque tudo que é manual muitas das vezes não é possível replicar. E quando a equipe que trabalha com essa nuvem é grande, gerenciar e controlar tudo o que foi criado fica mais complexo.

E as vantagens de usar IAC não são somente o controle e gerenciamento, podemos contar com o reuso do código, além da facilidade de criar e destruir ambientes o que nos ajuda quando apagamos algo por acidente ou quando ocorre um incidente como um ataque.


**FERRAMENTAS IAC**
E quando a gente fala de IAC, pensamos logo em algumas ferramentas que podem nos auxiliar nesta jornada. Cada ferramenta possui suas particularidade e são designadas para cada caso de uso específico e podem ser utilizadas em conjunto. As mais conhecidas são o ansible, chef, terraform e puppet.

_ANSIBLE_

O Ansible é uma solução de gerenciamento de configuração e automação. Com ele a gente pode projetar e gerenciar o estado que queremos de nosso sistema usando scripts YAML. A simplicidade do Ansible e a falta de necessidade de instalar software adicional no destino são dois de seus benefícios. Uma coisa bem legal do Ansible é o modelo sem agente que depende só da comunicação SSH para os nós gerenciados. Para usar a gente basicamente escreve um script que chamamos de playbook e nele definimos o que deve ser instalado e configurado.

_CHEF_

O Chef é uma ferramenta que tem um proposito super parecido com o do Ansible, mas ao ivéns de usar YAML, a gente tem o Domain Specific Language (DSL) escrita em Ruby. No Chef existe a necessidade da instalação de um agente no servidor de destino, o que não acontece no Ansible.

_PUPPET_

O Puppet é uma ferramenta super similiar ao Chef, e as 03 possuem o mesmo propósito de gerenciamento de configuração e definição do estado desejado do sistema. Assim como o Chef, o Puppet usa sua própria linguagem de domínio específico (DSL).

_CASO DE USO DESSAS FERRAMENTAS_

Vamos pegar um cenário onde temos 10 servidores e queremos instalar um editor de texto neles. Em vez de instalar esse editor de texto manualmente em cada servidor e seguir os procedimentos necessários para o funcionamento dele, você pode usar uma dessas ferramentas para fazer a instalação e configuração em todos os 10.

**TERRAFORM**

![Photo by The Workfall Blog](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3pm7a1xqjlsvcg7e1i1y.png)

Antes da gente falar sobre o terraform, vamos a uma curiosidade. O termo terraform vem de terraformar no latim, onde é terra é a terra mesmo e formar é moldar, criar. Geralmente é usado na ficção cientifica pra quando cria-se um planeta e o mesmo é habitável como a terra.

E a ideia do terraform é meio que isso também. Para usa-lo precisamos nos conectar a um provedor de nuvem e começar a criar os nossos recursos, a nossa infraestrutura (planetas).

Então, podemos falar que o terraform é uma ferramenta de IAC usada para criar a nossa infraestrutura, ao contrário das ferramentas que citei anteriormente que são focadas mais no servidor pra dentro. O que atrai muita gente para usar o terraform é sintaxe facil, uma comunidade bem ativa(open source) e a documentação dele bem completa.

_Porque usar terraform e não uma ferramenta nativa?_

Muitas pessoas quando vão começar usar IAC ficam na dúvida se começam a usar o terraform ou a ferramenta nativa do provedor de nuvem, e a resposta pra essa dúvida pode ser esclarecida de acordo com o seu cenário. Mas olha, a utilização do terraform comparado ao uso do cloudformation da AWS pode ser bem mais benéfica, visto que o terraform tem uma curva de aprendizado menor, suporta mais de 250 provedores atualmente. Com isso, conseguimos trabalhar com mais de um provedor usando a mesma ferramenta e acaba que não preciso ficar aprendendo uma ferramenta nova toda vez que vou mudar de cloud, preciso somente ver quais serão as particularidades de chamadas daquela outra cloud.

Desta forma a gente ganha tempo, podendo nos aprofundar em uma ferramenta só e o gerenciamento fica bem mais fácil.

Continua …