Breve guia de sobrevivência com Terraform

Photo by Dave on Unsplash

Breve guia de sobrevivência com Terraform

Aviso 1: Esse blog post provavelmente vai ser atualizado no futuro.

Aviso 2: Tentei adicionar o máximo de referências em português(Brasil), mas infelizmente a maior parte está escrita em inglês. Aviso 3: Esse blog post vai ser migrado para um repositório do Github, assim fica fácil mandarem sugestões :) https://edsoncelio.github.io/guia-rapido-terraform-ptbr/

Só pra recapitular, o que é o Terraform mesmo?

Baseado na definição da Hashicorp (em uma tradução literal):

O Terraform é uma ferramenta de infraestrutura como código criado pela Hashicorp que permite definir recursos locais e/ou em nuvem em arquivos de configuração legíveis por humanos que você pode versionar, reutilizar e compartilhar. Você pode então usar um fluxo de trabalho consistente para provisionar e gerenciar todo ciclo de vida da sua infraestrutura. A linguagem usada para escrever esses arquivos é o HCL (Hashicorp Configuration Language), mas também pode ser usado JSON.

Mais detalhes e a definição completa, você pode ver aqui.

Por onde começar?

É possível começar com os tutoriais oficiais na plataforma da Hashicorp, ao menos para casos de uso mais comuns (com provedores de nuvem) tem bastante coisa:

Também existem alguns cursos/tutoriais gratuitos no Youtube em português(Brasil), como:

Outras recomendações no Youtube, em inglês:

E por último, e não menos importante, para quem gosta de livros, deixo a recomendação do Terraform Up & Running.

Agora que já sei usar (ao menos o básico), onde posso aprender as melhores práticas?

A forma de uso do Terraform muitas vezes varia de organização pra organização, mas existem alguns guias que valem a pena serem seguidos (ou ao menos adaptados para a criação de uma melhor prática interna):

Também existem algumas ferramentas/utilitários que ajudam a fazer o enforcement (garantia) dessas melhores práticas, como por exemplo:

  • Conftest: utilitário para escrever testes estruturados (políticas) usando o Open Policy Agent.

  • Pre-commit Terraform: git hook com alguns plugins para Terraform, ajudam a garantir que está tudo dentro do esperado antes do push para o repositório.

¹Valeu pelo lembrete desse link Pablo.

Aqui também é importante citar que existem dois grandes grupos em uma discussão infinita quando se fala em organização dos projetos no Terraform:

Recomendo ler sobre as duas opções e escolher a que traz mais benefícios para o seu cenário.

Se Terraform é infra como código, quais opções eu tenho para testar meu código?

O tópico testes de infraestrutura como código ainda tem muito a ser discutido/melhorado, mas até agora, as opções que temos disponíveis são:

  • Terratest: Framework de testes para Terraform, os testes devem ser escritos em Golang.

  • Kitchen Terraform: Plugins do Test Kitchen para testar código Terraform, testes devem ser escritos em Ruby.

  • Módulo Experimental de Testes: Recurso builtin experimental do Terraform que permite que os testes sejam escritos em HCL e executados com o comando terraform test.

Mais especificamente para AWS existe o localstack, que é basicamente um framework para simular algumas funcionalidades da AWS localmente.

Deixo aqui também um artigo bem interessante da Hashicorp sobre o assunto: https://www.hashicorp.com/blog/testing-hashicorp-terraform.

Existem ferramentas de segurança para fazer análise estática (ou algum outro tipo) do meu código Terraform?

Existem algumas ferramentas opensource que fazem análise estática e de erros de configuração no código e lint. As mais usadas:

  • tfsec: ferramenta para análise de código estático e erros de configuração em código Terraform.

  • checkov: ferramenta para análise de código estático de IaC (infra como código), serve também para CloudFormation, Kubernetes e outros.

  • tflint: Linter para Terraform, serve para avisar sobre problemas com sintaxe, erros nos principais provedores de nuvem, garantir boas práticas e outras coisas.

Algum material de referência relacionado a Terraform no pipeline de CI/CD?

Falando das plataformas de CI/CD mais usadas, todas tem workflows reutilizáveis para Terraform.

Uma outra abordagem é usar o Atlantis para automatizar a execução dos comandos via Pull Requests (Merge Requests).

E caso eu já tenha recursos criados (manualmente), consigo importar para código HCL?

Esse normalmente é um processo doloroso (dependendo da quantidade de recursos), mas existem alguns utilitários que podem ajudar nisso:

  • Terraformer: tem suporte para os maiores provedores de nuvem (GCP, AWS e Azure) e outros serviços (como PagerDuty).

  • Aztfy: importa especificamente recursos da Azure.

Comandos interessantes da CLI do Terraform

Outras ferramentas que podem ser úteis

  • Infracost: Estimativas de custos nos Pull Requests.

  • Tfswitch: ferramenta de CLI pra gerenciar versões do Terraform.

  • Terraboard: dashboard web para inspecionar states do Terraform.

  • Terraform Visual: ferramenta para ter visualização interativa das mudanças em um plan.

  • Terraform-docs²: utilitário para gerar documentação para os módulos Terraform.

  • K2tf³: utilitário para converter arquivos yaml do kubernetes para HCL.

  • IAM JSON para Terraform HCL³: utilitário para converter políticas IAM (AWS) em .json para HCL.

²: Valeu pelo lembrete Arielson
³: Valeu pelo lembrete Isac


Por agora é isso, provavelmente mais informações serão adicionadas no futuro :)

Did you find this article valuable?

Support edsoncelio.dev by becoming a sponsor. Any amount is appreciated!