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 file
resource-group
query
) 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.Network Microsoft.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
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de