將範本模組化

已完成

使用 Azure Resource Manager 範本時,最好的方式是將其分成個別元件來模組化。

主要的執行方法是使用連結的範本。

此方法可讓您將解決方案分成目標群元件,並跨不同的部署重複使用這些各種元素。

連結範本

在主要範本中新增部署資源,以將一個範本連結至其他範本。

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


巢狀範本

您也可以在主要範本內建立巢狀範本、使用 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 將會在範本重新執行之後保留。 這是預設模式。
  • 完整模式:Resource Manager 會將現存於資源群組但未在範本中指定的資源刪除。 例如,部署範本之後,只有範本中定義的資源會出現在資源群組中。 最佳做法是將此模式用於生產環境,以達到部署範本中的等冪性。

使用 PowerShell 進行部署時,若要設定部署模式,請使用 Mode 參數 (如本主題稍早的巢狀範本範例所示)。

注意

最佳做法是一個部署使用一個資源群組。

注意

針對連結的範本和巢狀範本,您只能使用 incremental 部署模式。

外部範本和外部參數

若要連結到外部的範本和參數檔案,請使用 templateLinkparametersLink

連結至範本時,請確定 Resource Manager 服務能夠存取該範本。

例如,您無法指定本機檔案或任一檔案只可在本機網路存取。

您只能提供包含 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 權杖) 還是會記錄在部署作業中。

若要限制曝光程度,您也可以設定權杖的到期日。