Essas 5 BOAS PRÁTICAS em Terraform para Azure Estão Transformando a Infraestrutura em Nuvem! A #3 Vai SURPREENDER Você!

Cláudio Rapôso
4 min readSep 26, 2024

Infraestrutura como Código (IaC) permite que desenvolvedores e engenheiros de DevOps gerenciem ambientes de maneira automatizada e eficiente. Terraform é uma das principais ferramentas usadas para gerenciar a infraestrutura em ambientes de nuvem como o Azure. A seguir, discutimos boas práticas de programação com exemplos práticos utilizando exclusivamente Terraform no Azure.

· Versionamento de Código: A Base de Tudo
· Modularidade: Escalabilidade e Manutenção Simplificadas
· Testes Automatizados: Garantindo a Qualidade do Código
· Documentação: Comunicação Clara e Colaboração
· Reutilização de Código: Eficiência e Padronização
Benefícios do Uso de Módulo Separado no Git
· Conclusão: Adoção Contínua de Boas Práticas

Versionamento de Código: A Base de Tudo

Manter o controle de versões do código de infraestrutura é essencial para rastrear mudanças e colaborar eficientemente. Com Terraform, você pode versionar seus arquivos de configuração em um repositório Git, permitindo rastrear todas as alterações de infraestrutura.

Exemplo prático em Terraform:

Aqui está um exemplo de como versionar a criação de uma Virtual Network (VNet) no Azure:

provider "azurerm" {
features {}
}

resource "azurerm_virtual_network" "sertao_vnet" {
name = "sertao-vnet"
address_space = ["10.0.0.0/16"]
location = "East US"
resource_group_name = "sertaorg"
}

Esse código pode ser versionado usando Git, garantindo controle sobre as alterações feitas na infraestrutura. Ao usar GitHub Actions, você pode automatizar o deployment da VNet sempre que uma nova versão do código for commitada.

Ferramentas:

  • Git para versionamento de código.
  • GitHub Actions para automação de deployments.

Modularidade: Escalabilidade e Manutenção Simplificadas

A modularidade permite que diferentes componentes de infraestrutura sejam separados e reutilizados. Em Terraform, você pode criar módulos que encapsulam recursos de infraestrutura reutilizáveis.

Exemplo prático com módulos Terraform:

Aqui está um exemplo de como criar um módulo para provisionar uma Virtual Network (VNet) através de modulos.

Arquivo principal (main.tf):

module "network" {
source = "./modules/network"
vnet_name = "example-vnet"
address_space = "10.0.0.0/16"
resource_group_name = "sertaorg"
}

Módulo de rede (/modules/network/main.tf):

resource "azurerm_virtual_network" "vnet" {
name = var.vnet_name
address_space = [var.address_space]
location = "East US"
resource_group_name = "sertaorg"
}

Variáveis do módulo de rede (/modules/network/variables.tf):

variable "vnet_name" {
type = string
}

variable "address_space" {
type = string
}

Esse código modular permite reutilizar a configuração da VNet em diferentes ambientes, simplificando a manutenção e escalabilidade da infraestrutura.

Testes Automatizados: Garantindo a Qualidade do Código

Automatizar testes é crucial para validar se os recursos estão sendo provisionados corretamente. Com Terratest (integrado ao Terraform), você pode garantir que sua infraestrutura seja testada antes de ir para produção.

Exemplo prático usando Terraform com Terratest:

Aqui está um exemplo de como testar a criação de uma Virtual Network no Azure usando Terratest em Go:

package test

import (
"testing"
"github.com/gruntwork-io/terratest/modules/terraform"
"github.com/stretchr/testify/assert"
)

func TestTerraformAzureVNet(t *testing.T) {
terraformOptions := &terraform.Options{
TerraformDir: "../terraform",
}

defer terraform.Destroy(t, terraformOptions)
terraform.InitAndApply(t, terraformOptions)

vnetName := terraform.Output(t, terraformOptions, "vnet_name")
assert.Equal(t, "sertao-vnet", vnetName)
}

Documentação: Comunicação Clara e Colaboração

Documentar sua infraestrutura ajuda a manter o entendimento de como a configuração foi criada. Com Terraform, você pode incluir comentários no código para explicar decisões e práticas implementadas.

Exemplo prático com Terraform:

Aqui está um exemplo de um arquivo Terraform documentado para provisionar uma Virtual Network no Azure:

provider "azurerm" {
features {}
}

# Criação de uma Virtual Network no Azure
resource "azurerm_virtual_network" "sertao-vnet" {
name = "sertao-vnet"
address_space = ["10.0.0.0/16"]
location = "East US"
resource_group_name = "sertaorg"
}

Os comentários explicam cada seção do código, facilitando a colaboração entre equipes.

Reutilização de Código: Eficiência e Padronização

Reutilizar código de infraestrutura reduz o esforço duplicado e padroniza a configuração. Com Terraform, você pode criar módulos reutilizáveis para diferentes ambientes ou projetos.

Exemplo prático com reutilização de módulos Terraform:

Aqui está um exemplo de como reutilizar um módulo Terraform que provisiona uma Storage Account no Azure:

Módulo de Storage Account (github):

module "storage_account" {
source = "git::https://github.com/usuario/terraform-azure-storage-account.git?ref=v1.0.0"
storage_account_name = "sertaostorageacct"
resource_group_name = "sertaorg"
location = "East US"
}

este exemplo:

  • O parâmetro source aponta para o repositório Git onde o módulo de Storage Account está armazenado.
  • O ?ref=v1.0.0 define uma tag específica do repositório para versionar o módulo. Isso garante que você utilize uma versão estável do módulo e que as mudanças futuras não impactem o código existente.

Benefícios do Uso de Módulo Separado no Git

  • Reutilização: O módulo pode ser reutilizado em diferentes projetos sem duplicar código.
  • Versionamento: Ao utilizar tags, você garante que cada projeto utilize uma versão específica do módulo, evitando que mudanças futuras quebrem implementações atuais.
  • Facilidade de Manutenção: As atualizações no módulo são feitas em um único repositório e propagadas para todos os projetos que o utilizam.

Dessa forma, você promove boas práticas de modularidade, reutilização de código e versionamento em Terraform para o Azure.

Conclusão: Adoção Contínua de Boas Práticas

A aplicação das boas práticas de programação em IaC com Terraform no Azure melhora a eficiência, escalabilidade e manutenção da infraestrutura. Utilizando práticas como versionamento, modularidade, testes automatizados, documentação e reutilização de código, você pode assegurar que a infraestrutura siga padrões elevados de qualidade e controle.

No Azure, o uso exclusivo de Terraform para provisionar e gerenciar recursos facilita a implementação dessas práticas, permitindo que sua infraestrutura evolua de maneira consistente e segura.

--

--

Cláudio Rapôso
Cláudio Rapôso

Written by Cláudio Rapôso

Microsoft MVP | Software Architect | Teacher | Book Author | MCT | 12x Microsoft Certified Connect with me in https://www.linkedin.com/in/cfraposo

No responses yet