Saiba como importar recursos de nuvem existentes para o Terraform usando o comando import, o bloco import ou o Terraformer.
Contexto
O Terraform automatiza o gerenciamento de recursos de nuvem por meio de Infraestrutura como Código (IaC). É possível criar novos recursos diretamente com código Terraform, mas recursos já existentes ou criados fora do Terraform exigem importação. Esse processo gera o código do recurso e um arquivo de estado, permitindo o gerenciamento contínuo pelo Terraform.
A importação de recursos coloca os recursos de nuvem existentes sob o gerenciamento do Terraform.
Cenários
A importação de recursos aplica-se aos seguintes cenários comuns:
Gerenciar recursos existentes: Transfira recursos gerenciados por outras ferramentas, como console, API ou interface de linha de comando (CLI), para o gerenciamento do Terraform.
Resolver desvio de recursos: Quando um recurso gerenciado pelo Terraform é modificado fora dele, seu estado diverge da configuração. Reimporte o recurso para sincronizar o estado.
Refatorar código: Divida um arquivo de configuração monolítico em arquivos menores para reduzir a complexidade de gerenciamento à medida que o número de recursos aumenta.
Implantar recursos rapidamente: Replique e implante uma arquitetura de recursos existente em uma região ou conta diferente.
Recuperar recursos rapidamente: Faça backup regular da sua arquitetura de recursos. Se ocorrer um problema de estabilidade, use o código de backup para recuperar a arquitetura rapidamente.
Procedimento
Três métodos estão disponíveis para importar recursos:
Comando import: Importa um único recurso usando o comando nativo do Terraform
terraform import.Bloco import: Importa um ou mais recursos ao escrever um bloco de importação do Terraform e executar
terraform planeterraform apply.Ferramenta Terraformer: Importa recursos em lote executando comandos com a ferramenta de código aberto Terraformer para filtragem e consulta.
Escolha o método mais adequado ao seu cenário.
|
Método de importação |
Vantagens |
Desvantagens |
Cenários |
|
Comando import |
|
|
Gerenciar recursos existentes Resolver desvio de recursos Refatorar código |
|
Bloco import |
|
|
Gerenciar recursos existentes Resolver desvio de recursos Refatorar código Implantar recursos rapidamente |
|
Terraformer |
|
|
Gerenciar recursos existentes Resolver desvio de recursos Refatorar código Implantar recursos rapidamente Recuperar recursos rapidamente |
Comando import do Terraform
O comando <a class="ne-link" data-href="https://developer.hashicorp.com/terraform/cli/commands/import" href="https://developer.hashicorp.com/terraform/cli/commands/import" id="653ac62fdfgjr" target="_blank">terraform import</a> importa recursos especificando um endereço de recurso e um ID de recurso, além de aceitar vários parâmetros de configuração.
Pré-requisitos
-
Prepare um ambiente de execução do Terraform usando um dos seguintes métodos:
Criar recursos com o Terraform: O Cloud Shell já vem com o Terraform pré-instalado e credenciais configuradas. Ideal para acesso rápido.
Instalar e configurar o Terraform: Adequado para ambientes de rede restrita ou configurações de desenvolvimento personalizadas.
Conceda permissões de somente leitura para os recursos relevantes à conta ativa.
Uso
O formato do comando é terraform import [options] <address> <id>.
-
Endereço do recurso: O formato é
<resource_type>.<resource_name>. Inclui o tipo e o nome do recurso, servindo como identificador da infraestrutura no arquivo de estado.Por exemplo, o endereço do recurso para a VPC no trecho de configuração a seguir é
alicloud_vpc.default.
resource "alicloud_vpc" "default" { vpc_name = "tf-example" cidr_block = "10.0.0.0/8" } -
ID do recurso: Um ID de recurso identifica exclusivamente um recurso para importação. O formato do ID varia conforme o tipo de recurso — consulte a documentação do Provider.
Por exemplo, o ID do recurso para
alicloud_security_groupé o ID do grupo de segurança. O ID do recurso paraalicloud_security_group_rulesegue um formato específico.

