Share via


Usando o Azure Export para Terraform em cenários avançados

Este artigo explica como executar algumas das tarefas mais avançadas com o Azure Export for Terraform.

  • Anexar recursos a ambientes Terraform existentes.
  • Exportar recursos para um ambiente Terraform existente com um estado de back-end remoto

Anexando aos recursos existentes

Por padrão, o Azure Export for Terraform garante que o diretório de saída esteja vazio para evitar conflitos com arquivos de usuário existentes. Se você precisar importar recursos para um arquivo de estado existente, adicione o --append sinalizador.

aztfexport [command] --append <scope>

Quando o sinalizador é especificado, o --append Azure Export for Terraform verifica se há um bloco ou terraform pré-existente provider em qualquer um dos arquivos no diretório atual. Caso contrário, a ferramenta cria um arquivo para cada bloco e, em seguida, prossegue com a exportação. Se o diretório de saída tiver um arquivo de estado, todos os recursos exportados serão importados para o arquivo de estado.

Além disso, o arquivo gerado tem um .aztfexport sufixo antes da extensão - como main.aztfexport.tf - para evitar possíveis conflitos de nome de arquivo.

Se você executar aztfexport --append várias vezes, uma única main.aztfexport.tf será criada com os resultados da exportação anexados ao arquivo sempre que o comando for executado.

Traga sua própria configuração Terraform

Por padrão, o Azure Export for Terraform usa um back-end local para armazenar o arquivo de estado. No entanto, também é possível usar um back-end remoto. A Exportação do Azure para Terraform permite que você defina seus próprios terraform blocos ou blocos provider a serem aprovados.

Defina esses blocos em um .tf arquivo dentro do diretório de destino, exporte com o --append sinalizador e exporte sua configuração para a versão de back-end e provedor especificada (se for fornecida).

Importante

Se a versão especificada do AzureRM não corresponder à sua versão instalada durante a exportação, o comando falhará.

Exemplo de Armazenamento do Azure

Este exemplo é baseado no artigo Estado do Terraform do Armazenamento no Armazenamento do Azure.

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~>3.0"
    }
  }
    backend "azurerm" {
        resource_group_name  = "tfstate"
        storage_account_name = "storageacc"
        container_name       = "tfstate"
        key                  = "terraform.tfstate"
    }

}

provider "azurerm" {
  features {}
}

Exemplo de nuvem Terraform

terraform {
  cloud {
    organization = "aztfexport-test"
    workspaces {
      name = "aztfexport-playground"
    }
  }
  required_providers {
    azurerm = {
      source = "hashicorp/azurerm"
      version = "~>3.0"
    }
  }
}
provider "azurerm" {
  features {
  }
}

Experiência em linha

Para exportar para um back-end embutido, use as --backend-type opções e --backend-config . Para obter mais informações sobre como configurar um back-end Terraform, consulte Configuração de back-end Terraform.

Usando nosso exemplo de conta de armazenamento do Azure, você precisa do seguinte, conforme definido na documentação de back-end do AzureRM.

  • Nome do grupo de recursos
  • Nome da conta de armazenamento
  • Nome do contêiner de armazenamento

Passe estes parâmetros para o comando junto com seu tipo de back-end:

aztfexport [subcommand] --backend-type=azurerm \
                        --backend-config=resource_group_name=<resource group name> \
                        --backend-config=storage_account_name=<account name> \
                        --backend-config=container_name=<container name> \
                        --backend-config=key=terraform.tfstate 

Pontos principais:

  • No exemplo anterior, estou usando o caractere de continuação de linha Unix para que o código seja bem exibido no navegador. Talvez seja necessário alterar esses caracteres para corresponder ao seu ambiente de linha de comando - como o PowerShell - ou combinar o comando em uma linha.
  • Se o estado de back-end já existir, o Azure Export for Terraform mesclará os novos recursos com o estado existente automaticamente. Você não precisa especificar a --append opção embutida.

Exportar recursos do Azure para um ambiente Terraform existente

Agora, vamos juntar tudo! Imagine que novos recursos foram criados fora do Terraform que precisam ser movidos para o gerenciamento do Terraform. Para concluir a seção, verifique se você tem um back-end configurado. Este tutorial usa a mesma configuração especificada no tutorial de estado remoto de armazenamento do Azure.

  1. No diretório pai de onde você deseja que o diretório temporário seja criado, execute o seguinte comando:

    aztfexport resource -o tempdir --hcl-only <resource_id>
    

    Pontos principais:

    • O -o sinalizador especifica para criar o diretório se ele não existir.
    • O --hcl-only sinalizador especifica a exportação dos recursos configurados para a HCL
  2. Depois de inspecionar se o recurso pode ser acrescentado, utilize o arquivo de mapeamento gerado e o sinalizador para garantir que a Exportação do Azure respeite o --append estado remoto pré-existente e as versões do provedor em nosso ambiente existente:

    aztfexport map --append `./tempdir/aztfexportResourceMapping.json`
    
  3. Execute terraform init.

    terraform init --upgrade
    
  4. Executar plano de terraforma.

  5. O Azure Export for Terraform deve exibir Nenhuma alteração necessária.

Parabéns! Sua infraestrutura e seu estado correspondente foram anexados com êxito ao seu ambiente Terraform.

Se o seu plano tiver problemas, consulte Conceitos do Azure Export for Terraform para entender as limitações relacionadas à implantação de código gerado pelo --hcl-only. Se esse artigo não o ajudar, abra um problema no GitHub.

Próximas etapas