Terraform: O que eu gostaria de ter aprendido desde o começo

Este é o assunto da vez. Muito se fala sobre infraestrutura como código e muito se fala sobre a importância de se usar o Terraform para a automatização de processos morosos de deployment.

Apesar disso tudo, temos relativamente poucos contribuidores no Brasil e por conta disso quero dividir um pouco sobre justamente o que eu gostaria de ter aprendido desde o início sobre esta incrível solução.

É difícil

Eu não quero ser o cavaleiro do apocalipse mas a verdade precisa ser dita: Terraform é difícil de aprender e se você não tem familiaridade com lógica de programação você realmente vai enfrentar dias difíceis.

É muito comum você ouvir a parte boa:

Ah, mas com o terraform, você pode facilmente implementar em múltiplas clouds tudo o que você precisa!
Se você usa o terraform, você pode automaticamente documentar a sua infraestrutura!

Ninguém conta para você o esforço que é necessário assimilar: providers, modules, estruturas condicionais, de repetição, e, principalmente: o terraform não está realmente documentando a sua infraestrutura. Parece polêmico? Um pouco, mas preciso tirar um pouco do "falso otimismo" e da "promessa da ferramenta ideal".

Vamos começar do básico

Pois bem, vamos falar um pouco sobre coisas que eu realmente gostaria de ter aprendido desde o começo. Iniciando pelo fluxo básico de qualquer criação de infra com Terraform

Existem 3 comandos na CLI do terraform que você realmente precisa saber do começo:

  • terraform init
  • terraform plan
  • terraform apply

Porém são essenciais para você estes outros também

  • terraform validate
  • terraform fmt
  • terraform console

Os comandos init, plan e apply comandam o fluxo de inicialização do terraform, seus providers e plugins, construção do plano de execução e aplicação do plano de execução.

Compreender a natureza destes comandos e o propósito deles é o mínimo então realmente sugiro a você tirar 30 minutos para ler e compreender em detalhes como estes itens funcionam.

Os comandos validate e fmt por outro lado, desempenham um papel fundamental: enquanto validate testa a sintaxe do seu código, fmt garante que você está corretamente indentando e principalmente evitando que você use uma sintaxe descontinuada.‌

Por fim, mas não menos importante, temos o comando terraform console. Quem está começando agora com terraform subestima muito esta funcionalidade mas é essencial quando você de fato precisa ver o que o seu código está fazendo. Em linhas gerais, o terraform console abre uma console interativa, onde você pode sob demanda testar sintaxes, comandos e formatar dados que já foram escritos no seu terraform state sem de fato mudar o terraform state. Muito poderoso, não é?

Veja o exemplo a seguir:

Como você pode ver neste exemplo, até que não parece grande coisa. mas aí chegamos em formatos mais complexos como dynamic blocks ou variáveis de tipo map e aí realente vai ficando mais difícil, veja só:

‌Um caos né? Agora vem a importância de usarmos o comando terraform fmt. Veja como fica este último exemplo quando aplicamos o comando:

Agora sim! O código está perfeitamente legível para que outras pessoas possam entender mais rápido o que está acontecendo.

Só fazendo um parêntesis, eu mesmo já passei por isso com códigos que eu mesmo produzi. Não cometa o meu erro!

Aprenda git primeiro

E aqui eu não quero que você seja o mestre dos magos em versionamento de código, é entender o fluxo e os principais comandos do git, mesmo.

Não confunda git com Github. São coisas completamente diferentes!

De verdade, para quem quer de fato aprender sobre infraestrutura como código, precisamos nos adaptar para algo que os desenvolvedores mais iniciantes já são habituados: trabalhar com versionamento de código.

Hoje são inúmeras ferramentas que dão suporte ao git e você pode inclusive baixá-lo no seu computador gratuitamente. Dentre as principais plataformas eu destaco:

  • Github
  • Bitbucket
  • Azure Repos
  • Gitlab

Você pode até tentar usar o próprio navegador nestas plataformas para usar git, mas eu garanto para você que vai ser uma experiência limitada. Definitivamente não é um bom começo.

Por isso, aprenda git na prática! Existe uma plataforma fantástica para aprender git, inclusive com tradução 100% ao português Brasileiro!

Learn Git Branching
An interactive Git visualization tool to educate and challenge!
Clicar no link fará com que você saia da página.

Comece a usar o Visual Studio Code

Eu confesso que nunca fui muito fã de ficar usando uma IDE. Antigamente eu havia me aventurado em usar o Visual Studio mas ele era muito pesado para rodar no meu computador na época e acabei ficando bastante amigo do Notepad++.

Isso mudou quando conhecio Visual Studio Code. Acho que hoje já podemos considerar o Visual Studio como uma IDE completa, mas muito mais leve que o Visual Studio tradicional. Extremamente versátil ele tem praticamente tudo o que você precisa para sair codando sua infraestrutura no terraform.

Isso porque a principal vantagem do VS code é que você consegue não somente formatar o código de acordo com a linguagem que você está trabalhando, como também consegue fazer a instalação de extensões que vão tornar sua vida muito mais fácil.


Wrappers e Frameworks podem até ajudar, mas tome cuidado

Sim, o terraform puro está aí há um bom tempo e isso deu tempo para outras empresas buscarem alternativas para as limitações que o terraform traz. É o que acontece por exemplo com terragrunt ou terraspace. Eles foram criados para complementar coisas que o terraform não consegue, ou pelo menos não conseguia fazer nativamente nas suas versões pre-release.


Use o terraform, mesmo que você não tenha a necessidade

Sabe quando dizem que só a prática leva à perfeição? É disso que estou falando! Use o terraform, mesmo que você não precise. Tasks pequenas e que poderiam ser facilmente feitas pelo portal, procure exercitar como você construiria usando o próprio terraform.

Tentar buscar pelo "projeto perfeito" ou buscar pela "melhor oportunidade" pode ser um risco muito grande, porque você terá pouco tempo para aprender com os erros, e a tolerância a eles também será pequena. Passe a tornar o terraform como parte do seu dia-a-dia


Conclusão

Você acabou de ler sobre algumas experiências, aprendizados e desafios que passei nesses quase 18 meses usando terraform. Aproveite para deixar um comentário sobre como estão sendo as suas experiências e o que você também gostaria de ter aprendido antes de ter se aventurado com o terraform!

Até a próxima!