Opções de configuração: O comando de importação do Terraform aceita opções adicionais documentadas nas instruções oficiais de uso.
Exemplo
O exemplo a seguir importa um bucket do Object Storage Service (OSS):
-
Crie um diretório de trabalho. Nesse diretório, crie um arquivo de configuração chamado main.tf e defina o endereço do recurso a ser importado.
resource "alicloud_oss_bucket" "default"{ } O ID de um recurso alicloud_oss_bucket é o nome do bucket.
-
Inicialize o ambiente de execução.
terraform init -
Execute o comando de importação.
# Replace this with your bucket name terraform import alicloud_oss_bucket.default oss-bucket-importA saída a seguir indica uma importação bem-sucedida:
alicloud_oss_bucket.default: Importing from ID "oss-bucket-import"... alicloud_oss_bucket.default: Import prepared! Prepared alicloud_oss_bucket for import alicloud_oss_bucket.default: Refreshing state... [id=oss-bucket-import] Import successful! The resources that were imported are shown above. These resources are now in your Terraform state and will henceforth be managed by Terraform. -
Após a importação, as propriedades do recurso não são adicionadas automaticamente ao seu modelo. Execute
terraform showpara visualizar todas as propriedades do recurso importado:# alicloud_oss_bucket.default: resource "alicloud_oss_bucket" "default" { acl = "private" bucket = "oss-bucket-import" creation_date = "2024-11-22" extranet_endpoint = "oss-cn-beijing.aliyuncs.com" id = "oss-bucket-import" intranet_endpoint = "oss-cn-beijing-internal.aliyuncs.com" location = "oss-cn-beijing" owner = "1511928*****" redundancy_type = "ZRS" resource_group_id = "rg-acf***" storage_class = "Standard" tags = {} access_monitor { status = "Disabled" } }Adicione essas informações ao seu modelo e remova as propriedades de somente leitura conforme descrito em alicloud_oss_bucket. Assim, você poderá usar o Terraform para gerenciar seus recursos.
Bloco import do Terraform
O Terraform v1.5.0 e versões posteriores suportam importação de recursos usando um bloco import. Escreva um bloco import no seu arquivo de configuração para especificar o ID e o endereço do recurso e, em seguida, execute os comandos terraform plan e terraform apply para visualizar e executar a importação.
Para mais informações, consulte a documentação oficial.
Pré-requisitos
-
Prepare um ambiente de execução do Terraform usando um dos seguintes métodos:
NotaRequer Terraform v1.5.0 ou posterior.
Criar recursos com o Terraform: O Cloud Shell já vem com o Terraform pré-instalado e credenciais configuradas. Ideal para acesso rápido.
Instalar e configurar o Terraform: Adequado para ambientes de rede restrita ou configurações de desenvolvimento personalizadas.
Conceda permissões de somente leitura para os recursos relevantes à conta ativa.
Uso
A sintaxe é a seguinte:
import {
to = alicloud_oss_bucket.example
id = "oss-bucket-import"
}
# Optional
# resource "alicloud_oss_bucket" "example" {
# # (other resource arguments...)
# }
O bloco de importação oferece duas vantagens sobre o comando de importação:
Geração automática de configuração. Importe para um endereço de recurso existente ou use
-generate-config-outpara gerar automaticamente o arquivo de configuração.Importações em lote. Use
for_eachem um blocoimportpara importar vários recursos. Recursos com atributos semelhantes podem compartilhar um endereço de recurso, diferenciados por índice.
Esses dois recursos não podem ser combinados. A CLI do Terraform não suporta a geração automática de configurações para recursos que usam for_each.
Exemplo
O exemplo a seguir importa um bucket do OSS usando um bloco de importação:
-
Crie um diretório de trabalho com um arquivo main.tf. Escreva um bloco de importação para especificar o ID e o endereço do recurso.
import { to = alicloud_oss_bucket.default id = "oss-bucket-import" } -
Inicialize o ambiente de execução.
terraform init -
Execute
terraform planpara visualizar a importação. Use-generate-config-outpara gerar o modelo automaticamente.terraform plan -generate-config-out=generated.tfAs seguintes informações são exibidas:
alicloud_oss_bucket.default: Preparing import... [id=oss-bucket-import] alicloud_oss_bucket.default: Refreshing state... [id=oss-bucket-import] Terraform will perform the following actions: # alicloud_oss_bucket.default will be imported # (config will be generated) resource "alicloud_oss_bucket" "default" { acl = "private" bucket = "oss-bucket-import" creation_date = "2024-11-22" extranet_endpoint = "oss-cn-beijing.aliyuncs.com" id = "oss-bucket-import" intranet_endpoint = "oss-cn-beijing-internal.aliyuncs.com" location = "oss-cn-beijing" owner = "15119****" redundancy_type = "ZRS" resource_group_id = "rg-acfmzaq*****" storage_class = "Standard" tags = {} access_monitor { status = "Disabled" } } Plan: 1 to import, 0 to add, 0 to change, 0 to destroy. ╷ │ Warning: Config generation is experimental │ │ Generating configuration during import is currently experimental, and the generated configuration │ format may change in future versions. ╵ ───────────────────────────────────────────────────────────────────────────────────────────────────── Terraform has generated configuration and written it to generated.tf. Please review the configuration and edit it as necessary before adding it to version control. Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run "terraform apply" now. -
Após confirmar o plano, execute
terraform applypara realizar a importação.terraform applyDigite yes quando solicitado. A saída a seguir indica que a importação foi bem-sucedida:
...... Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes alicloud_oss_bucket.default: Importing... [id=oss-bucket-import] alicloud_oss_bucket.default: Import complete [id=oss-bucket-import] Apply complete! Resources: 1 imported, 0 added, 0 changed, 0 destroyed.
Ferramenta Terraformer
A ferramenta de código aberto Terraformer importa recursos da sua conta em lote para modelos do Terraform. Ela suporta um subconjunto de recursos por provedor de nuvem; recursos adicionais exigem o desenvolvimento de um provedor personalizado.
Duas versões do Terraformer estão disponíveis:
Terraformer de código aberto: Versão original que suporta importação de recursos de vários provedores de nuvem.
Alibaba Cloud Terraformer: Versão aprimorada que suporta exclusivamente recursos da Alibaba Cloud.
|
Recurso |
Terraformer de código aberto |
Alibaba Cloud Terraformer |
|
Visualizar lista de produtos suportados para importação |
❌ |
✅ |
|
Visualizar lista de tipos de recursos suportados para importação |
❌ |
✅ |
|
Filtrar por região |
✅ |
✅ |
|
Filtrar excluindo regiões especificadas |
❌ |
❌ |
|
Filtrar por zona |
❌ |
✅ |
|
Filtrar excluindo zonas especificadas |
❌ |
❌ |
|
Filtrar por produto |
❌ |
✅ |
|
Filtrar excluindo produtos especificados |
❌ |
✅ |
|
Filtrar por tipo de recurso |
✅ |
✅ |
|
Filtrar excluindo tipos de recursos especificados |
✅ |
✅ |
|
Filtrar por lista de IDs de recursos |
✅ |
✅ |
|
Filtrar excluindo lista especificada de IDs de recursos |
❌ |
❌ |
|
Filtrar por nome de recurso |
✅ |
✅ |
|
Filtrar por grupo de recursos |
✅ |
✅ |
|
Filtrar por tag |
✅ |
✅ |
|
Criar dependências de recursos automaticamente |
❌ |
✅ |
|
Gerar variáveis automaticamente |
❌ |
✅ |
|
Gerar outputs automaticamente |
❌ |
❌ |
Terraformer de código aberto
Pré-requisitos
-
Baixe e instale o Terraformer
O Terraformer está disponível como pacote para todos os provedores ou pacotes individuais por provedor. Os exemplos a seguir mostram a instalação no Linux e macOS. Opções adicionais estão no guia de Instalação.
Usuários Linux
export PROVIDER=all curl -LO "https://github.com/GoogleCloudPlatform/terraformer/releases/download/$(curl -s https://api.github.com/repos/GoogleCloudPlatform/terraformer/releases/latest | grep tag_name | cut -d '"' -f 4)/terraformer-${PROVIDER}-linux-amd64" chmod +x terraformer-${PROVIDER}-linux-amd64 sudo mv terraformer-${PROVIDER}-linux-amd64 /usr/local/bin/terraformerUsuários macOS
export PROVIDER=all curl -LO "https://github.com/GoogleCloudPlatform/terraformer/releases/download/$(curl -s https://api.github.com/repos/GoogleCloudPlatform/terraformer/releases/latest | grep tag_name | cut -d '"' -f 4)/terraformer-${PROVIDER}-darwin-amd64" chmod +x terraformer-${PROVIDER}-darwin-amd64 sudo mv terraformer-${PROVIDER}-darwin-amd64 /usr/local/bin/terraformer -
Dependências
Conceda à conta atual permissões de somente leitura para os recursos relevantes.
-
Instale o Terraform
NotaVocê pode pular esta etapa se executar o comando no Cloud Shell.
Para mais informações, consulte Instalar e configurar o Terraform.
-
Baixe o provedor relevante. Configure o provedor de uma das duas maneiras a seguir:
Inicialize o provedor no diretório onde você executa o comando do Terraformer.
Baixe o provedor para o caminho ~/.terraform.d/plugins/.
Configure as credenciais de acesso. Atualmente, o Terraformer suporta autenticação apenas pela leitura de um perfil local. Por padrão, a primeira credencial no perfil é usada para a importação. Para mais informações sobre como configurar credenciais de acesso da Alibaba Cloud, consulte Configurar e gerenciar credenciais.
Uso
O exemplo a seguir usa terraformer-all-darwin-amd64 v0.8.24.
O Terraformer suporta quatro comandos: help, import, plan, and version.
-
help: Exibe detalhes sobre um comando.

