Share via


Seleção e nomeação de recursos personalizados usando o Azure Export for Terraform

O Azure Export for Terraform fornece várias opções para personalizar quais recursos você exporta.

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

  • Usando a interface do usuário
  • 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.

Prós:

  • Requer o uso de uma única tecla de alternância.
  • Não precisa saber os recursos desejados antes de executar o comando.

Desvantagens:

  • A ação pode ser demorada se você tiver muitos recursos para rolar e ignorar.

Usando o modo de consulta

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

aztfexport query [option] <ARG_where_predicate>

Como exemplo, digamos que você tenha um grupo de recursos chamado myResourceGroup que tenha muitos recursos, incluindo um recurso de rede. Se desejar exportar apenas o recurso de rede, você pode 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 de excluir recursos que você precisa exportar.
  • Requer conhecimento da sintaxe do Gráfico de Recursos do Azure.

Usando um arquivo de mapeamento

A sintaxe a seguir mostra as noções básicas 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 na 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, , , mapping fileresource-groupquery) adicionando o --generate-mapping-file sinalizador.

Se seus casos de uso exigirem modificações de pré-exportação, você poderá construir ou editar manualmente o arquivo de mapeamento. Aqui estão alguns exemplos de quando você gostaria de 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ê deseja renomear todos os seus recursos de maneira consistente. Altere a resource-name propriedade 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 ou Microsoft.NetworkMicrosoft.Compute recursos.

Por exemplo, digamos 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 (padrão para o Azure resource_id) é apenas um identificador nesse modo.

Agora, digamos que queremos manter o grupo de recursos e quaisquer recursos relacionados à computação e modificar o resource_name valor.

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"

Prós:

  • Como você está editando um arquivo, você pode usar um editor para localizar e substituir o que você 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 exagerada.
  • Requer modificações manuais.

Resumo

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

Próximas etapas