导出包含 VM 扩展的资源组

可以将 Azure 资源组导出到新的 Azure 资源管理器模板中,然后可以重新部署该模板。 导出过程会对现有资源进行解释,并创建一个资源管理器模板,该模板在部署后会生成类似的资源组。 对包含虚拟机 (VM) 扩展的资源组使用导出选项时,需要考虑扩展兼容性和受保护设置等项。

本文详细介绍了资源组导出过程如何适用于虚拟机扩展。 它包含支持的扩展列表以及如何处理安全数据的详细信息。

支持的 VM 扩展

许多 VM 扩展可用。 无法使用自动化脚本功能将所有扩展导出到资源管理器模板中。 如果某个虚拟机扩展不受支持,则需通过手动方式将其重新放置到导出的模板中。

可以使用自动化脚本功能导出以下扩展:

Acronis 备份, Acronis 备份 Linux, BGInfo, BMC Control-M 代理 Linux, BMC Control-M 代理 Windows, Chef 客户端, 自定义脚本, 自定义脚本扩展, 适用于 Linux 的自定义脚本, Datadog Linux 代理, Datadog Windows 代理, Docker 扩展, DSC 扩展, Dynatrace Linux, Dynatrace Windows, HPE 安全应用程序 Defender for Cloud, IaaS 反恶意软件, IaaS 诊断, Linux Chef 客户端, Linux 诊断, 适用于 Linux 的 OS 修补, Puppet 代理, Site24x7 APM 见解, Site24x7 Linux Server, Site24x7 Windows Server, Trend Micro DSA, Trend Micro DSA Linux, VM Access For Linux, VM Access For Linux, VM 快照, VM 快照 Linux

导出资源组

要将资源组导出到可重用模板中,请完成以下步骤:

  1. 登录到 Azure 门户。
  2. 在“中心”菜单上,选择“资源组”。
  3. 从列表中选择目标资源组。
  4. 在“资源组”窗格中,选择“自动化”部分下的“导出模板”。

Screenshot that shows selections for exporting a resource group into a template.

Azure 资源管理器自动化脚本可生成一个资源管理器模板、一个参数文件以及多个示例部署脚本(例如 PowerShell 和 Azure CLI 脚本)。 此时,可以使用“下载”按钮下载导出的模板,将模板添加到模板库,或使用“部署”按钮重新部署模板。

配置受保护的设置

许多 Azure 虚拟机扩展包括受保护的设置配置,可用于加密敏感数据(例如凭据和配置字符串)。 受保护的设置不可通过自动化脚本导出。 如有必要,可将受保护的设置重新插入到导出的模板中。

步骤 1:移除模板参数

导出资源组时,会创建单个模板参数,以向导出的受保护设置提供值。 可以移除此参数。

要移除此参数,可查看参数列表并删除类似于此 JSON 示例的参数:

"extensions_extensionname_protectedSettings": {
	"defaultValue": null,
	"type": "SecureObject"
}

步骤 2:获取受保护设置的属性

由于每个受保护设置都有一组必需的属性,因此需要收集这些属性的列表。 可以在 GitHub 上的 Azure 资源管理器架构中查找受保护设置配置的每个参数。 此架构仅包括适用于本文概述部分列出的扩展的参数集。

从架构存储库中搜索所需的扩展。 找到扩展的 protectedSettings 对象后,记下每个参数。 在 IaasDiagnostic 扩展的以下示例中,所需参数为 storageAccountNamestorageAccountKeystorageAccountEndPoint

"protectedSettings": {
	"type": "object",
	"properties": {
		"storageAccountName": {
			"type": "string"
		},
		"storageAccountKey": {
			"type": "string"
		},
		"storageAccountEndPoint": {
			"type": "string"
		}
	},
	"required": [
		"storageAccountName",
		"storageAccountKey",
		"storageAccountEndPoint"
	]
}

步骤 3:重新创建受保护配置

在导出的模板上,搜索 protectedSettings。 将导出的受保护设置对象替换为新的对象,其中包括所需的扩展参数以及每个参数的值。

IaasDiagnostic 扩展为例,新的受保护设置配置将如以下示例所示:

"protectedSettings": {
	"storageAccountName": "[parameters('storageAccountName')]",
	"storageAccountKey": "[parameters('storageAccountKey')]",
	"storageAccountEndPoint": "https://core.chinacloudapi.cn"
}

最终的扩展资源看起来类似于以下 JSON 示例:

{
	"name": "Microsoft.Insights.VMDiagnosticsSettings",
	"type": "extensions",
	"location": "[resourceGroup().location]",
	"apiVersion": "[variables('apiVersion')]",
	"dependsOn": [
		"[concat('Microsoft.Compute/virtualMachines/', variables('vmName'))]"
	],
	"tags": {
		"displayName": "AzureDiagnostics"
	},
	"properties": {
		"publisher": "Microsoft.Azure.Diagnostics",
		"type": "IaaSDiagnostics",
		"typeHandlerVersion": "1.5",
		"autoUpgradeMinorVersion": true,
		"settings": {
			"xmlCfg": "[base64(concat(variables('wadcfgxstart'), variables('wadmetricsresourceid'), variables('vmName'), variables('wadcfgxend')))]",
			"storageAccount": "[parameters('existingdiagnosticsStorageAccountName')]"
		},
		"protectedSettings": {
			"storageAccountName": "[parameters('storageAccountName')]",
			"storageAccountKey": "[parameters('storageAccountKey')]",
			"storageAccountEndPoint": "https://core.chinacloudapi.cn"
		}
	}
}

如果使用模板参数来提供属性值,则需要创建它们。 在为受保护的设置值创建模板参数时,请使用 SecureString 参数类型来帮助保护敏感值。 如需详细了解如何使用参数,请参阅创作 Azure 资源管理器模板

IaasDiagnostic 扩展的示例中,将会在资源管理器模板的“参数”部分创建以下参数:

"storageAccountName": {
	"defaultValue": null,
	"type": "SecureString"
},
"storageAccountKey": {
	"defaultValue": null,
	"type": "SecureString"
}

此时,可以使用任何模板部署方法部署模板。