Como usar o bloco de importação do Terraform para importar recursos

Com o Terraform 1.5 e posterior, você pode usar o bloco import para gerenciar a importação de recursos diretamente em sua configuração. Esse recurso simplifica o processo de importação de infraestrutura existente para o estado do Terraform, eliminando a necessidade de um comando CLI separado terraform import.

Neste artigo, explicamos o bloco de importação e como usá-lo para importar diferentes recursos.

O que é um Bloco de Importação do Terraform?

O bloco de import do Terraform introduzido no Terraform v1.5.0 fornece uma abordagem declarativa para importar recursos de infraestrutura existentes em um arquivo de estado do Terraform. Ele permite que as importações de recursos se tornem uma parte integrante do processo de planejamento do Terraform — semelhante a outros recursos gerenciados — em vez de serem tratadas como uma operação de estado direta. 

Como resultado, o bloco de import melhora a transparência e alinha as importações de recursos com os princípios fundamentais de infraestrutura como código (IaC), permitindo que os usuários gerenciem sua infraestrutura de forma mais eficaz e previsível. 

A sintaxe para um bloco de import no Terraform é a seguinte:

Plain Text

 

  • to: Especifica o endereço do recurso em sua configuração onde o recurso importado será mapeado.
  • id: Define o identificador único do recurso existente na API do provedor. Certifique-se de que seu fornecedor Terraform esteja corretamente configurado para acessar o recurso a ser importado.

Observe que alguns tipos de recursos podem ter requisitos ou restrições adicionais para a importação.

Bloco de Importação vs Comando de Importação Terraform

Um bloco import no Terraform permite que você defina recursos diretamente em seu arquivo de configuração, simplificando o gerenciamento da infraestrutura existente.

Em contraste, quando o comando terraform import é usado sem um bloco import, ele vincula um recurso existente ao estado do Terraform, mas não gera automaticamente a configuração correspondente em seu código. Você deve adicionar manualmente esta configuração posteriormente. O comando de importação é particularmente útil para importações únicas ou transição de infraestrutura para o gerenciamento do Terraform.

Ambos os métodos requerem cuidadosa manipulação para garantir consistência entre o estado do Terraform e a infraestrutura real. Os blocos de import são geralmente mais adequados para o gerenciamento contínuo de recursos, enquanto o comando autônomo funciona bem para importações ocasionais.

Exemplo 1: Utilizando o Bloco de Importação do Terraform para Importar um Bucket S3

Suponhamos que tenhamos um bucket existente da AWS S3 (my-existing-bucket) que você deseja gerenciar com o Terraform.

O bloco resource especifica o bucket S3 (aws_s3_bucket.example) e o atributo bucket define o nome do bucket existente:

Plain Text

 

O bloco import vincula o bucket S3 existente ao recurso do Terraform.

  • to: Mapeia o recurso importado para o endereço do bloco resource (aws_s3_bucket.example)
  • id: Especifica o ID único do bucket (my-existing-bucket).

Ao executar terraform plan, o Terraform lê o bloco import, verifica o estado do bucket S3 existente e mostra uma prévia das alterações que fará no arquivo de estado. Em seguida, após executarmos terraform apply, o Terraform atualiza o arquivo de estado para incluir o bucket existente, mapeando-o para o recurso aws_s3_bucket.example.

Após executar terraform apply e importar com sucesso o recurso, é uma boa prática remover o bloco import. Mantê-lo não causará nenhum dano, mas removê-lo ajuda a manter uma configuração limpa e minimiza possíveis confusões durante a gestão futura do estado.

Exemplo 2: Usando o Bloco de Importação do Terraform para Importar uma Instância EC2

Vamos considerar outro exemplo: Temos uma instância EC2 existente com o ID i-1234567890abcdef0 e queremos colocá-la sob gestão do Terraform.

Definimos o recurso aws_instance que queremos que o Terraform gerencie no bloco resource. Certifique-se de que os atributos (por exemplo, ami, instance_type) correspondam à configuração da instância existente:

Plain Text

 

No bloco import:

  • to: Mapeia o recurso em sua configuração (aws_instance.example) para o recurso existente.
  • id: Especifica o ID único da instância EC2 que você está importando.

Depois de adicionar o bloco de recurso e a declaração de importação ao seu arquivo de configuração do Terraform, execute terraform plan para visualizar as alterações. Em seguida, execute terraform apply para importar o recurso para o arquivo de estado do Terraform.

Após a importação, o Terraform gerenciará a instância EC2 existente, garantindo que sua configuração permaneça declarativa.

Exemplo 3: Usando o Bloco de Importação do Terraform para Importar um Grupo de Recursos do Azure

No próximo exemplo, estaremos importando um grupo de recursos do Azure.

Temos um grupo de recursos do Azure existente chamado example-resource-group na região East US, e queremos gerenciá-lo com o Terraform.

Primeiramente, no bloco de resource, definimos o recurso azurerm_resource_group que o Terraform irá gerenciar:

Plain Text

 

O bloco de importação:

  • para: Mapeia o recurso em sua configuração (azurerm_resource_group.example) para o recurso do Azure existente.
  • id: Especifica o ID do recurso do Azure totalmente qualificado do grupo de recursos. Lembre-se de substituir <subscription_id> pelo seu ID de assinatura real.

Adicione o recurso e o bloco de importação ao seu arquivo de configuração do Terraform. Em seguida, execute o comando terraform plan para visualizar as alterações e execute terraform apply para aplicar as alterações e importar o recurso para o arquivo de estado do Terraform.

É Possível Usar o Bloco de Importação do Terraform Condicionalmente?

O bloco de importação do Terraform é projetado para ser declarativo e requer valores específicos conhecidos no momento do plano. Portanto, não pode ser usado condicionalmente dentro do seu código Terraform.

O bloco de importação não suporta expressões dinâmicas ou variáveis para determinar o ID de importação com base em condições. Tentativas de usar construções como count ou variáveis dentro do bloco de importação resultarão em erros, pois o Terraform não permite tais argumentos nesse contexto.

Pontos-chave

A introdução do bloco de importação no Terraform 1.5+ simplifica o gerenciamento de recursos ao permitir a importação direta e definição de recursos dentro de arquivos de configuração. Ele está alinhado com princípios de IaC ao reduzir a complexidade e facilitar a integração da infraestrutura existente nas configurações do Terraform.

Source:
https://dzone.com/articles/how-to-use-terraform-import-block