Instalando o Terraform e criando seu primeiro objeto no Azure

Hoje vamos dar os primeiros passos no mundo da Infraestrutura como um Código, a.k.a. IaC, fazendo a instalação local do Terraform, autenticando no Azure via cli e criando o primeiro objeto no Azure.

O Terraform faz uso do HCL (Hashicorp Configuration Language) e a sua sintaxe foi muito baseada na libucl.

Para falar sobre o Terraform (como funciona, detalhes, componentes, divisões, etc), eu poderia criar uma série apenas para isso, mas não é a ideia aqui. Vamos colocar a mão na massa direto.

Passo 1: Instalando o Chocolatey & Terraform

Para instalar o Terraform no Windows, antes, precisamos instalar o Chocolatey antes (que é um gerenciador de pacotes do windows). Você pode rodar tudo em uma linha (lembre-se de executar como administrador, senão vai dar erro), mas se quiser, rode os 3 comandos separadamente:

Instalado o Chocolatey, vamos instalar o Terraform:

Uma recomendação… Coloquem o Terraform no Path, para não precisarem ficar copiando o executável a cada novo projeto.

Passo 2: Instalação do Azure CLI

Pelo print acima, vocês devem ter notado que eu já estava com o CLI habilitado, mas o que vocês devem rodar no terminal (mais uma vez, como administrador):

O que essa linha fará:

  • Baixar o instalador do AZ CLI
  • Executar em modo silencioso
  • Remover o instalador

Passo 3: Autenticar no Azure

Para se autenticar no Azure, você deve executar o comando:

(Caso dê erro, feche o terminal, abra novamente e reexecute o comando)

Ao digitar o az login uma página abrirá para você se autenticar no Azure… Coloque seu usuário, sua senha e o retorno será de um json com os dados das assinaturas que a conta tem acesso. Algo mais ou menos assim:

Caso apareça várias subscriptions e você queira se conectar em alguma em específico, use o seguinte comando:

Não vai ser nesse post que eu vou falar sobre a criação de um Service Principal específico para o Terraform e como configurar as variáveis de ambiente para fazer uso dele… Isso vai ficar para um outro momento, mas tenham isso em mente quando forem desenvolver, fechado?

Passo 4: Criar o Resource Group

Feita toda a função… chegou a hora de brincarmos com o HCL!

Aqui, nós temos duas opções…

  1. Criar um único arquivo e fazer o deploy. (Meh)
  2. Organizar em alguns arquivos e fazer um deploy “diferente”

É óbvio que vamos para a segunda opção… 😉

Vamos criar os seguintes arquivos:

  • providers.tf

Com a opção required_version, é possível determinar uma versão mínima para o funcionamento do Terraform. No meu caso, coloquei a versão 1.1.0. Veja o que acontece se, ao invés de ‘>=1.1.0‘, eu tivesse colocado um ‘=1.1.0‘ (informando que eu só posso executar o script com esta versão em especial:

Spoilers de execução do Terraform…

Com o required_providers, eu informo quais o providers eu vou utilizar no projeto. Neste caso, será o azurerm e a versão última versão a partir da 3.10.0 (para mais informações, veja sobre version-constraints)

No bloco provider eu determino as configurações de cada provider que eu vou utilizar. Neste caso, eu vou usar o provider azurerm e vou utilizar as opções padrão.

  • variables.tf

A ideia aqui é mostrar a possibilidade de criarmos algumas opções caso se queira aproveitar alguma informação mais adiante, como por exemplo, um prefixo ou então a localização que iremos colocar o nosso ambiente:

  • main.tf

Aqui é onde vamos criar os recursos propriamente ditos.

Talvez você esteja se perguntando de onde saiu esse random_pet né? Dê uma olhada aqui.

A ideia é que, usando o provider random, você possa construir recursos usando nomes aleatórios, crie senhas, número inteiros, uuids, etc.

Em resumo: Primeiro determinamos o nome do nosso recurso (que aqui ficará como rg-dev) e, em seguida, a gente consiga criar o Resource Group usando as informações acima.

  • output.tf

Vamos criar agora um arquivo apenas para podermos validar como os dados ficaram, no final.

Passo 5: Executando o Terraform

Ufa! Agora, vamos para a parte massa… Vamos ver a coisa toda rodando.

Primeiro, devemos inicializar o projeto:

Agora, devemos validar se está tudo de acordo e planejar:

Veja que o plan criou um passo a passo do que será feito, avisando sobre a criação dos recursos e informando que alguns dos nomes serão conhecidos apenas no momento da criação, pois será criado dinamicamente.

E por último (mas não menos importante):

Apenas como observação… Notem que é preciso realizar uma confirmação para realizar o processo e, logo em seguida, ele já retorna o valor do Resource Group criado.

Vamos ver se deu certo? Vamos no Portal do Azure e ver os Resources Groups:

E voi lá, temos o nosso primeiro objeto criado usando IaC.

Caso queira destruir o que fez, ainda via Terraform, basta rodar um terraform destroy e confirmar a operação. Levou pouco mais de um minuto para mim nos testes. Eu não vou rodar, pois quero usar esse mesmo RG para os próximos passos.

Próximos passos:

  • Criar novos objetos.
  • Configurar o Service Principal
  • Colocar no git ou no DevOps para pensar em CI/CD

Caso queira acompanhar as evoluções, estou colocando as alterações no meu github:

Mas claro que toda nova manutenção, informarei em um novo post por aqui (saindo a primeira série de 2022?).

[]’s!!

2 comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.