Como importar recursos Azure para o Terraform: passo a passo
Adotar o Terraform num ambiente Azure que já tem recursos criados manualmente é um desafio comum: não queremos apagar nada, apenas passar a gerir o que já existe. Importar recursos Azure para o Terraform resolve isso — coloca a infraestrutura atual sob controlo de código sem a recriar. Este guia mostra, passo a passo, como usar o comando terraform import para trazer um resource group existente para o estado do Terraform de forma segura.
Pré-requisitos
- Terraform instalado (versão 1.5 ou superior recomendada).
- Azure CLI instalado e sessão iniciada com
az login. - Permissões de leitura sobre a subscrição e os recursos a importar.
- Uma pasta vazia para o projeto e um editor de texto à tua escolha.
Passo 1: Preparar o provider e autenticar
Cria um ficheiro main.tf e declara o provider azurerm. Para aprender, a forma mais simples de autenticar é reutilizar a sessão da Azure CLI, por isso confirma primeiro que estás na subscrição certa.
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~> 4.0"
}
}
}
provider "azurerm" {
features {}
}
No terminal, seleciona a subscrição e inicializa o projeto:
az account set --subscription "NOME-OU-ID-DA-SUBSCRICAO"
terraform init
Passo 2: Declarar o bloco do recurso
O terraform import não gera código: ele associa um recurso real a um bloco que já tem de existir na tua configuração. Por isso, declara primeiro o recurso, mesmo que só com os atributos essenciais. Vamos usar um resource group chamado rg-producao.
resource "azurerm_resource_group" "producao" {
name = "rg-producao"
location = "westeurope"
}
Os valores de name e location têm de corresponder exactamente ao recurso que já existe na Azure, senão o Terraform vai propor recriá-lo.
Passo 3: Obter o ID do recurso na Azure
Cada recurso na Azure tem um identificador único. Para o resource group, obtém-lo com a Azure CLI:
az group show --name rg-producao --query id --output tsv
O resultado tem este formato, e é ele que vais usar no passo seguinte:
/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-producao
Passo 4: Executar o terraform import
Agora liga o endereço do recurso no código (azurerm_resource_group.producao) ao ID real que obtiveste. O endereço é o "nome interno" no Terraform; o ID é a referência na Azure.
terraform import azurerm_resource_group.producao "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-producao"
Se tudo correr bem, aparece a mensagem Import successful!. O recurso passa a existir no ficheiro de estado (terraform.tfstate), embora o teu código ainda possa estar incompleto.
Dica: o estado pode guardar valores sensíveis em texto simples. Usa sempre um backend remoto seguro (por exemplo, uma conta de armazenamento na Azure) em projetos reais.
Passo 5: Validar com terraform plan
Corre um plan para comparar o teu código com o estado que acabaste de importar:
terraform plan
O objetivo é o plan não propor alterações. Se propuser, é sinal de que faltam atributos no teu bloco (tags, por exemplo) ou de que algum valor difere do real. Ajusta o código e repete o plan até ficar limpo — assim garantes que o Terraform não vai modificar nem recriar o recurso sem querer.
Verificar o resultado
Confirma que o recurso está mesmo sob gestão do Terraform com dois comandos:
terraform state list
terraform state show azurerm_resource_group.producao
O primeiro deve listar azurerm_resource_group.producao; o segundo mostra todos os atributos guardados no estado. Quando o terraform plan devolver No changes. Your infrastructure matches the configuration., a importação está concluída com sucesso.
Conclusão
Seguiste o fluxo completo: declarar o bloco, obter o ID, importar e validar com plan. A partir daqui podes trazer para o Terraform toda a infraestrutura que foi criada à mão, sem o risco de a recriar. Para importar vários recursos de uma vez, experimenta os blocos import declarativos (disponíveis desde o Terraform 1.5), que até geram configuração com terraform plan -generate-config-out=gerado.tf. Qual vai ser o primeiro recurso da tua subscrição a entrar no Terraform?