Compartilhar via


Seleção e nomenclatura de recursos personalizados usando a Exportação do Azure para Terraform.

A Exportação do Azure para Terraform fornece várias opções para personalizar os recursos que você exporta.

Neste artigo, você aprende os prós e contras de cada opção.

  • Usando a IU
  • Usando o modo de consulta
  • Usando um arquivo de mapeamento

Usando a interface do usuário

Quando você executa a Exportação do Azure para Terraform no modo interativo, os recursos especificados (por meio dos parâmetros especificados durante a execução) são exibidos. Por padrão, todos os recursos são exportados.

A opção Excluir atua como uma alternância para ignorar ou incluir recursos. Para remover recursos da exportação, use as teclas de seta para selecionar o recurso desejado e pressione Excluir. O recurso é atualizado para exibir "Ignorar".

Para desfazer a ação de ignorar, verifique se o recurso ignorado está selecionado e pressione Excluir novamente.

Vantagens:

  • Requer o uso de uma única tecla de alternância.
  • Não é necessário saber os recursos que você quer antes de executar o comando.

Desvantagens:

  • A ação pode levar muito tempo se você tiver muitos recursos para percorrer e ignorar.

Usando o modo de consulta

Aplicar um filtro usando a sintaxe de consulta do Azure Resource Graph é uma técnica poderosa quando você sabe exatamente quais filtros precisa.

aztfexport query [option] <ARG_where_predicate>

Por exemplo, vamos supor que você tenha um grupo de recursos chamado myResourceGroup que tem muitos recursos, incluindo um recurso de rede. Se você quiser exportar apenas o recurso de rede, poderá usar a seguinte sintaxe:

aztfexport query -n "resourceGroup =~ 'myResourceGroup' and type contains 'Microsoft.Network'"

Prós:

  • Comando único sem necessidade de edição manual.
  • Suporta um número ilimitado de filtros.
  • Lida com grande quantidade de recursos de forma eficiente.

Desvantagens:

  • Fácil exclusão de recursos que você precisa exportar.
  • Requer conhecimento da sintaxe do Azure Resource Graph.

Usando um arquivo de mapeamento

A seguinte sintaxe mostra os conceitos básicos para exportar um conjunto de recursos definido em um arquivo de mapeamento de recursos:

aztfexport mapping-file [option] <resource_mapping_file>

Você pode usar um arquivo de mapeamento nos modos interativo ou não interativo:

  • Modo interativo: pressione s ao executar interativamente no modo de exibição de lista de recursos.
  • Modo não interativo: você pode gerar o arquivo de mapeamento em todos os comandos de exportação (resource, resource-group, query, mapping file) adicionando o sinalizador --generate-mapping-file.

Se seus casos de uso exigirem modificações de pré-exportação, você poderá construir ou editar manualmente o arquivo de mapeamento. Veja a seguir alguns exemplos de quando é recomendável editar manualmente seu próprio arquivo de mapeamento:

Caso de uso Etapas
Você tem muitos recursos em um grupo de recursos, mas só precisa exportar alguns selecionados. Exclua os objetos JSON do editor de sua escolha e salve o arquivo antes de exportar.
Você quer renomear todos os seus recursos de maneira consistente. Altere a propriedade resource-name para qualquer nome que corresponda aos padrões de conformidade da sua empresa.
Você precisa refatorar um conjunto de recursos por seu tipo de recurso, como rede ou computação. Use seu editor para encontrar todos os Microsoft.Network ou Microsoft.Compute.

Por exemplo, vamos supor que você execute o seguinte comando para um grupo de recursos que contém uma máquina virtual:

aztfexport rg --generate-mapping-file --non-interactive myResourceGroup

Os resultados são semelhantes ao seguinte arquivo JSON:

{
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-MyResourceGroup/extensions/OmsAgentForLinux": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-MyResourceGroup/extensions/OmsAgentForLinux",
		"resource_type": "azurerm_virtual_machine_extension",
		"resource_name": "res-0"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup",
		"resource_type": "azurerm_resource_group",
		"resource_name": "res-1"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/sshPublicKeys/vm-MyResourceGroup_key": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/sshPublicKeys/vm-MyResourceGroup_key",
		"resource_type": "azurerm_ssh_public_key",
		"resource_name": "res-2"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-MyResourceGroup": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-MyResourceGroup",
		"resource_type": "azurerm_linux_virtual_machine",
		"resource_name": "res-3"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkInterfaces/vm-myResourceGroup-vm-d146": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkInterfaces/vm-myResourceGroup-vm-d146",
		"resource_type": "azurerm_network_interface",
		"resource_name": "res-4"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkInterfaces/vm-myResourceGroup-vm-d146/networkSecurityGroups/L3N1YnNjcmlwdGlvbnMvZGJmM2I2Y2ItYzFkMC00ZDA0LTk0YjktNTE1MDliOGQzM2ZkL3Jlc291cmNlR3JvdXBzL2hhc2hpY29uZi12bS1kZW1vL3Byb3ZpZGVycy9NaWNyb3NvZnQuTmV0d29yay9uZXR3b3JrU2VjdXJpdHlHcm91cHMvdm0taGFzaGljb25mLXZtLWRlbW8tbnNn": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkInterfaces/vm-myResourceGroup-vm-d146|/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkSecurityGroups/vm-MyResourceGroup-nsg",
		"resource_type": "azurerm_network_interface_security_group_association",
		"resource_name": "res-5"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkSecurityGroups/vm-MyResourceGroup-nsg": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkSecurityGroups/vm-MyResourceGroup-nsg",
		"resource_type": "azurerm_network_security_group",
		"resource_name": "res-6"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/publicIPAddresses/vm-MyResourceGroup-ip": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/publicIPAddresses/vm-MyResourceGroup-ip",
		"resource_type": "azurerm_public_ip",
		"resource_name": "res-7"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/virtualNetworks/MyResourceGroup-vnet": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/virtualNetworks/MyResourceGroup-vnet",
		"resource_type": "azurerm_virtual_network",
		"resource_name": "res-8"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/virtualNetworks/MyResourceGroup-vnet/subnets/default": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/virtualNetworks/MyResourceGroup-vnet/subnets/default",
		"resource_type": "azurerm_subnet",
		"resource_name": "res-9"
	}
}

