Terraform no Azure
Configure o provedor AzureRM do Terraform, escreva um plano básico de infraestrutura e compreenda quando preferir o Terraform às ferramentas nativas ARM/Bicep.
Terraform no Azure é uma aula grátis de Azure Fundamentals no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Azure Fundamentals, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Azure Fundamentals inclui 4 aulas no total.
O que é o Terraform e por que usar o Azure?
O Terraform é uma ferramenta de Infraestrutura como Código de código aberto desenvolvida pela HashiCorp. Ao contrário do Bicep, o Terraform é independente de provedor de nuvem — uma única base de código do Terraform pode gerenciar recursos no Azure, AWS, GCP e muitos outros provedores simultaneamente. No Azure, o Terraform usa o provedor AzureRM para interagir com a API do ARM, sendo uma escolha popular para organizações com várias nuvens.
O provedor AzureRM do Terraform
O provedor AzureRM é um plugin que o Terraform baixa e usa para traduzir a configuração do Terraform em chamadas à API do ARM. Ele é mantido pela HashiCorp e pela Microsoft e é a forma oficial de gerenciar recursos do Azure com o Terraform. Configure o provedor com o ID da sua assinatura e o método de autenticação e, em seguida, execute terraform init para baixá-lo.
# main.tf — configure the AzureRM provider
terraform {
required_providers {
azurerm = {
source = 'hashicorp/azurerm'
version = '~> 3.0'
}
}
}
provider 'azurerm' {
features {}
subscription_id = var.subscription_id
}Estrutura de arquivos do Terraform
Um projeto típico do Terraform para Azure é dividido em vários arquivos .tf: main.tf contém as declarações de recursos, variables.tf define as variáveis de entrada, outputs.tf define os valores de saída e terraform.tfvars fornece os valores das variáveis para um ambiente específico. O Terraform carrega automaticamente todos os arquivos .tf do diretório atual, portanto, a divisão em vários arquivos serve exclusivamente para facilitar a leitura.
# variables.tf
variable 'resource_group_name' {
description = 'Name of the resource group'
type = string
default = 'my-rg'
}
variable 'location' {
description = 'Azure region'
type = string
default = 'eastus'
}Declarando recursos do Azure
No Terraform, declara os recursos do Azure usando blocos resource. O tipo de bloco é resource, seguido pelo tipo de recurso do AzureRM (por exemplo, 'azurerm_resource_group') e por um nome local usado para referenciá-lo na configuração. Os nomes das propriedades no Terraform usam snake_case, em vez de camelCase ou PascalCase, usados no JSON do ARM.
# main.tf — create a resource group and storage account
resource 'azurerm_resource_group' 'main' {
name = var.resource_group_name
location = var.location
}
resource 'azurerm_storage_account' 'storage' {
name = 'mystorageaccount'
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
account_tier = 'Standard'
account_replication_type = 'LRS'
tags = {
environment = 'dev'
}
}O fluxo de trabalho do Terraform: Init, Plan, Apply
O fluxo de trabalho principal do Terraform tem três etapas. terraform init baixa o provedor AzureRM e configura o back-end. terraform plan compara sua configuração com o estado atual e mostra um diff do que será criado, alterado ou destruído — de forma semelhante ao what-if do ARM. terraform apply executa o plano e atualiza o Azure para corresponder à sua configuração.
# Step 1: Initialise the project and download providers
terraform init
# Step 2: Preview changes (shows + create, ~ update, - destroy)
terraform plan -out=tfplan
# Step 3: Apply the plan
terraform apply tfplan
# Destroy all managed resources
terraform destroyEstado do Terraform
O Terraform mantém um arquivo de estado (terraform.tfstate) que registra o estado atual de todos os recursos gerenciados e os associa à sua configuração. Esse arquivo permite que o Terraform detecte divergências entre o que está configurado e o que existe no Azure. Em ambientes de equipe, armazene o estado remotamente em uma conta do Azure Storage (um back-end do Terraform) para que todos os membros da equipe compartilhem o mesmo arquivo de estado.
# Configure remote state in Azure Blob Storage
terraform {
backend 'azurerm' {
resource_group_name = 'tfstate-rg'
storage_account_name = 'tfstateaccount'
container_name = 'tfstate'
key = 'prod.terraform.tfstate'
}
}Autenticação no Azure com o Terraform
O Terraform oferece suporte a vários métodos de autenticação para o Azure. Durante o desenvolvimento local, use az login (autenticação da CLI do Azure) — o Terraform obtém as credenciais automaticamente. Em pipelines de CI/CD, use um Service Principal com um segredo ou certificado de cliente, transmitido por meio de variáveis de ambiente. Para agentes ou máquinas virtuais hospedados no Azure, use uma Identidade Gerenciada para obter a autenticação mais segura, sem segredos.
# Option 1: Azure CLI (local dev)
az login
terraform plan
# Option 2: Service principal via environment variables
export ARM_CLIENT_ID='00000000-0000-0000-0000-000000000000'
export ARM_CLIENT_SECRET='your-client-secret'
export ARM_SUBSCRIPTION_ID='00000000-0000-0000-0000-000000000000'
export ARM_TENANT_ID='00000000-0000-0000-0000-000000000000'
terraform planMódulos do Terraform para reutilização
Assim como os módulos do Bicep, os módulos do Terraform permitem empacotar e reutilizar padrões de infraestrutura. Um módulo é um diretório que contém arquivos .tf. Pode referenciá-lo com um bloco module, passar entradas por meio de variables e consumir saídas. O Terraform Registry hospeda centenas de módulos do Azure mantidos pela comunidade e verificados, que pode usar diretamente, como o módulo de rede AzureRM.
# Use a module from the Terraform Registry
module 'vnet' {
source = 'Azure/vnet/azurerm'
version = '4.0.0'
resource_group_name = azurerm_resource_group.main.name
vnet_location = azurerm_resource_group.main.location
use_for_each = true
address_space = ['10.0.0.0/16']
subnet_prefixes = ['10.0.1.0/24', '10.0.2.0/24']
subnet_names = ['web', 'app']
}Quando escolher Terraform ou Bicep
Escolha o Bicep quando sua organização usar exclusivamente o Azure e quiser a integração mais estreita com os novos recursos do Azure (o Bicep recebe suporte para novos tipos de recursos desde o primeiro dia). Escolha o Terraform quando gerenciar recursos em vários provedores de nuvem, precisar do amplo ecossistema de módulos da comunidade ou preferir a sintaxe HCL e o conjunto de ferramentas da HashiCorp. Ambos são válidos para implantações exclusivamente no Azure — muitas vezes, a preferência da organização é o fator decisivo.
Importando recursos existentes
Se já existirem recursos no Azure antes de começar a usar o Terraform, poderá colocá-los sob o gerenciamento do Terraform usando terraform import. Esse comando obtém o estado atual do recurso e o adiciona ao arquivo de estado do Terraform. Depois da importação, deverá escrever manualmente o bloco de configuração correspondente para corresponder ao recurso importado e, em seguida, executar terraform plan para confirmar que não há diferenças.
# Import an existing resource group into Terraform state
terraform import \
azurerm_resource_group.main \
'/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/existing-rg'
# Terraform 1.5+ supports import blocks in configuration
import {
to = azurerm_resource_group.main
id = '/subscriptions/00000000.../resourceGroups/existing-rg'
}Boas práticas do Terraform no Azure
Siga estas boas práticas para usar o Terraform no Azure: armazene o estado remotamente no Azure Blob Storage com o bloqueio de estado habilitado; use espaços de trabalho ou arquivos de estado separados para ambientes diferentes; nunca confirme segredos no controle de código-fonte — use fontes de dados do Azure Key Vault; fixe as versões do provedor para evitar alterações incompatíveis; e execute o Terraform em um pipeline de CI/CD (Azure Pipelines ou GitHub Actions) com etapas de aprovação do plano.
Verificação rápida
Teste sua compreensão dos conceitos do Microsoft Azure Fundamentals (AZ-900) apresentados nesta lição.
Recapitulação da lição
Nesta lição, aprendeu que: o Terraform é uma ferramenta de IaC independente de provedor de nuvem que usa o provedor AzureRM para gerenciar recursos do Azure; o fluxo de trabalho init, plan, apply permite implantações seguras e previsíveis; e o estado remoto no Azure Blob Storage é essencial para a colaboração em equipe. A seguir, exploraremos a criação de planos do App Service e Web Apps.
Perguntas Frequentes
A aula “Terraform no Azure” é grátis?
Sim — o texto completo de “Terraform no Azure” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Azure Fundamentals, atualize para CoddyKit PRO. O curso de Azure Fundamentals inclui 4 aulas no total.
O que vou aprender em “Terraform no Azure”?
Configure o provedor AzureRM do Terraform, escreva um plano básico de infraestrutura e compreenda quando preferir o Terraform às ferramentas nativas ARM/Bicep. Você pratica Azure Fundamentals com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Azure Fundamentals?
Nenhuma experiência prévia é necessária. Azure Fundamentals no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Terraform no Azure”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Azure Fundamentals?
Sim. Cada aula de Azure Fundamentals inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Como funciona o Azure Resource Manager
- Escrevendo Modelos ARM
- Bicep: IaC moderno do Azure
- Terraform no Azure