-
version: Exibe o número da versão atual.

-
import: Importa recursos para um provedor especificado.

plan: Visualiza os recursos a serem importados para um provedor especificado.
Exemplo
O exemplo a seguir importa todas as VPCs da Alibaba Cloud na região China (Hangzhou).
-
Crie um diretório para armazenar os modelos importados e os arquivos de estado.
mkdir example && cd example -
Execute o seguinte comando:
terraformer-all-darwin-arm64 import alicloud --resources=vpc --regions=cn-hangzhou --path-pattern={output} --path-output=./--resources: Especifica a coleção de recursos a importar.--regions: Especifica a região onde os recursos estão localizados.--path-pattern: Especifica o padrão para a estrutura de diretórios gerada.--path-output: Especifica o caminho de saída para os arquivos gerados.
-
Os arquivos de modelo gerados são os seguintes. Por padrão, as informações da região são adicionadas ao caminho do diretório. Para consolidar todos os modelos de recursos em um único arquivo, use o parâmetro
--compact, que envia todos os recursos pararesources.tf.└── cn-hangzhou ├── outputs.tf ├── provider.tf ├── terraform.tfstate ├── variables.tf ├── vpc.tf └── vswitch.tf 2 directories, 6 files -
Para Terraform
>=0.13.0, execute o seguinte comando para atualizar o arquivo de estado visando compatibilidade de versão.terraform state replace-provider -auto-approve "registry.terraform.io/-/alicloud" "aliyun/alicloud" -
Baixe e instale
Baixe o aliterraformer do Alibaba Cloud OSS:
macOS
# amd64 wget https://terraform-share.oss-cn-hangzhou.aliyuncs.com/aliterraformer/aliterraformer_darwin_amd64.zip # arm64 wget https://terraform-share.oss-cn-hangzhou.aliyuncs.com/aliterraformer/aliterraformer_darwin_arm64.zipLinux
# amd64 wget https://terraform-share.oss-cn-hangzhou.aliyuncs.com/aliterraformer/aliterraformer_linux_amd64.zip # arm wget https://terraform-share.oss-cn-hangzhou.aliyuncs.com/aliterraformer/aliterraformer_linux_arm.zip # arm64 wget https://terraform-share.oss-cn-hangzhou.aliyuncs.com/aliterraformer/aliterraformer_linux_arm64.zipWindows
# amd64 wget https://terraform-share.oss-cn-hangzhou.aliyuncs.com/aliterraformer/aliterraformer_windows_amd64.zip # 386 wget https://terraform-share.oss-cn-hangzhou.aliyuncs.com/aliterraformer/aliterraformer_windows_386.zipPor exemplo, no macOS, descompacte o arquivo após o download:
unzip aliterraformer_darwin_amd64.zip chmod +x aliterraformer sudo mv aliterraformer /usr/local/bin/aliterraformer -
Dependências
Assim como no Terraformer de código aberto, você precisa dos binários terraform e terraform-provider-alicloud, além de credenciais de acesso configuradas.
Conceda permissões de somente leitura para os recursos relevantes à conta do Resource Access Management (RAM).
-
Instale o Terraform
Para mais informações, consulte Instalar e configurar o Terraform. Você pode pular esta etapa se executar o comando no Cloud Shell.
-
Baixe o terraform-provider-alicloud
É possível especificar a versão do provedor para importação. A estrutura do diretório de cache difere entre versões anteriores à v0.13.0 e v0.13.0+. Os caminhos a seguir aplicam-se à v0.13.0+:
# 1. Set using the TF_DATA_TFER_DIR environment variable <$TF_DATA_TFER_DIR>/providers/registry.terraform.io/aliyun/alicloud/1.239.0/darwin_arm64/terraform-provider-alicloud_v1.239.0 # 2. Set in the hidden directory of the current working directory .terraform/providers/registry.terraform.io/aliyun/alicloud/1.239.0/darwin_arm64/terraform-provider-alicloud_v1.239.0 # 3. Set in the hidden directory of the user's root directory <HOME>/.terraform.d/plugins/registry.terraform.io/aliyun/alicloud/1.239.0/darwin_arm64/terraform-provider-alicloud_v1.239.0 -
Configure as credenciais de acesso
Além de usar perfis, você pode definir credenciais de acesso no aliterraformer usando variáveis de ambiente e parâmetros de comando:
# 1. Using the ALICLOUD_ACCESS_KEY and ALICLOUD_SECRET_KEY environment variables $ export ALICLOUD_ACCESS_KEY=xxxx $ export ALICLOUD_SECRET_KEY=xxxxx # 2. By passing the --access-key and --secret-key command parameters $ aliterraformer import alicloud --access-key=xxxx --secret-key=xxx ... # 3. By setting and passing the AK through the profile mechanism $ aliterraformer import alicloud --profile=default ...
-
help: Visualize detalhes sobre os comandos suportados.
aliterraformer help
-
version: Visualize a versão atual do Terraformer.
aliterraformer version -
products: Liste os produtos suportados para importação na versão atual.
aliterraformer products
-
resources: Liste os tipos de recursos importáveis para um produto. Use
-ppara especificar o produto.aliterraformer resources -p <productName>

