将模板模块化

已完成

使用 Azure 资源管理器模板时,最好通过将它们分解为单独的组件来模块化它们。

使用的主要方法是使用链接模板。

它允许你将解决方案分解为目标组件,并在不同的部署中重用这些不同的元素。

链接的模板

向主模板添加部署资源以将一个模板链接到另一个模板。

"resources": [
  {
      "apiVersion": "2017-05-10",
      "name": "linkedTemplate",
      "type": "Microsoft.Resources/deployments",
      "properties": {
          "mode": "Incremental",
          <link-to-external-template>
      }
  }
]


嵌套模板

还可以在主模板中嵌套模板,使用模板属性并指定模板语法。

它在一定程度上有助于模块化,但是划分不同的组件可能会产生一个相当大的主文件,因为所有元素都在单个文件中。

"resources": [
  {
    "apiVersion": "2017-05-10",
    "name": "nestedTemplate",
    "type": "Microsoft.Resources/deployments",
    "properties": {
      "mode": "Incremental",
      "template": {
        "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "resources": [
          {
            "type": "Microsoft.Storage/storageAccounts",
            "name": "[variables('storageName')]",
            "apiVersion": "2015-06-15",
            "location": "West US",
            "properties": {
              "accountType": "Standard_LRS"
            }
          }
        ]
      }
    }
  }
]

备注

对于嵌套模板,不能使用在嵌套模板本身中定义的参数或变量。 只能使用主模板中的参数和变量。

为部署资源提供的属性会因链接到外部模板或在主模板中嵌套内联模板而异。

部署模式

使用模板部署资源时,有三个选项:

  • 验证。 此选项编译模板、验证部署、确保模板正常运行(例如,没有循环依赖项)并校正语法。
  • 增量模式(默认)。 此选项仅部署模板中定义的任何内容。 它不会删除或修改模板中未定义的任何资源。 例如,如果已通过模板部署了一个 VM,然后在模板中重命名了该 VM,则重新运行模板后,将保留部署的第一个 VM。 这是默认模式。
  • 完整模式:资源管理器删除资源组中已存在但尚未在模板中指定的资源。 例如,模板部署后,只有在模板中定义的资源才会出现在资源组中。 最佳做法是在生产环境中使用此模式,以尝试在部署模板中实现幂等性。

使用 PowerShell 进行部署时,若要设置部署模式,请使用 Mode 参数,如本主题前面部分嵌套的模板示例所示。

备注

最佳做法是,每个部署使用一个资源组。

备注

对于链接模板和嵌套模板,只能使用 incremental 部署模式。

外部模板和外部参数

若要链接到外部模板和参数文件,请使用 templateLinkparametersLink

链接到模板时,请确保资源管理器服务可以访问它。

例如,不能指定本地文件或仅在本地网络上可用的文件。

只能提供包含 HTTP 或 HTTPS 的统一资源标识符 (URI) 值。

一种做法是将链接模板放在存储帐户中并对该项使用 URI。

还可以提供内联参数。 但是,不能同时使用内联参数和指向参数文件的链接。

以下示例使用 templateLink 参数:

  "resources": [
    {
      "name": "linkedTemplate",
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2018-05-01",
      "properties": {
          "mode": "Incremental",
          "templateLink": {
              "uri":"https://linkedtemplateek1store.blob.core.windows.net/linkedtemplates/linkedStorageAccount.json?sv=2018-03-28&sr=b&sig=dO9p7XnbhGq56BO%2BSW3o9tX7E2WUdIk%2BpF1MTK2eFfs%3D&se=2018-12-31T14%3A32%3A29Z&sp=r"
          },
          "parameters": {
              "storageAccountName":{"value": "[variables('storageAccountName')]"},
              "location":{"value": "[parameters('location')]"}
          }
      }
    },


保护外部模板

尽管链接模板必须在外部可用,但无需向公众提供。

相反,可以将模板添加到仅可由存储帐户所有者访问的专用存储帐户,创建共享访问签名 (SAS) 令牌以在部署期间启用访问。

将该 SAS 令牌添加到链接模板的 URI。

即使令牌作为安全字符串传入,链接模板的 URI(包括 SAS 令牌)也会记录在部署操作中。

若要防止泄露,还可以设置令牌的到期日期。