Gerencie vários ambientes do Terraform
Stephane Jourdan
30 de junho 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.
Como gerenciar a complexidade de ter vários ambientes do Terraform? Com diversos ambientes e possivelmente várias equipes, as coisas podem ficar complicadas. Neste artigo, vou mostrar como começar a gerenciar vários ambientes do Terraform como um profissional.
Comece com arquivos TF
Se você precisa gerenciar vários ambientes do Terraform, há muitas maneiras de aprimorar sua abordagem e começar.
Começar passo a passo com arquivos .tf individuais pode parecer uma tarefa intimidadora: no início, é difícil conhecer todas as boas práticas e talvez você acabe, na melhor das hipóteses, se distraindo e, na pior, desanimando. Então, você pode começar de forma bem simples, com um único TFState. Crie um arquivo simples do Terraform, chame-o de production.tf e escreva nele suas VPCs, máquinas virtuais ou o que precisar. Em pouco tempo, você poderá criar outro ambiente. Vamos chamá-lo de staging.tf. Ele ainda será um único arquivo de estado do TF, o que não é ruim, mas não vai escalar. Ainda assim, essa é uma forma de começar passo a passo.
Use workspaces do Terraform
A HashiCorp recomenda usar o que hoje chama de workspaces. workspaces é um subcomando do Terraform. Antes, ele se chamava environments.
O objetivo dos workspaces é separar um arquivo de estado do TF para cada ambiente. Digamos que você tenha ambientes de QA, staging e produção: usando esse subcomando de workspace do Terraform, você alterna entre os TFStates. Essa é a forma recomendada pela HashiCorp, mas isso não significa que você precise fazer exatamente assim.
Organize o repositório Git com pastas
Outra forma é dividir os arquivos de estado usando pastas, em vez de workspaces. Basta criar pastas no seu repositório Git, dar um nome a cada uma, como staging e production, e gerar arquivos TFState diferentes a partir delas. É muito fácil e, assim, você já estará usando ambientes separados em termos de TFState.
Módulos: uma forma comum de gerenciar ambientes do Terraform
O uso de módulos está se tornando um padrão. É um pouco mais avançado, mas, basicamente, os módulos funcionam recebendo variáveis, como strings etc. Eles são um recurso muito útil do Terraform.
Os módulos contêm código genérico. Vamos usar uma VPC padrão como exemplo. Essa VPC pode receber vários valores, como a sub-rede e um nome. Você pode criar duas pastas, uma para cada ambiente. O primeiro arquivo do Terraform especificará o espaço de endereços da VPC de staging, enquanto o outro especificará um espaço de endereços diferente. Assim, você resolve essa questão simplesmente passando valores diferentes para os módulos.
Essa é a principal forma que eu recomendaria para usar ambientes.
Comece de forma simples e nativa, com um único TFState; crie pastas diferentes e divida os estados entre elas; use módulos para passar diferentes tipos de valores; ou simplesmente siga as recomendações da HashiCorp, como usar workspaces.
Organize seus recursos e defina a estrutura de diretórios
Por fim, considere como você vai organizar seus recursos e a estrutura de diretórios. Você usaria um ou vários repositórios?
Não há uma única resposta, mas uma configuração comum é manter os módulos separados e chamá-los de um único repositório. Por exemplo: se você tem um módulo que sabe configurar corretamente uma VPC com base em duas variáveis, então tem um código Terraform adequado. Esse código pode ser armazenado em um repositório Git separado para Terraform, gerenciado, versionado e lançado como qualquer outro projeto. Mas ele não pode ser usado “como está”. Você ainda precisa que seu repositório de infraestrutura chame esse módulo, um pouco como se faz com uma biblioteca padrão na engenharia.
Para algumas pessoas, a hierarquia de pastas também é importante. É muito comum encontrar pastas de teste para todos os testes, pastas separadas para os módulos e outras pastas para os ambientes.
Outro padrão comum é usar arquivos de variáveis com todos os diferentes tipos de valores que você pode ter, para que os ambientes sejam enviados para execução usando essas variáveis de ambiente.
Proteja seu código do Terraform
Snyk IaC protege suas configurações do Terraform (e também modelos de Kubernetes, CloudFormation e ARM!) enquanto você programa, com correções guiadas para que você possa mesclar as alterações e seguir em frente. Teste enquanto escreve, monitore as mudanças nos seus repositórios Git e automatize os testes nos pipelines de build antes da implantação. Começar com um plano gratuito leva poucos minutos, enquanto uma violação causada por uma configuração incorreta de IaC pode gerar danos permanentes. Cadastre-se e comece a proteger suas configurações abaixo.
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.
