创作 ARM 模板
本节面向熟悉 ARM 模板的用户。它提供了有关为 App Layering Azure Deployments 连接器创作模板的详细信息。有关常规 ARM 模板创作信息,请参阅 Microsoft 文档。
输入
每种部署类型都会传递一个参数,即名为 al 的对象。此对象具有两个属性:input 和 context。input 属性是特定于每种部署类型的对象,其属性会根据部署类型而变化。context 属性对于所有部署类型都是相同的。它包含有关 App Layering 任务、项目(层或映像模板)以及与当前部署关联的连接器配置的数据。有关参数对象的详细信息,请参阅 Azure Deployments 模板参数。
每个模板都必须在其参数部分声明 al 参数,如下所示:
{
...
"parameters": {
"al": {
"type": "object"
}
},
...
}
<!--NeedCopy-->
模板可以声明更多参数,但所有参数都必须具有默认值。否则,App Layering 不会为其提供值。这对于使用只能在参数的默认值部分中使用的函数(例如 utcNow)非常有用。
输出
所有 ARM 模板都可以有输出。借助 Azure Deployments 连接器,模板输出可用于将信息传递给下一个部署。它们还可以用于覆盖某些默认行为。
部署的输出使用 al 模板参数的 input 属性传递给下一个部署。
例如,当 Cache Disk 部署具有以下输出时:
{
...
"outputs": {
"generation": {
"type": "string",
"value": "[variables('generation')]"
},
"name": {
"type": "string",
"value": "[variables('name')]"
},
}
...
}
<!--NeedCopy-->
Boot Image 部署接收此输入:
{
"input":
{
"type": "BootImage",
"source": {
"generation": "V2",
"name": "MyCoolDiskName"
}
},
"context": {
...
}
}
<!--NeedCopy-->
请注意,input 对象的 source 属性为 Cache Disk 部署模板指定的每个输出都具有一个属性。每个输出的来源取决于部署类型。
部署类型详细信息
每种部署类型都有一组不同的输入和输出,可以更改 App Layering 操作的行为。本节将介绍这些特定于部署的详细信息。
有关使用所有这些概念的实际示例,请参阅 Starter Templates。
缓存磁盘
缓存磁盘部署必须创建托管磁盘资源。除了磁盘之外,您还可以选择创建其他资源。App Layering 设备必须具有使用 SAS 令牌(由设备生成)写入磁盘的权限。包含 App Layering 组合引擎的启动映像在创建后会上传到磁盘。
缓存磁盘要求
- 必须创建托管磁盘资源
- 托管磁盘的
createOption必须设置为"Upload" - 托管磁盘的
uploadSizeBytes必须设置为输入指定的uploadSize,例如"[parameters('al').input.uploadSize]" - App Layering 设备必须能够使用 SAS 令牌写入托管磁盘
{
...
"resources": [
{
"type": "Microsoft.Compute/disks",
...
"properties": {
...
"creationData": {
"createOption": "Upload",
"uploadSizeBytes": "[parameters('al').input.uploadSize]"
}
...
}
}
]
...
}
<!--NeedCopy-->
缓存磁盘输入
输入对象包括 size 和 uploadSize 属性。此对象不包含来自其他部署的输出。
缓存磁盘输出
如果指定了 Boot Image 部署,则部署的输出将传递给它。否则,它将传递给 Machine 部署。
可以指定名为 diskId 的输出,以明确告知 App Layering 要使用的磁盘。如果未指定 diskId 输出,App Layering 会自动添加一个,并将其设置为部署创建的第一个托管磁盘资源的资源 ID。diskId 指定的磁盘会上传 App Layering 组合引擎启动映像。
启动映像
此部署从 Cache Disk 部署创建的托管磁盘创建资源。对于创建的资源类型没有硬性要求。但是,它必须创建可用作创建 VM 时 OS 磁盘源的资源,例如计算库映像版本。
启动映像磁盘要求
- 必须创建可用作 VM 的 OS 磁盘源的资源,其内容与作为输入传入的 ID 磁盘相同。
例如,使用输入 diskId 作为源的计算库映像版本:
{
...
"resources": [
{
"type": "Microsoft.Compute/galleries/images/versions",
...
"properties": {
...
"storageProfile": {
"osDiskImage": {
"source": {
"id": "[parameters('al').input.source.diskId]"
}
}
}
...
}
}
]
...
}
<!--NeedCopy-->
启动映像输入
输入对象包括 source 属性。source 表示 Cache Disk 部署的输出,其中包含为每个指定输出的属性。使用 diskId 属性作为要创建的资源的源。
启动映像输出
Boot Image 部署的输出将传递给 Machine 部署。没有特殊或必需的输出。但是,您必须包含从创建的资源创建 VM 所需的数据,例如资源 ID。
计算机
Machine 部署必须创建虚拟机资源。虚拟机必须连接到可以访问 App Layering 设备的网络,反之亦然,具体请参阅 用于组合计算机的防火墙端口内部连接。
重要提示:
请勿将 Cache Disk 部署创建的磁盘附加到虚拟机。Cache Disk 是共享资源,被视为只读。如果不使用 Boot Image 部署,请创建磁盘副本并将其附加。
计算机要求
- 必须创建虚拟机资源
- 虚拟机必须连接到允许与 App Layering 设备进行通信的网络
- 虚拟机的 OS 磁盘必须使用 Boot Image 或 Cache Disk 资源作为其源创建
- 虚拟机的 OS 磁盘大小必须设置为
"[parameters('al').input.disk.size]" - 虚拟机的
userData属性必须设置为"[parameters('al').input.vm.userData]"
{
...
"resources": [
{
"type": "Microsoft.Compute/disks",
"name": "[variables('diskName')]",
...
"properties": {
...
"creationData": {
"createOption": "Copy",
"sourceResourceId": "[parameters('al').input.disk.image.diskId]"
},
"diskSizeGB": "[parameters('al').input.disk.size]",
...
}
},
{
"type": "Microsoft.Compute/virtualMachines",
...
"dependsOn": [
"[resourceId('Microsoft.Compute/disks', variables('diskName'))]"
],
...
"properties": {
...
"storageProfile": {
"osDisk": {
...
"createOption": "Attach",
"managedDisk": {
"id": "[resourceId('Microsoft.Compute/disks', variables('diskName'))]"
}
},
"dataDisks": []
},
...
"userData": "[parameters('al').input.vm.userData]"
...
}
}
]
...
}
<!--NeedCopy-->
计算机输入
输入对象包括 disk 和 vm 属性。
disk.image 属性包含 Boot Image 部署的输出(如果已指定)。否则,它包含 Cache Disk 部署的输出。disk.size 属性包含磁盘的大小(以 GB 为单位)。
vm.userData 属性包含必须分配给所创建虚拟机的用户数据。
计算机输出
如果指定了 Layered Image 部署,则 Machine 部署的输出将传递给它。如果您正在使用 Layered Image 部署,则必须在输出中包含 VM 或 OS 磁盘的 ID,以便 Layered Image 部署可以引用它。
可以指定名为 machineId 的输出,以明确告知 App Layering 要使用的虚拟机。如果未指定 machineId 输出,App Layering 会自动添加一个,并将其设置为部署创建的第一个虚拟机资源的资源 ID。
可以指定名为 ipAddress 的输出,以明确告知 App Layering 要用于与计算机通信的 IP 地址。如果未指定 ipAddress 输出,App Layering 将使用附加到虚拟机资源的主网卡的主专用地址。
可以指定名为 message 的输出,以提供一条消息,该消息将附加到发布映像任务的最终状态和 App Layering UI 中层创建任务的所需操作状态。仅当未指定 Layered Image 部署时,此消息才用于映像发布任务的最终状态。
-
Machine Starter Template 将
message输出参数设置为 Azure 门户中计算机的链接。
分层映像
Layered Image 部署从 Machine 部署创建的虚拟机或其他资源创建资源。对于创建的资源类型没有硬性要求。但是,它会创建一个可用作 Provisioning Service(例如 Machine Creation Services™ (MCS))输入的资源。计算库映像资源就是一个很好的例子。
分层映像磁盘要求
- 创建可由 Provisioning Service 用于创建虚拟机的资源。
例如,以下代码块使用输入 diskId 作为源创建计算库映像版本。这假设 Machine 部署包含一个名为 diskId 的输出,该输出设置为计算机 OS 磁盘的 ID:
{
...
"resources": [
{
"type": "Microsoft.Compute/galleries/images",
"name": "[format('{0}/{1}', variables('galleryName'), variables('name'))]",
...
"resources": [
{
"type": "versions",
...
"dependsOn": [
"[resourceId('Microsoft.Compute/galleries/images', variables('galleryName'), variables('name'))]"
],
...
"properties": {
...
"storageProfile": {
"osDiskImage": {
"source": {
"id": "[parameters('al').input.source.diskId]"
}
}
}
...
}
}
]
}
],
...
}
<!--NeedCopy-->
分层映像输入
输入对象包括 source 和 diskName 属性。source 表示 Machine 部署的输出,其中包含为每个指定输出的属性。diskName 属性是 App Layering 映像模板中指定的磁盘名称。
分层映像输出
部署的输出不会传递给任何其他部署。但是,可以指定名为 message 的输出,以提供一条消息,该消息将附加到 App Layering UI 中发布映像任务的最终状态。