使用适用于 Terraform 的 Azure 导出自定义资源选择和命名
适用于 Terraform 的 Azure 导出提供了各种选项来自定义导出的资源。
在本文中,你将了解每个选项的优缺点。
- 使用 UI
- 使用查询模式
- 使用映射文件
使用用户界面
在交互式模式下运行 Azure Export for Terraform 时,将显示指定的资源(通过运行时指定的参数)。 默认情况下,导出所有资源。
Delete 充当跳过或包括资源的切换。 若要从导出中删除资源,请使用箭头键选择所需的资源,然后按 Delete。 将更新资源以显示“Skip”。
若要撤消跳过操作,请验证跳过的资源是否已选中,并再次按 Delete 。
优点:
- 需要使用单个切换键。
- 在运行命令之前,无需知道所需的资源。
缺点:
- 如果有许多资源要滚动并跳过,则操作可能非常耗时。
使用查询模式
使用 Azure Resource Graph 查询语法 应用筛选器是一种强大的技术,当你确切了解所需的筛选器时。
aztfexport query [option] <ARG_where_predicate>
例如,假设你有一个名为包含许多资源的资源组 myResourceGroup
,包括网络资源。 如果只想导出网络资源,可以使用以下语法:
aztfexport query -n "resourceGroup =~ 'myResourceGroup' and type contains 'Microsoft.Network'"
优点:
- 无需手动编辑的单个命令。
- 支持无限数量的筛选器。
- 高效处理大量资源。
缺点:
- 易于排除需要导出的资源。
- 需要了解 Azure Resource Graph 语法。
使用映射文件
以下语法显示了导出资源映射文件中定义的一组资源的基础知识:
aztfexport mapping-file [option] <resource_mapping_file>
可以在交互式模式或非交互模式下使用映射文件:
- 交互模式: 在资源列表视图中以交互方式运行时按 s 。
- 非交互模式:可以通过添加
--generate-mapping-file
标志在所有导出命令(resource
、、resource-group
query
、mapping file
)中生成映射文件。
如果用例需要预先导出修改,则可以手动构造或编辑映射文件。 下面是想要手动编辑自己的映射文件的一些示例:
用例 | 步骤 |
---|---|
资源组中有许多资源,但只需要导出几个资源。 | 从所选编辑器中删除 JSON 对象,并在导出之前保存文件。 |
你想要以一致的方式重命名所有资源。 | 将 resource-name 属性更改为与公司符合性标准匹配的任何名称。 |
需要按资源类型重构一组资源,例如网络或计算。 | 使用编辑器查找所有 Microsoft.Network 资源或 Microsoft.Compute 资源。 |
例如,假设针对包含虚拟机的资源组运行以下命令:
aztfexport rg --generate-mapping-file --non-interactive myResourceGroup
结果类似于以下 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"
}
}
只有映射文件中的对象值具有意义。 密钥(默认为 Azure resource_id
)只是此模式下的标识符。
现在,假设我们要保留资源组和任何与计算相关的资源,并修改 resource_name
值。
我们可以按如下所示更新映射文件:
{
"/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"
}
}
编辑映射文件后,可以使用以下命令导出映射文件:
aztfexport map -n "aztfexportResourceMapping.json"
优点:
- 由于正在编辑文件,因此可以使用编辑器查找和替换删除或编辑所需的内容。
- JSON 输出支持独特的功能,例如脚本筛选。
- 可以重命名资源以匹配命名标准。
- 可以将 JSON 重构为多个映射文件。
- 处理大量的资源。
缺点:
- 对于简单方案,此方法可能过于过度。
- 需要手动修改。
总结
本文介绍了使用 Azure Export for Terraform 导出时筛选资源的各种选项。
后续步骤
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