Somente o valor do objeto no arquivo de mapeamento tem significância. A chave (o padrão é o Azure resource_id) é apenas um identificador nesse modo.

Agora, vamos supor que queremos manter o grupo de recursos e todos os recursos relacionados à computação e modificar o valor resource_name.

Poderíamos atualizar o arquivo de mapeamento da seguinte maneira:

{
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup",
		"resource_type": "azurerm_resource_group",
		"resource_name": "myResourceGroup"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM",
		"resource_type": "azurerm_linux_virtual_machine",
		"resource_name": "myVM"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/sshPublicKeys/myKey": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/sshPublicKeys/myKey",
		"resource_type": "azurerm_ssh_public_key",
		"resource_name": "myKey"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-myResourceGroup/extensions/OmsAgentForLinux": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-myResourceGroup/extensions/OmsAgentForLinux",
		"resource_type": "azurerm_virtual_machine_extension",
		"resource_name": "myVMExtension"
	}
}

Depois de editar o arquivo de mapeamento, exporte-o usando o seguinte comando:

aztfexport map -n "aztfexportResourceMapping.json"

Vantagens:

  • Como você está editando um arquivo, pode usar um editor para localizar e substituir o que precisa remover ou editar.
  • A saída JSON permite funcionalidades exclusivas, como scripts para filtrar.
  • Pode renomear recursos para corresponder aos seus padrões de nomenclatura.
  • Pode refatorar JSON em vários arquivos de mapeamento.
  • Lida bem com grandes quantidades de recursos.

Desvantagens:

  • Para cenários simples, essa técnica pode ser um exagero.
  • Requer modificações manuais.

Usando blocos de importação do Terraform

Ao executar aztfexport v0.13 ou superior junto com o Terraform v1.5 ou superior, o comando --generate-mapping-file ou -g gera um arquivo de mapeamento ao lado de um arquivo import.tf. O arquivo import.tf inclui blocos de importação para cada um dos recursos aztfexport que foi capaz de mapear. Deste ponto em diante, o comportamento da configuração é idêntico ao fluxo de trabalho do bloco de importação preexistente. Para finalizar, execute terraform plan.

Para excluir ou filtrar recursos da exportação resultante, você pode excluir o bloco que contém o ID do recurso e outras informações.

Comparar blocos de importação e Exportação do Azure

Uma pergunta comum é a diferença entre usar a Exportação do Azure para Terraform e os blocos de importação. Os benefícios que notamos entre as duas ferramentas incluem:

  • A Exportação do Azure para Terraform ajuda na descoberta de recursos. Há vários métodos disponíveis para ajudar a descobrir e exportar os recursos desejados.
  • A Exportação do Azure para Terraform fornece filtragem de recursos, também por meios manuais e automatizados.
  • A Exportação do Azure para Terraform gera automaticamente blocos de importação com suas saídas, economizando tempo e esforço no processo de criação.
  • Os blocos de importação do Terraform são suportados nativamente no Terraform, o que os torna fáceis de usar. Combinados, acreditamos que o uso de ambos proporciona um enorme benefício para você.

Vantagens:

  • Fluxo de trabalho com suporte nativo do Terraform. Não é necessário JSON.
  • Como você está editando um arquivo, pode usar um editor para localizar e substituir o que precisa remover ou editar.
  • Pode renomear recursos para corresponder aos seus padrões de nomenclatura.
  • Lida bem com grandes quantidades de recursos.

Desvantagens:

  • Para cenários simples, essa técnica pode ser um exagero.
  • Requer modificações manuais para filtrar.
  • Não funciona com versões mais antigas do Terraform.

Resumo

Neste artigo, você aprendeu sobre as várias opções para filtrar recursos ao exportar com a Exportação do Azure para Terraform.

Próximas etapas