入门模板
本节包含一套完整的 ARM 模板,可与 Azure Deployments 连接器配合使用。这些模板可以按原样使用,也可以根据特定需求进行修改。
这些模板创建的每个资源都带有一组相同的标签。这些标签包含有关部署上下文的有用信息,例如启动任务的用户名称及其输入的注释。
这些模板在连接器配置中广泛使用了自定义数据。自定义数据允许用户定义 location、vmSize、generation 等常见参数以及其他参数,而无需修改模板。
下表列出了这些模板使用的所有自定义数据属性。它指定了哪些模板适用于每个属性以及该属性是否为必需项。
R = 必需,O = 可选,- = 未使用
| 名称 | 类型 | 描述 | 默认值 | 缓存磁盘 | 启动映像 | 计算机 | 分层映像 |
|---|---|---|---|---|---|---|---|
| location | string | 创建资源的区域。 | 与目标资源组相同的区域。 | O | O | O | O |
| gallery | string | 用于创建映像的计算库名称。该库必须位于目标资源组中。 | - | - | R | - | R |
| storageSku | string | 用于托管磁盘的 SKU 名称。 | “StandardSSD_LRS” | O | - | O | - |
| NVMe | boolean |
true 表示使用 NVMe 磁盘控制器,否则为 false。所有部署类型都必须使用相同的值。 |
false |
O | O | O | O |
| generation | string | 虚拟机的代系。 | “V2” | - | O | O | O |
| trustedLaunch | boolean |
true 表示启用受信任启动,否则为 false。所有部署类型都必须使用相同的值。 |
false |
O | O | O | O |
| diskAccessId | string | 上传磁盘内容时使用的磁盘访问资源 ID。如果指定此项,则创建的磁盘将禁用公共网络访问。有关详细信息,请参阅 Azure 文档。 | null |
O | - | - | - |
| vmSize | string | 要创建的 VM 大小。 | “Standard_D2s_v3” | - | - | O | - |
| prefix | string | 机器部署创建的资源名称前缀。 | “al-“ | - | - | O | - |
| licenseType | string | 应用于所创建虚拟机的本地许可证类型。 | null |
- | - | O | - |
| subnetId | string | 要将 VM 网卡连接到的子网资源 ID。 | - | - | - | R | - |
| acceleratedNetworking | boolean |
true 表示启用加速网络,否则为 false。所有部署类型都必须使用相同的值。 |
false |
O | O | O | O |
| replicaCount | number | 每个区域的库映像版本的默认副本数。 | 1 | - | - | - | O |
| imageStorageAccountType | string | 指定用于存储映像的存储帐户类型。 | “Standard_LRS” | - | - | - | O |
| targetRegions | array | 库映像版本的目标区域。这指定为区域名称字符串数组和/或 TargetRegion 对象。该数组必须包含源磁盘的区域(由 location 自定义数据指定)。 |
由 location 自定义数据指定的区域。 |
- | - | - | O |
| publishAs | string or array | 发布映像的资源类型。指定为包含“galleryImage”和/或“managedDisk”的数组或字符串。 | [“galleryImage”] | - | - | - | O |
| diskNameFormat | string | 控制发布为托管磁盘的映像名称。“version”表示将版本附加到映像名称,“timestamp”表示将发布时间附加到映像名称。 | “version” | - | - | - | O |
自定义数据示例:
{
"gallery": "MyGallery",
"subnetId": "/subscriptions/ab3d1259-f5a9-407f-bbdd-bfd5701e2e94/resourceGroups/PDGTPB/providers/Microsoft.Network/virtualNetworks/MyVnet/subnets/mysubnet"
}
<!--NeedCopy-->
另一个自定义数据示例:
{
"location": "eastus",
"gallery": "MyGallery",
"storageSku": "Premium_LRS",
"trustedLaunch": true,
"diskAccessId": "/subscriptions/ab3d1259-f5a9-407f-bbdd-bfd5701e2e94/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/diskAccesses/MyDiskAccess",
"vmSize": "Standard_D4s_v3",
"subnetId": "/subscriptions/ab3d1259-f5a9-407f-bbdd-bfd5701e2e94/resourceGroups/MyResourceGroup/providers/Microsoft.Network/virtualNetworks/MyVnet/subnets/mysubnet",
"replicaCount": 2,
"targetRegions": [
"eastus",
{
"name": "eastus2",
"regionalReplicaCount": 5,
"storageAccountType": "Premium_LRS"
},
"westus"
]
}
<!--NeedCopy-->
缓存磁盘
创建托管磁盘。
缓存磁盘自定义数据
| 名称 | 类型 | 描述 | 默认值 | 必需 |
|---|---|---|---|---|
| location | string | 创建资源的区域。 | 与目标资源组相同的区域 | 否 |
| storageSku | string | 要使用的 SKU 名称。 | “StandardSSD_LRS” | 否 |
| NVMe | boolean |
true 表示启用 NVMe 磁盘控制器,否则为 false。所有部署类型都必须使用相同的值。 |
false |
否 |
| acceleratedNetworking | boolean |
true 表示启用加速网络,否则为 false。所有部署类型都必须使用相同的值。 |
false |
否 |
| trustedLaunch | boolean |
true 表示启用受信任启动,否则为 false。所有部署类型都必须使用相同的值。 |
false |
否 |
| diskAccessId | string | 上传磁盘内容时要使用的磁盘访问资源 ID。如果指定此项,则创建的磁盘将禁用公共网络访问。 | null |
否 |
缓存磁盘模板
- 1.2.0.0 - 添加了对加速网络和 NVMe 磁盘控制器的支持
- 1.1.0.0 - 添加了对受信任启动的支持
- 1.0.0.0 - 初始版本
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.2.0.0",
"parameters": {
"al": {
"type": "object"
}
},
"variables": {
"custom": "[parameters('al').context.config.custom]",
"location": "[if(contains(variables('custom'), 'location'), variables('custom').location, resourceGroup().location)]",
"name": "[concat(parameters('al').context.item.name,'-', parameters('al').context.item.id)]",
"tags": {
"alTaskId": "[parameters('al').context.taskId]",
"alUser": "[parameters('al').context.user]",
"alComment": "[parameters('al').context.comment]",
"alItemType": "[parameters('al').context.item.type]",
"alItemId": "[parameters('al').context.item.id]",
"alItemName": "[parameters('al').context.item.name]",
"alItemVersion": "[parameters('al').context.item.version.name]",
"alConfigId": "[parameters('al').context.config.id]",
"alConfigName": "[parameters('al').context.config.name]"
},
"hasDiskAccess": "[contains(variables('custom'), 'diskAccessId')]",
"storageSku": "[if(contains(variables('custom'), 'storageSku'), variables('custom').storageSku, 'StandardSSD_LRS')]",
"trustedLaunch": "[if(contains(variables('custom'), 'trustedLaunch'), variables('custom').trustedLaunch, false())]",
"acceleratedNetworking": "[if(contains(variables('custom'), 'acceleratedNetworking'), variables('custom').acceleratedNetworking, false())]",
"NVMe": "[if(contains(variables('custom'), 'NVMe'), variables('custom').NVMe, false())]"
},
"resources": [
{
"type": "Microsoft.Compute/disks",
"apiVersion": "2024-03-02",
"name": "[variables('name')]",
"location": "[variables('location')]",
"tags": "[variables('tags')]",
"sku": {
"name": "[variables('storageSku')]"
},
"properties": {
"creationData": {
"createOption": "Upload",
"uploadSizeBytes": "[parameters('al').input.uploadSize]"
},
"incremental": "false",
"diskAccessId": "[if(variables('hasDiskAccess'), variables('custom').diskAccessId, null())]",
"networkAccessPolicy": "[if(variables('hasDiskAccess'), 'AllowPrivate', 'AllowAll')]",
"publicNetworkAccess": "[if(variables('hasDiskAccess'), 'Disabled', 'Enabled')]",
"securityProfile": "[if(variables('trustedLaunch'), createObject('securityType', 'TrustedLaunch'), null())]",
"supportedCapabilities": {
"diskControllerTypes": "[if(variables('NVMe'), 'NVMe, SCSI', 'SCSI')]",
"acceleratedNetwork": "[variables('acceleratedNetworking')]"
}
}
}
]
}
<!--NeedCopy-->
启动映像
启动映像部署在自定义数据指定的库中创建库映像和映像版本。它输出所创建的计算库映像版本的 ID,供计算机模板使用。
启动映像自定义数据
| 名称 | 类型 | 描述 | 默认值 | 必需 |
|---|---|---|---|---|
| location | string | 创建资源的区域。 | 与目标资源组相同的区域。 | 否 |
| generation | string | 磁盘中使用的虚拟机的代系。 | “V2” | 否 |
| NVMe | boolean |
true 表示启用 NVMe 磁盘控制器,否则为 false。所有部署类型都必须使用相同的值。 |
false |
否 |
| acceleratedNetworking | boolean |
true 表示启用加速网络,否则为 false。所有部署类型都必须使用相同的值。 |
false |
否 |
| trustedLaunch | boolean |
true 表示启用受信任启动,否则为 false。所有部署类型都必须使用相同的值。 |
false |
否 |
| gallery | string | 用于创建映像的计算库名称。该库必须位于目标资源组中。 | - | 是 |
启动映像模板
- 1.2.0.0 - 添加了对加速网络和 NVMe 磁盘控制器的支持
- 1.1.0.0 - 添加了对受信任启动的支持
- 1.0.0.0 - 初始版本
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.2.0.0",
"parameters": {
"al": {
"type": "object"
}
},
"variables": {
"custom": "[parameters('al').context.config.custom]",
"location": "[if(contains(variables('custom'), 'location'), variables('custom').location, resourceGroup().location)]",
"tags": {
"alTaskId": "[parameters('al').context.taskId]",
"alUser": "[parameters('al').context.user]",
"alComment": "[parameters('al').context.comment]",
"alItemType": "[parameters('al').context.item.type]",
"alItemId": "[parameters('al').context.item.id]",
"alItemName": "[parameters('al').context.item.name]",
"alItemVersion": "[parameters('al').context.item.version.name]",
"alConfigId": "[parameters('al').context.config.id]",
"alConfigName": "[parameters('al').context.config.name]"
},
"name": "[concat(parameters('al').context.item.name, '.', replace(parameters('al').context.config.id, '-', ''), '.', parameters('al').context.item.id)]",
"version": "[parameters('al').context.item.version.name]",
"galleryName": "[variables('custom').gallery]",
"generation": "[if(contains(variables('custom'), 'generation'), variables('custom').generation, 'V2')]",
"acceleratedNetworking": "[if(contains(variables('custom'), 'acceleratedNetworking'), variables('custom').acceleratedNetworking, false())]",
"NVMe": "[if(contains(variables('custom'), 'NVMe'), variables('custom').NVMe, false())]",
"trustedLaunch": "[if(contains(variables('custom'), 'trustedLaunch'), variables('custom').trustedLaunch, false())]",
"possibleFeatures": [
{
"include": "[variables('trustedLaunch')]",
"feature": {
"name": "SecurityType",
"value": "TrustedLaunch"
}
},
{
"include": "[variables('acceleratedNetworking')]",
"feature": {
"name": "IsAcceleratedNetworkSupported",
"value": "True"
}
},
{
"include": "[variables('NVMe')]",
"feature": {
"name": "DiskControllerTypes",
"value": "NVMe, SCSI"
}
}
]
},
"resources": [
{
"type": "Microsoft.Compute/galleries/images",
"name": "[concat(variables('galleryName'), '/', variables('name'))]",
"apiVersion": "2021-07-01",
"location": "[variables('location')]",
"tags": "[variables('tags')]",
"properties": {
"description": "[parameters('al').context.item.description]",
"features": "[map(filter(variables('possibleFeatures'), lambda('x', lambdaVariables('x').include)), lambda('x', lambdaVariables('x').feature))]",
"hyperVGeneration": "[variables('generation')]",
"osType": "Windows",
"osState": "Specialized",
"endOfLifeDate": "2030-01-01T00:00:00Z",
"identifier": {
"publisher": "Citrix",
"offer": "[parameters('al').context.config.id]",
"sku": "[parameters('al').context.item.id]"
}
},
"resources": [
{
"type": "versions",
"apiVersion": "2021-07-01",
"name": "[variables('version')]",
"location": "[variables('location')]",
"dependsOn": [
"[resourceId('Microsoft.Compute/galleries/images', variables('galleryName'), variables('name'))]"
],
"tags": "[variables('tags')]",
"properties": {
"publishingProfile": {
"replicaCount": 1,
"targetRegions": [
{
"name": "[variables('location')]"
}
]
},
"storageProfile": {
"osDiskImage": {
"source": {
"id": "[parameters('al').input.source.diskId]"
}
}
}
}
}
]
}
],
"outputs": {
"id": {
"type": "string",
"value": "[resourceId('Microsoft.Compute/galleries/images/versions', variables('galleryName'), variables('name'), variables('version'))]"
}
}
}
<!--NeedCopy-->
计算机
计算机部署创建虚拟机、NIC 和托管磁盘。此模板无论是否指定启动映像部署均可使用。
计算机自定义数据
| 名称 | 类型 | 描述 | 默认值 | 必需 |
|---|---|---|---|---|
| location | string | 创建资源的区域。 | 与目标资源组相同的区域。 | 否 |
| storageSku | string | 所创建磁盘的 SKU 名称。 | “StandardSSD_LRS” | 否 |
| generation | string | 虚拟机的代系。 | “V2” | 否 |
| NVMe | boolean |
true 表示使用 NVMe 磁盘控制器,否则为 false。所有部署类型都必须使用相同的值。 |
false |
否 |
| acceleratedNetworking | boolean |
true 表示启用加速网络,否则为 false。所有部署类型都必须使用相同的值。 |
false |
否 |
| trustedLaunch | boolean |
true 表示启用受信任启动,否则为 false。所有部署类型都必须使用相同的值。 |
false |
否 |
| secureBoot | boolean |
true 表示启用安全启动,否则为 false。仅当 trustedLaunch 设置为 true 时才应用此项。 |
true |
否 |
| vTpm | boolean |
true 表示启用 vTPM,否则为 false。仅当 trustedLaunch 设置为 true 时才应用此项。 |
true |
否 |
| vmSize | string | 要创建的 VM 大小。 | “Standard_D2s_v3” | 否 |
| licenseType | string | 应用于虚拟机的本地许可证类型。 | null |
否 |
| subnetId | string | 要将 NIC 连接到的子网资源 ID。 | - | 是 |
| prefix | string | 要添加到所创建资源名称前缀。 | “al-“ | 否 |
计算机模板
- 1.2.0.0
- 添加了对加速网络的支持
- 添加了对 NVMe 磁盘控制器的支持
- 添加了对 IPS 导出的支持
- 添加了自定义资源名称前缀的功能
- 将 IP 地址添加到 App Layering 子任务中显示的消息
- 禁用了对 OS 磁盘的网络访问
- 1.1.0.0 - 添加了对受信任启动的支持
- 1.0.0.0 - 初始版本
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.2.0.0",
"parameters": {
"al": {
"type": "object"
}
},
"variables": {
"custom": "[parameters('al').context.config.custom]",
"location": "[if(contains(variables('custom'), 'location'), variables('custom').location, resourceGroup().location)]",
"prefix": "[if(contains(variables('custom'), 'prefix'), variables('custom').prefix, 'al-')]",
"name": "[concat(variables('prefix'), parameters('al').context.taskId)]",
"vmName": "[concat(variables('name'), '-vm')]",
"nicName": "[concat(variables('name'), '-nic')]",
"diskName": "[concat(variables('name'), '-disk')]",
"diskId": "[resourceId('Microsoft.Compute/disks', variables('diskName'))]",
"tags": {
"alTaskId": "[parameters('al').context.taskId]",
"alUser": "[parameters('al').context.user]",
"alComment": "[parameters('al').context.comment]",
"alItemType": "[parameters('al').context.item.type]",
"alItemId": "[parameters('al').context.item.id]",
"alItemName": "[parameters('al').context.item.name]",
"alItemVersion": "[parameters('al').context.item.version.name]",
"alConfigId": "[parameters('al').context.config.id]",
"alConfigName": "[parameters('al').context.config.name]"
},
"source": "[parameters('al').input.disk.image]",
"isFromImage": "[not(contains(variables('source'), 'diskId'))]",
"generation": "[if(contains(variables('custom'), 'generation'), variables('custom').generation, 'V2')]",
"vmSize": "[if(contains(variables('custom'), 'vmSize'), variables('custom').vmSize, 'Standard_D2s_v3')]",
"storageSku": "[if(contains(variables('custom'), 'storageSku'), variables('custom').storageSku, 'StandardSSD_LRS')]",
"trustedLaunch": "[if(contains(variables('custom'), 'trustedLaunch'), variables('custom').trustedLaunch, false())]",
"secureBoot": "[if(contains(variables('custom'), 'secureBoot'), variables('custom').secureBoot, variables('trustedLaunch'))]",
"vTpm": "[if(contains(variables('custom'), 'vTpm'), variables('custom').vTpm, variables('trustedLaunch'))]",
"acceleratedNetworking": "[if(contains(variables('custom'), 'acceleratedNetworking'), variables('custom').acceleratedNetworking, false())]",
"NVMe": "[if(contains(variables('custom'), 'NVMe'), variables('custom').NVMe, false())]",
"securityProfile": {
"securityType": "TrustedLaunch",
"uefiSettings": {
"secureBootEnabled": "[variables('secureBoot')]",
"vTpmEnabled": "[variables('vTpm')]"
}
},
"dataDiskTemplate": {
"createOption": "Attach",
"deleteOption": "Delete",
"managedDisk": {
"id": "ToBeReplaced"
}
},
"dataDiskName": "[concat(variables('name'), '-disk{0}')]",
"additionalDisks": "[if(contains(parameters('al').input, 'additionalDisks'), parameters('al').input.additionalDisks, createArray())]",
"additionalDiskIds": "[map(variables('additionalDisks'), lambda('x', lambdaVariables('x').diskId))]",
"dataDiskIds": "[map(variables('additionalDiskIds'), lambda('x', 'i', resourceId('Microsoft.Compute/disks',format(variables('dataDiskName'), lambdaVariables('i')))))]"
},
"resources": [
{
"type": "Microsoft.Network/networkInterfaces",
"apiVersion": "2020-11-01",
"name": "[variables('nicName')]",
"location": "[variables('location')]",
"tags": "[variables('tags')]",
"properties": {
"ipConfigurations": [
{
"name": "ipconfig1",
"properties": {
"privateIPAllocationMethod": "Dynamic",
"subnet": {
"id": "[variables('custom').subnetId]"
},
"primary": true,
"privateIPAddressVersion": "IPv4"
}
}
],
"dnsSettings": {
"dnsServers": []
},
"enableAcceleratedNetworking": "[variables('acceleratedNetworking')]",
"enableIPForwarding": false
}
},
{
"condition": "[not(variables('isFromImage'))]",
"type": "Microsoft.Compute/disks",
"apiVersion": "2021-08-01",
"name": "[variables('diskName')]",
"location": "[variables('location')]",
"tags": "[variables('tags')]",
"sku": {
"name": "[variables('storageSku')]"
},
"properties": {
"osType": "Windows",
"hyperVGeneration": "[variables('generation')]",
"creationData": {
"createOption": "Copy",
"sourceResourceId": "[variables('source').diskId]"
},
"diskSizeGB": "[parameters('al').input.disk.size]",
"networkAccessPolicy": "DenyAll",
"publicNetworkAccess": "Disabled",
"supportedCapabilities": {
"acceleratedNetwork": "[variables('acceleratedNetworking')]"
}
}
},
{
"copy": {
"name": "data-disk-loop",
"count": "[length(variables('additionalDiskIds'))]",
"mode": "Parallel"
},
"type": "Microsoft.Compute/disks",
"apiVersion": "2021-08-01",
"name": "[format(variables('dataDiskName'), copyIndex())]",
"location": "[variables('location')]",
"tags": "[variables('tags')]",
"sku": {
"name": "[variables('storageSku')]"
},
"properties": {
"creationData": {
"createOption": "Copy",
"sourceResourceId": "[variables('additionalDiskIds')[copyIndex()]]"
},
"networkAccessPolicy": "DenyAll",
"publicNetworkAccess": "Disabled"
}
},
{
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2022-08-01",
"name": "[variables('vmName')]",
"location": "[variables('location')]",
"dependsOn": [
"[resourceId('Microsoft.Network/networkInterfaces', variables('nicName'))]",
"[variables('diskId')]",
"data-disk-loop"
],
"tags": "[variables('tags')]",
"properties": {
"hardwareProfile": {
"vmSize": "[variables('vmSize')]"
},
"securityProfile": "[if(variables('trustedLaunch'), variables('securityProfile'), null())]",
"storageProfile": {
"imageReference": "[if(variables('isFromImage'), createObject('id', variables('source').id), null())]",
"diskControllerType": "[if(variables('NVMe'), 'NVMe', null())]",
"osDisk": {
"osType": "Windows",
"createOption": "[if(variables('isFromImage'), 'FromImage', 'Attach')]",
"caching": "ReadWrite",
"deleteOption": "Delete",
"diskSizeGB": "[parameters('al').input.disk.size]",
"managedDisk": "[if(variables('isFromImage'), createObject('storageAccountType', variables('storageSku')), createObject('id', variables('diskId')))]"
},
"dataDisks": "[map(variables('dataDiskIds'), lambda('x', 'i', union(variables('dataDiskTemplate'), createObject('lun', lambdaVariables('i'), 'managedDisk', createObject('id', lambdaVariables('x'))))))]"
},
"networkProfile": {
"networkInterfaces": [
{
"id": "[resourceId('Microsoft.Network/networkInterfaces', variables('nicName'))]"
}
]
},
"diagnosticsProfile": {
"bootDiagnostics": {
"enabled": true
}
},
"licenseType": "[if(contains(variables('custom'), 'licenseType'), variables('custom').licenseType, null())]",
"userData": "[parameters('al').input.vm.userData]"
}
}
],
"outputs": {
"diskId": {
"type": "string",
"value": "[reference(variables('vmName')).storageProfile.osDisk.managedDisk.id]"
},
"message": {
"type": "string",
"value": "[format('See [link=\"{0}/#@{1}/resource/{2}\"]{2}[/link]. IP Address: {3}', environment().portal, tenant().tenantId, resourceId('Microsoft.Compute/virtualMachines', variables('vmName')), reference(variables('nicName')).ipConfigurations[0].properties.privateIPAddress)]"
}
}
}
<!--NeedCopy-->
分层映像
分层映像部署可以创建两种类型的资源:库映像版本和/或托管磁盘。这两种资源类型都使用正在发布的 App Layering 映像模板的名称及其构建的版本号进行命名。版本号是使用 App Layering 映像模板磁盘名称中的主要版本号和次要版本号构建的。如果磁盘名称未格式化为数字版本(number.number),则默认应用 1.0。修补程序号是 App Layering 映像模板的版本号(已发布的次数)。库映像被分配名称,库映像版本被分配版本号。托管磁盘根据 diskNameFormat 附加版本号或当前时间戳进行命名。
库映像和版本在自定义数据指定的库中创建。当映像多次发布时,计算库映像会添加一个新版本,而旧版本则保留。
分层映像自定义数据
R = 必需,O = 可选,- = 未使用
| 名称 | 类型 | 描述 | 默认值 | 库映像 | 托管磁盘 |
|---|---|---|---|---|---|
| publishAs | string or array | 要创建的资源类型。指定为包含“galleryImage”和/或“managedDisk”的数组或字符串。 | [“galleryImage”] | O | R |
| location | string | 创建资源的区域。 | 与目标资源组相同的区域 | O | O |
| generation | string | 映像将支持的虚拟机的代系。 | “V2” | O | O |
| NVMe | boolean |
true 表示启用 NVMe 磁盘控制器,否则为 false。所有部署类型都必须使用相同的值。 |
false |
O | O |
| acceleratedNetworking | boolean |
true 表示启用加速网络,否则为 false。所有部署类型都必须使用相同的值。 |
false |
O | O |
| trustedLaunch | boolean |
true 表示启用受信任启动,否则为 false。所有部署类型都必须使用相同的值。 |
false |
O | O |
| gallery | string | 用于创建映像的计算库名称。该库必须位于目标资源组中。 | - | R | - |
| replicaCount | number | 每个区域的库映像版本的默认副本数。 | 1 | O | - |
| imageStorageAccountType | string | 指定用于存储映像的存储帐户类型。 | “Standard_LRS” | O | - |
| targetRegions | array | 库映像版本的目标区域。这指定为区域名称字符串数组和/或 TargetRegion 对象。该数组必须包含源磁盘的区域(由 location 自定义数据指定)。 |
由 location 自定义数据指定的区域 |
O | - |
| storageSku | string | 要使用的 SKU 名称。 | “StandardSSD_LRS” | - | O |
| diskAccessId | string | 上传磁盘内容时要使用的磁盘访问资源 ID。如果指定此项,则创建的磁盘将禁用公共网络访问。 | null |
- | O |
| diskNameFormat | string | 控制发布为托管磁盘的映像名称。“version”表示将版本附加到映像名称,“timestamp”表示将发布时间附加到映像名称。 | “version” | - | O |
分层映像模板
- 1.2.0.0
- 添加了对加速网络的支持
- 添加了对 NVMe 磁盘控制器的支持
- 添加了指定库映像版本存储帐户类型的能力
- 添加了使用发布时间而非映像版本命名托管磁盘的选项(类似于旧版命名)
- 修复了即使未发布为库映像版本也要求
galleryName的错误
- 1.1.0.0
- 添加了对受信任启动的支持
- 添加了对库映像版本的副本计数和目标区域支持
- 添加了对发布为托管磁盘的支持
- 1.0.0.0 - 初始版本
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.2.0.0",
"parameters": {
"al": {
"type": "object"
},
"timestamp": {
"type": "string",
"defaultValue": "[utcNow('yyyy-MM-dd_HH-mm-ss')]"
}
},
"variables": {
"invalidChars": [ " ", "(", ")", "[[", "]", "{", "}", "!", "@", "#", "$", "%", "^", "&", "*", "+", "/", "\\", "'", "\"", "|", "`", "~", "<", ">", ",", "?", "*" ],
"numericChars": [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" ],
"custom": "[parameters('al').context.config.custom]",
"location": "[if(contains(variables('custom'), 'location'), variables('custom').location, resourceGroup().location)]",
"name": "[join(split(parameters('al').context.item.name, variables('invalidChars')), '_')]",
"tags": {
"alTaskId": "[parameters('al').context.taskId]",
"alUser": "[parameters('al').context.user]",
"alComment": "[parameters('al').context.comment]",
"alItemType": "[parameters('al').context.item.type]",
"alItemId": "[parameters('al').context.item.id]",
"alItemName": "[parameters('al').context.item.name]",
"alItemVersion": "[parameters('al').context.item.version.name]",
"alConfigId": "[parameters('al').context.config.id]",
"alConfigName": "[parameters('al').context.config.name]"
},
"splitVer": "[split(parameters('al').input.diskName, '.')]",
"major": "[if(equals(0, length(join(split(variables('splitVer')[0], variables('numericChars')), ''))), variables('splitVer')[0], '1')]",
"minor": "[if(greater(length(variables('splitVer')), 1), if(equals(0, length(join(split(variables('splitVer')[1], variables('numericChars')), ''))), variables('splitVer')[1], '0'), '0')]",
"version": "[format('{0}.{1}.{2}', variables('major'), variables('minor'), parameters('al').context.item.version.number)]",
"galleryName": "[if(contains(variables('custom'), 'gallery'), variables('custom').gallery, 'galleryName.required.in.custom.data')]",
"generation": "[if(contains(variables('custom'), 'generation'), variables('custom').generation, 'V2')]",
"trustedLaunch": "[if(contains(variables('custom'), 'trustedLaunch'), variables('custom').trustedLaunch, false())]",
"acceleratedNetworking": "[if(contains(variables('custom'), 'acceleratedNetworking'), variables('custom').acceleratedNetworking, false())]",
"NVMe": "[if(contains(variables('custom'), 'NVMe'), variables('custom').NVMe, false())]",
"replicaCount": "[if(contains(variables('custom'), 'replicaCount'), variables('custom').replicaCount, 1)]",
"targetRegions": "[if(contains(variables('custom'), 'targetRegions'), variables('custom').targetRegions, createArray(variables('location')))]",
"diskNames": {
"version": "[format('{0}_{1}-{2}-{3}', variables('name'), variables('major'), variables('minor'), parameters('al').context.item.version.number)]",
"timestamp": "[format('{0}_{1}', variables('name'), parameters('timestamp'))]"
},
"diskName": "[variables('diskNames')[coalesce(tryGet(variables('custom'), 'diskNameFormat'), 'version')]]",
"hasDiskAccess": "[contains(variables('custom'), 'diskAccessId')]",
"storageSku": "[if(contains(variables('custom'), 'storageSku'), variables('custom').storageSku, 'StandardSSD_LRS')]",
"imageStorageAccountType": "[coalesce(tryGet(variables('custom'), 'imageStorageAccountType'), 'Standard_LRS')]",
"publishAs": "[if(contains(variables('custom'), 'publishAs'), variables('custom').publishAs, createArray('galleryImage'))]",
"galleryLink": "[format('[link=\"{0}/#@{1}/resource/{2}\"]{2}[/link].', environment().portal, tenant().tenantId, resourceId('Microsoft.Compute/galleries/images/versions', variables('galleryName'), variables('name'), variables('version')))]",
"diskLink": "[format('[link=\"{0}/#@{1}/resource/{2}\"]{2}[/link].', environment().portal, tenant().tenantId, resourceId('Microsoft.Compute/disks', variables('diskName')))]",
"outputLinks": "[filter(createArray(if(contains(variables('publishAs'), 'galleryImage'), variables('galleryLink'), null()), if(contains(variables('publishAs'), 'managedDisk'), variables('diskLink'), null())), lambda('link', not(equals(lambdaVariables('link'), null()))))]",
"possibleFeatures": [
{
"include": "[variables('trustedLaunch')]",
"feature": {
"name": "SecurityType",
"value": "TrustedLaunch"
}
},
{
"include": "[variables('acceleratedNetworking')]",
"feature": {
"name": "IsAcceleratedNetworkSupported",
"value": "True"
}
},
{
"include": "[variables('NVMe')]",
"feature": {
"name": "DiskControllerTypes",
"value": "NVMe, SCSI"
}
}
]
},
"resources": [
{
"condition": "[contains(variables('publishAs'), 'galleryImage')]",
"type": "Microsoft.Compute/galleries/images",
"name": "[format('{0}/{1}', variables('galleryName'), variables('name'))]",
"apiVersion": "2021-07-01",
"location": "[variables('location')]",
"properties": {
"description": "[parameters('al').context.item.description]",
"features": "[map(filter(variables('possibleFeatures'), lambda('x', lambdaVariables('x').include)), lambda('x', lambdaVariables('x').feature))]",
"hyperVGeneration": "[variables('generation')]",
"osType": "Windows",
"osState": "Specialized",
"endOfLifeDate": "2030-01-01T00:00:00Z",
"identifier": {
"publisher": "AppLayering",
"offer": "[variables('name')]",
"sku": "[variables('generation')]"
}
},
"tags": "[variables('tags')]",
"resources": [
{
"condition": "[contains(variables('publishAs'), 'galleryImage')]",
"type": "versions",
"apiVersion": "2022-03-03",
"name": "[variables('version')]",
"location": "[variables('location')]",
"dependsOn": [
"[resourceId('Microsoft.Compute/galleries/images', variables('galleryName'), variables('name'))]"
],
"tags": "[variables('tags')]",
"properties": {
"publishingProfile": {
"replicaCount": "[variables('replicaCount')]",
"storageAccountType": "[variables('imageStorageAccountType')]",
"targetRegions": "[map(variables('targetRegions'), lambda('item', if(contains(lambdaVariables('item'), 'name'), lambdaVariables('item'), createObject('name', lambdaVariables('item')))))]"
},
"storageProfile": {
"osDiskImage": {
"source": {
"id": "[parameters('al').input.source.diskId]"
}
}
}
}
}
]
},
{
"condition": "[contains(variables('publishAs'), 'managedDisk')]",
"type": "Microsoft.Compute/disks",
"apiVersion": "2021-08-01",
"name": "[variables('diskName')]",
"location": "[variables('location')]",
"tags": "[variables('tags')]",
"sku": {
"name": "[variables('storageSku')]"
},
"properties": {
"osType": "Windows",
"hyperVGeneration": "[variables('generation')]",
"creationData": {
"createOption": "Copy",
"sourceResourceId": "[parameters('al').input.source.diskId]"
},
"diskAccessId": "[if(variables('hasDiskAccess'), variables('custom').diskAccessId, null())]",
"networkAccessPolicy": "[if(variables('hasDiskAccess'), 'AllowPrivate', 'AllowAll')]",
"publicNetworkAccess": "[if(variables('hasDiskAccess'), 'Disabled', 'Enabled')]"
}
}
],
"outputs": {
"message": {
"type": "string",
"value": "[if(empty(variables('outputLinks')), null(), format('See {0}.', join(variables('outputLinks'), ' and ')))]"
}
}
}
<!--NeedCopy-->