使用 Azure 资源管理器开发 Azure Stack Hub 的模板

开发应用时,在 Azure 与 Azure Stack Hub 之间具有模板可移植性非常重要。 本文提供了开发 Azure 资源管理器模板的注意事项。 使用这些模板,可以在 Azure 中为应用创建原型并测试部署,而无需访问 Azure Stack Hub 环境。

资源提供程序可用性

计划部署的模板只能使用 azure Stack Hub 中已提供或预览版的 azure 服务Microsoft。

公共命名空间

由于 Azure Stack Hub 托管在数据中心内,因此它具有不同于 Azure 公有云的服务终结点命名空间。 因此,尝试将它们部署到 Azure Stack Hub 时,Azure 资源管理器模板中的硬编码公共终结点会失败。 可以在部署期间使用 referenceconcatenate 函数动态生成服务终结点,以从资源提供程序中检索值。 例如,检索 primaryEndpoints.blob 以动态设置 osDisk.URI 终结点,而不是在模板中硬编码blob.core.windows.net

"osDisk": {"name": "osdisk","vhd": {"uri":
"[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('storageAccountName')), '2015-06-15').primaryEndpoints.blob, variables('vmStorageAccountContainerName'),
 '/',variables('OSDiskName'),'.vhd')]"}}

API 版本控制

Azure 服务版本在 Azure 和 Azure Stack Hub 之间可能有所不同。 每个资源都需要 apiVersion 属性,该属性定义提供的功能。 为了确保 Azure Stack Hub 中的 API 版本兼容性,以下 API 版本对于每个资源提供程序都有效:

资源供应者 apiVersion
计算 2015-06-15
网络 2015-06-15,2015-05-01-preview
储存 2016-01-012015-06-152015-05-01-preview
KeyVault 2015-06-01
应用服务 2015-08-01

模板函数

Azure 资源管理器 函数 提供生成动态模板所需的功能。 例如,可以将函数用于以下任务:

  • 连接或剪裁字符串。
  • 引用其他资源中的值。
  • 循环访问资源以部署多个实例。

这些函数在 Azure Stack Hub 中不可用:

  • 跳过

资源位置

Azure 资源管理器模板使用 location 属性在部署期间放置资源。 在 Azure 中,位置是指美国西部或南美洲等区域。 在 Azure Stack Hub 中,位置不同,因为 Azure Stack Hub 位于数据中心。 为了确保模板可在 Azure 和 Azure Stack Hub 之间传输,应在部署单个资源时引用资源组位置。 为此,可以使用此方法 [resourceGroup().Location] 确保所有资源都继承资源组位置。 以下代码是部署存储帐户时使用此函数的示例:

"resources": [
{
  "name": "[variables('storageAccountName')]",
  "type": "Microsoft.Storage/storageAccounts",
  "apiVersion": "[variables('apiVersionStorage')]",
  "location": "[resourceGroup().location]",
  "comments": "This storage account is used to store the VM disks",
  "properties": {
  "accountType": "Standard_LRS"
  }
}
]

后续步骤