Compartilhar via


Usando a Exportação do Azure para Terraform em cenários avançados

Este artigo explica como executar algumas das tarefas mais avançadas com a Exportação do Azure para Terraform.

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

Anexando a recursos existentes

Por padrão, a Exportação do Azure para 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 sinalizador --append.

aztfexport [command] --append <scope>

Quando o sinalizador --append é especificado, a Exportação do Azure para Terraform verifica se há um bloco provider ou terraform pré-existente em qualquer um dos arquivos no diretório atual. Se não houver, a ferramenta criará um arquivo para cada bloco e continuará 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 sufixo .aztfexport 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 main.aztfexport.tf única será criada com os resultados da exportação anexados ao arquivo sempre que o comando for executado.

Traga sua própria configuração do Terraform

Por padrão, a Exportação do Azure para 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 blocos terraform ou provider a serem passados.

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

Importante

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

Exemplo do Armazenamento do Azure

Este exemplo se baseia no artigo Armazenar o estado Terraform 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 do Terraform Cloud

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

Experiência embutida

Para exportar para um back-end embutido, use as opções --backend-type e --backend-config . Para obter mais informações sobre como configurar um back-end do Terraform, consulte Configuração de back-end do 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 esses 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, usei o caractere de continuação de linha do Unix para que o código seja exibido corretamente no navegador. Pode ser 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, a Exportação do Azure para Terraform mesclará os novos recursos com o estado existente automaticamente. Você não precisa especificar a opção embutida --append.

Exportar recursos do Azure para um ambiente do 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 do armazenamento do Azure.

  1. No diretório pai 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 sinalizador -o especifica a criação do diretório se ele não existir.
    • O sinalizador --hcl-only especifica a exportação dos recursos configurados para o HCL
  2. Após verificar se o recurso pode ser anexado, use o arquivo de mapeamento gerado e o sinalizador --append para garantir que a Exportação do Azure respeite o 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. Execute terraform plan.

  5. A Exportação do Azure para Terraform deve exibir Nenhuma alteração é necessária.

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

Se seu plano apresentar problemas, consulte Conceitos da Exportação do Azure para Terraform para entender as limitações relacionadas à implantação de código gerado pelo --hcl-only. Se esse artigo não ajudar você, abra um Problema do GitHub.

Personalize ainda mais sua consulta

Veja a seguir alguns sinalizadores avançados adicionais e como utilizá-los:

Selecionando o ambiente de nuvem

Para especificar um ambiente diferente da nuvem pública, use o sinalizador --env. Por exemplo, para o governo dos EUA:

aztfexport [command] --env="usgovernment" [further options] <scope>

Alterando a versão do provedor do Terraform

Para obter acesso mais simples a uma versão AzureRM ou AzAPI preferencial, use o sinalizador --provider-version. Por exemplo, se você estivesse na versão AzAPI 1.10.0:

aztfexport [command] --provider-name=azapi --provider-version=1.10.0 [further options] <scope>

Autenticação

Existe uma variedade de sinalizadores para gerenciar a configuração de autenticação. Alguns sinalizadores foram adicionados somente em v0.15:

  • --env
  • --tenant-id
  • --auxiliary-tenant-ids
  • --client-id
  • --client-id-file-path
  • --client-certificate
  • --client-certificate-path
  • --client-certificate-password
  • --client-secret
  • --client-secret-file-path
  • --oidc-request-token
  • --oidc-request-url
  • --oidc-token
  • --oidc-token-file-path
  • --use-managed-identity-cred (o padrão é false)
  • --use-azure-cli-cred (o padrão é true)
  • --use-oidc-cred (o padrão é false)

Os sinalizadores acima seguem a convenção de nomenclatura do provedor azurerm. Todos os sinalizadores também podem ser configurados por meio de variáveis de ambiente, o que inclui a mesma variável de ambiente definida no provedor azurerm.

O aztfexport tenta autenticar com cada um dos tipos de credenciais, na seguinte ordem, parando quando um token é fornecido:

  1. Segredo do cliente
  2. Certificado do cliente
  3. OIDC
  4. Identidade gerenciada
  5. CLI do Azure

Se um ou mais use-xxx-cred não forem true, esse tipo de credencial será ignorado. Esse comportamento é o mesmo do provedor.

A configuração do provedor pode substituir qualquer configuração de autenticação do aztfexport. Isso possibilita que os usuários usem diferentes tipos de credenciais entre aztfexport e o provedor.

Incluindo atribuições de função

Se você quiser incluir atribuições de função ao exportar seu escopo de recursos, use o comando --include-role-assignment:

aztfexport [command] --include-role-assignment [further options] <scope>

Próximas etapas