创作 ARM 模板
本部分内容适用于熟悉 ARM 模板的用户。它提供了有关为 App Layering Azure 部署连接器创作模板的详细信息。有关 ARM 模板创作的一般信息,请参阅 Microsoft 文档。
输入
每种部署类型都传递一个参数,一个名为 al
的对象。此对象有两个属性,input
和 context
。input
属性是特定于每种部署类型的对象,其属性根据部署类型而变化。所有部署类型的 context
属性都相同。它包含有关 App Layering 任务、项目(层或映像模板)以及与当前部署相关的连接器配置的数据。有关参数对象的详细信息,请参阅 Azure 部署模板参数。
每个模板都必须在其 al
参数部分声明参数,如下所示:
{
...
"parameters": {
"al": {
"type": "object"
}
},
...
}
<!--NeedCopy-->
模板可以声明更多参数,但参数必须全部具有默认值。否则,App Layering 不会为其提供值。这对于使用只能在参数的默认值部分中使用的功能很有用,例如 utcNow
。
输出
所有 ARM 模板都可以有输出。使用 Azure 部署连接器,可以使用模板输出将信息传递给下一次部署。它们也可以用来覆盖某些默认行为。
使用 al
模板参数的 input
属性将部署的输出传递到下一个部署。
例如,当 缓存磁盘 部署具有以下输出时:
{
...
"outputs": {
"generation": {
"type": "string",
"value": "[variables('generation')]"
},
"name": {
"type": "string",
"value": "[variables('name')]"
},
}
...
}
<!--NeedCopy-->
引导映像 部署接收以下输入:
{
"input":
{
"type": "BootImage",
"source": {
"generation": "V2",
"name": "MyCoolDiskName"
}
},
"context": {
...
}
}
<!--NeedCopy-->
请注意, input
对象的 source
属性具有 缓存磁盘 部署模板指定的每个输出的属性。每个输出的来源取决于部署的类型。
部署类型详细信息
每种部署类型都有一组不同的输入和输出,可以更改 App Layering 操作的行为。本节描述了这些特定于部署的详细信息。
有关使用所有这些概念的真实示例,请参阅入门模板。
缓存磁盘
缓存磁盘部署必须创建托管磁盘资源。除磁盘外,您还可以选择创建其他资源。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
属性。此对象不包括其他部署的输出。
缓存磁盘输出
如果指定了引导映像部署,则部署的输出将传递给 引导映像 部署。否则,它会传递给计算机部署。
可以指定名为 diskId
的输出来明确告诉 App Layering 要使用哪个磁盘。如果未指定 diskId
输出,App Layering 会自动添加一个输出并将其设置为部署创建的第一个托管磁盘资源的资源 ID。diskId
指定的磁盘已将 App Layering 合成引擎引导映像上载到该磁盘。
引导映像
此部署使用缓存磁盘部署创建的托管磁盘创建资源。对于创建哪种类型的资源没有硬性要求。但是,它必须创建可在创建 VM 时用作操作系统磁盘源的资源,例如计算库映像版本。
引导映像磁盘要求
- 必须创建可用于创建 VM 操作系统磁盘的资源,其内容与将 ID 作为输入传入的磁盘相同。
例如,使用输入 diskId
作为源的计算库映像版本:
{
...
"resources": [
{
"type": "Microsoft.Compute/galleries/images/versions",
...
"properties": {
...
"storageProfile": {
"osDiskImage": {
"source": {
"id": "[parameters('al').input.source.diskId]"
}
}
}
...
}
}
]
...
}
<!--NeedCopy-->
引导映像输入
输入对象包含 source
属性。source
表示缓存磁盘部署的输出,并指定了每个输出的属性。使用 diskId
属性作为正在创建的资源的来源。
引导映像输出
引导映像部署的输出将传递到计算机部署。没有特殊或必需的输出。但是,您必须包括从创建的资源创建 VM 所需的数据,例如资源 ID。
计算机
计算机 部署必须创建虚拟机资源。根据 合成计算机的防火墙端口,虚拟机必须连接到一个可以访问 App Layering 设备的网络,反之亦然。
重要:
不要将 缓存磁盘部署创建的磁盘 连接到虚拟机。 缓存磁盘 是一种共享资源,被视为只读。创建磁盘的副本,并在不使用 Boot Image 部署时改为附加该副本。
计算机要求
- 必须创建虚拟机资源
- 虚拟机必须连接到允许与 App Layering 设备进行通信的网络
- 虚拟机的操作系统磁盘必须使用 引导映像 或 缓存磁盘 资源作为其源来创建
- 虚拟机的操作系统磁盘大小必须设置为
"[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
属性包含引导映像部署的输出(如果已指定)。否则,它包含 缓存磁盘 部署的输出。disk.size
属性包含磁盘的大小(以 GB 为单位)。
vm.userData
属性包含必须分配给创建的虚拟机的用户数据。
计算机输出
如果指定了分层映像部署,则 计算机 部署的输出将传递到 分层映像 部署。如果您使用的是 分层映像 部署,则必须在输出中包含虚拟机或操作系统磁盘的 ID,以便 分层映像 部署可以引用该虚拟机或操作系统磁盘。
可以指定名为 machineId
的输出来明确告诉 App Layering 要使用哪个虚拟机。如果未指定 machineId
输出,App Layering 会自动添加一个输出并将其设置为部署创建的第一个虚拟机资源的资源 ID。
可以指定名为 ipAddress
的输出来明确告诉 App Layering 使用哪个 IP 地址与计算机通信。如果未指定 ipAddress
输出,App Layering 将使用连接到虚拟机资源的主网卡的主私有地址。
可以指定名为 message
的输出以提供一条消息,该消息附加到 App Layering 用户界面中发布映像任务的最终状态和层创建任务的所需操作状态。如果未指定分层映像部署,则此消息仅在映像发布任务的最终状态下使用。
-
计算机入门模板将
message
输出参数设置为 Azure 门户中计算机的链接。
分层映像
分层映像部署从虚拟机或计算机部署创建的其他资源中创建资源。对于创建哪种类型的资源没有硬性要求。但是,它创建的资源可用作 Provisioning Services(例如 Machine Creation Services (MCS))的输入。计算库映像资源就是一个很好的例子。
分层映像磁盘要求
- 创建可供 Provisioning Services 用来创建虚拟机的资源。
例如,以下代码块使用输入 diskId
作为源创建计算库映像版本。这假设计算机部署包含名为的输出 diskId
,该输出设置为计算机操作系统磁盘 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
表示 计算机 部署的输出,并指定了每个输出的属性。diskName
属性是 App Layering 映像模板中指定的磁盘的名称。
分层映像输出
部署的输出不会传递给任何其他部署。但是,message
可以指定名为的输出来提供一条消息,该消息附加到 App Layering UI 中发布映像任务的最终状态中。