-
import: Importe recursos. Especifique alicloud para Alibaba Cloud. Execute o seguinte comando para visualizar os parâmetros disponíveis:
aliterraformer import alicloud -h
Defina a coleção de recursos a importar e, opcionalmente, filtre recursos e extraia propriedades como variáveis.
-
Construa uma coleção de recursos:
Quatro flags definem o escopo da importação: <--products>, <--resources>, <--excludes-products> e <--excludes>. Combine-as para construir uma coleção de recursos:
-
Importe recursos específicos
# Import a VPC, a vSwitch, and an ECS instance aliterraformer import alicloud -r=vpc,vswitch,instance -
Importe produtos específicos
# Import all resources under the ACK and ALB products aliterraformer import alicloud --products=ACK,ALB -
Importe produtos e recursos específicos
# Import all resources under the ACK and ECS products, and all VPCs and vSwitches aliterraformer import alicloud --products=ACK,ECS -r=vpc,vswitch -
Importe produtos específicos, mas exclua alguns recursos dentro desses produtos
# Import all resources under ACK except alicloud_cs_kubernetes aliterraformer import alicloud --products=ACK --excludes=cs_kubernetes -
Importe todos os recursos de todos os produtos
# Entering ALL for products means all products aliterraformer import alicloud --products=ALL -
Importe todos os recursos de todos os produtos, mas exclua produtos específicos
# Import all products except VPNGateway and WAF aliterraformer import alicloud --products=ALL --excludes-products=VPNGateway,WAF -
Importe todos os recursos de todos os produtos, mas exclua produtos e recursos específicos
# Import all products except VPNGateway and WAF, and exclude the alicloud_cs_kubernetes resource aliterraformer import alicloud --products=ALL --excludes-products=VPNGateway,WAF --excludes=cs_kubernetes
-
-
Filtre recursos
Formato:
--filter=Type1.AttrKey=AttrValue1;AttrValue2,Type2.AttrKey=AttrValue1;AttrValue2. Omitir Type aplica o filtro a todos os recursos.-
Importe uma VPC com o ID vpc-123
# To specify multiple values, separate them with semicolons: --filter="vpc.id=vpc-123;vpc-456" aliterraformer import alicloud -r=vpc --filter="vpc.id=vpc-123" -
Importe uma VPC e um vSwitch que tenham o nome tf-example
aliterraformer import alicloud -r=vpc,vswitch --filter="vpc.vpc_name=tf-example,vswitch.vswitch_name=tf-example" -
Importe uma VPC e uma instância ECS que pertençam ao grupo de recursos rg-12345
aliterraformer import alicloud -r=vpc,instance --filter="resource_group_id=rg-12345"
-
-
Extraia propriedades como variáveis usando output-variables
Formato:
r1:attr1,attr2;r2:attr1,attr2,attr3.-
Extraia vpc_id e vswitch_id de uma instância ECS como variáveis
aliterraformer import alicloud -r=instance --output-variables="instance:vpc_id,vswitch_id"
-
-
Crie um diretório para armazenar os modelos importados e os arquivos de estado.
mkdir example && cd example -
Construa o comando de importação.
aliterraformer import alicloud \ --regions=cn-hangzhou \ -r=vpc,vswitch,instance \ --filter="vpc.id=vpc-12345,vswitch.vpc_id=vpc-12345,instance.vpc_id=vpc-12345" \ --output-variables="vswitch:zone_id" \ --path-output=example \ --path-pattern={output} \ --compact--path-output: Especifica a pasta de importação.--path-pattern: Estrutura de diretórios para modelos importados. Padrão:{output}/{provider}/{service}/. Alternativas:{output}/{provider}/e{output}/. Usar--path-pattern={output}coloca todos os modelos em uma única pasta.--compact: Consolida todos os recursos em um único arquivoresources.tfem vez de arquivos separados{service}.tf.
-
Após a importação, os seguintes arquivos são gerados no diretório example:
. ├── outputs.tf ├── provider.tf ├── resources.tf ├── terraform.tfstate └── variables.tfSem
--path-pattern={output}, a estrutura de diretórios é:. └── alicloud ├── instance │ ├── provider.tf │ ├── terraform.tfstate │ └── variables.tf ├── vpc │ ├── outputs.tf │ ├── provider.tf │ ├── terraform.tfstate │ ├── variables.tf │ └── vpc.tf └── vswitch ├── outputs.tf ├── provider.tf ├── terraform.tfstate ├── variables.tf └── vswitch.tf -
Para Terraform
>=0.13.0, execute o seguinte comando para atualizar o arquivo de estado visando compatibilidade de versão.terraform state replace-provider -auto-approve "registry.terraform.io/-/alicloud" "aliyun/alicloud"
Exemplo
Este exemplo importa uma VPC, um vSwitch e uma instância ECS com ID de VPC
vpc-12345em China (Hangzhou), extraindo o zone_id do vSwitch como variável:Feedback e sugestões
Para dúvidas ou sugestões, participe do grupo DingTalk (ID do Grupo: 34240022836) ou abra uma issue na página do Terraform Provider da Alibaba Cloud no GitHub.
-
Alibaba Cloud Terraformer - aliterraformer (Recomendado)
O aliterraformer estende o Terraformer de código aberto com maior cobertura de recursos, configuração aprimorada de credenciais e dimensões adicionais de filtragem de importação.
Pré-requisitos
Uso
O aliterraformer suporta cinco comandos: help, version, products, resources, import. Os comandos products, resources são adições ao Terraformer de código aberto.