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 o Azure Export for Terraform.
- Anexe recursos aos ambientes Terraform existentes.
- Exportar recursos para um ambiente Terraform existente com um estado de back-end remoto
Anexação a 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, um único main.aztfexport.tf
será criado com os resultados de exportação anexados ao arquivo cada vez 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. O Azure Export for Terraform permite que você defina seus próprios terraform
ou provider
blocos para passar.
Defina esses blocos em um .tf
arquivo dentro do diretório de destino, exporte com o --append
sinalizador e exporte a configuração para o back-end especificado e a versão do provedor (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 Armazenar 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 de 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 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 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, 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. Não é necessário 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 da Terraform que precisam ser movidos para o gerenciamento da 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.
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 para exportar os recursos configurados para HCL
- O
Depois de inspecionar se o recurso pode ser acrescentado, utilize o arquivo de mapeamento gerado e o
--append
sinalizador 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`
Execute terraform init.
terraform init --upgrade
Executar plano de terraforme.
O Azure Export for 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 o seu plano tiver problemas, consulte Conceitos de exportação do Azure para Terraform para entender as limitações relativas à implantação do código gerado pelo --hcl-only
. Se esse artigo não o ajudar, abra um problema no GitHub.
Personalize ainda mais a sua consulta
Alguns sinalizadores avançados adicionais são descritos abaixo, com como utilizá-los:
Seleção de ambiente de nuvem
Para especificar um ambiente diferente da nuvem pública, use o --env
sinalizador. Por exemplo, para o Governo dos EUA:
aztfexport [command] --env="usgovernment" [further options] <scope>
Alterando a versão do provedor Terraform
Para um acesso mais simples a uma versão ou preferencial AzureRM
AzAPI
, use o --provider-version
sinalizador. Por exemplo, se você estava na AzAPI
versão 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. Algumas bandeiras foram adicionadas tão tarde como 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 azurerm
provedor. Todos os sinalizadores também são configuráveis por meio de variáveis de ambiente, o azurerm
que inclui a mesma variável de ambiente definida no provedor.
aztfexport
tenta autenticar com cada um dos tipos de credencial, na seguinte ordem, parando quando um token é fornecido:
- Segredo do cliente
- Certificado de cliente
- OIDC
- Identidade gerida
- CLI do Azure
Se um ou mais use-xxx-cred
não for verdadeiro, esse tipo de credencial será ignorado. Esse comportamento é o mesmo que o 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 desejar incluir atribuições de função ao exportar seu escopo de recursos, use o --include-role-assignment
comando:
aztfexport [command] --include-role-assignment [further options] <scope>