4 dicas para gerenciar várias versões do Terraform
Stephane Jourdan
27 de maio de 2020
0 minutos de leituraNota do editor: Esta publicação foi publicada originalmente em CloudSkiff.com. A CloudSkiff se juntou à Snyk em outubro de 2021.
Há vários motivos para você precisar usar diferentes versões do Terraform localmente, como trabalhar com ambientes distintos (implantações estruturadas) que usam versões diferentes, atuar em vários projetos para clientes diferentes ou garantir a compatibilidade retroativa do seu código executando-o em várias versões. Confira algumas dicas bem básicas para manter várias versões do Terraform organizadas.
Comece usando localmente um gerenciador de ambientes e versões do Terraform
Usar um gerenciador de versões facilita muito o trabalho com várias versões do Terraform localmente e garante que:
A troca entre projetos seja rápida
O ambiente de desenvolvimento seja o mais parecido possível com o de produção.
tfenv é uma boa opção, inspirada no rbenv. Basicamente, o tfenv permite instalar uma versão específica do Terraform e defini-la como padrão. Ele também permite listar e acompanhar todas as versões do Terraform instaladas no seu notebook. Além disso, oferece alguns comandos práticos, como tfenv install min-required, que percorre recursivamente seus arquivos do Terraform para determinar a versão mínima necessária.
Defina explicitamente as versões do Terraform
As atualizações do Terraform podem causar problemas. E isso fica ainda pior quando surge uma exceção inesperada, que você não entende, e descobre que ela aconteceu porque está usando a versão errada do Terraform naquela máquina.
Ao definir explicitamente a versão necessária do Terraform, você receberá uma mensagem de erro clara se tentar executar um apply no ambiente errado.

Defina também as versões dos módulos
Mudanças são um dos maiores inimigos de quem programa, e isso também vale para a infraestrutura como código. Os módulos do Terraform oferecem muita reutilização e composição, mas também podem ficar difíceis de gerenciar.
Definir as versões dos módulos facilita controlar quando cada parte da sua infraestrutura será alterada após uma atualização de módulo. Assim, você tem a garantia de que, para um determinado commit na sua base de código, sempre fará a mesma implantação.
Isso também permite implementar atualizações de módulos gradualmente: você pode manter a versão antiga em produção, criar uma branch de desenvolvimento para atualizar o módulo, testá-la no ambiente de desenvolvimento e, se tudo funcionar, integrá-la à branch principal.
Quanto mais módulos você usa, maior a probabilidade de que algum deles cause um problema em algum momento — por isso, essa prática se torna cada vez mais importante à medida que sua base de código cresce.
Evite executar apply localmente e fazer commits na branch principal
Não se esqueça do seu fluxo de trabalho! Executar apply localmente pode ser perigoso quando duas pessoas colaboram no mesmo arquivo do Terraform: se duas atualizações forem feitas em sequência, a primeira poderá ser sobrescrita pela segunda. Além disso, nunca se sabe o que pode acontecer no seu notebook — já ouvimos histórias de arquivos de estado enormes que foram corrompidos por causa de uma queda na conexão Wi-Fi.
Por isso, um fluxo de trabalho mais adequado para produção recomenda executar apply somente em um sistema centralizado e com controle de versão, como um pipeline de CI/CD.
O próximo passo é incorporar esse comportamento ao processo. Por exemplo, as permissões de acesso de uma pessoa não devem permitir alterações diretas em produção. Somente as chaves de CI/CD devem ter essa permissão.
Da mesma forma, é muito tentador fazer merge na branch principal, embora saibamos que essa não é uma boa prática. Bloquear a branch principal incentiva a equipe a seguir um processo melhor e mais seguro, com pull requests e revisão. A menos que você seja sobre-humano, leia sempre o plano do Terraform e nunca cometa erros.
Algumas equipes adicionam etapas extras, como linting ou verificação de atualizações na documentação — um pequeno investimento para manter o código organizado a longo prazo.
Proteja seu código do Terraform
O Snyk IaC protege suas configurações do Terraform (e também seus templates de Kubernetes, CloudFormation e ARM!) enquanto você programa, com correções orientadas para que você possa fazer merge e seguir em frente. Você pode testar enquanto escreve, monitorar alterações nos seus repositórios Git e automatizar testes nos pipelines de build antes da implantação. Leva poucos minutos para começar com um plano gratuito, enquanto uma violação causada por uma configuração incorreta de IaC pode trazer danos permanentes. Cadastre-se abaixo e comece a proteger suas configurações.
Proteja a infraestrutura desde a origem
A Snyk automatiza a segurança e a conformidade de IaC nos fluxos de trabalho e detecta recursos com configurações divergentes ou ausentes.
