ARM 範本中的條件式部署 (部分機器翻譯)

有時您需要在 Azure Resource Manager 範本中選擇性地部署資源, (ARM 範本) 。 使用 condition 元素來指定是否要部署資源。 條件的值會解析為 true 或 false。 當此值為 true 時,會部署資源。 當此值為 false 時,則不會部署資源。 此值只能套用至整個資源。

注意

條件式部署不會串聯至 子資源。 如果您想要有條件地部署資源及其子資源,您必須將相同的條件套用至每個資源類型。

部署條件

您可以傳入參數值,以指出是否已部署資源。 下列範例會有條件地部署 DNS 區域。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "deployZone": {
      "type": "bool"
    }
  },
  "functions": [],
  "resources": [
    {
      "condition": "[parameters('deployZone')]",
      "type": "Microsoft.Network/dnsZones",
      "apiVersion": "2018-05-01",
      "name": "myZone",
      "location": "global"
    }
  ]
}

如需更複雜的範例,請參閱Azure SQL 邏輯伺服器

新的或現有的資源

您可以使用條件式部署來建立新的資源,或使用現有的資源。 下列範例說明如何部署新的儲存體帳戶,或使用現有的儲存體帳戶。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountName": {
      "type": "string"
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    },
    "newOrExisting": {
      "type": "string",
      "defaultValue": "new",
      "allowedValues": [
        "new",
        "existing"
      ]
    }
  },
  "functions": [],
  "resources": [
    {
      "condition": "[equals(parameters('newOrExisting'), 'new')]",
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2019-06-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS",
        "tier": "Standard"
      },
      "kind": "StorageV2",
      "properties": {
        "accessTier": "Hot"
      }
    }
  ]
}

當參數 newOrExisting 設定為 new 時,條件評估為 true。 已部署儲存體帳戶。 不過,當 newOrExisting 設為 [ 現有] 時,條件會評估為 false,且不會部署儲存體帳戶。

如需使用 condition 項目的完整範例範本,請參閱 使用新的或現有的虛擬網路、儲存體和公用 IP 的 VM

執行時間函式

如果您使用 參考清單 函式搭配有條件地部署的資源,即使資源未部署,也會評估函式。 如果函式參考的資源不存在,您會收到錯誤。

使用 if 函式,以確保只有在部署資源時,才會評估函式的條件。 請參閱 if 函式,以取得使用和搭配有 if reference 條件部署資源的範例範本。

您可以將 資源設定為相依 于條件式資源,就像任何其他資源一樣。 當條件式資源未部署時,Azure Resource Manager 會自動將它從必要的相依性中移除。

完整模式

如果您以 完整模式 部署範本,但因為評估為 false 而未部署資源 condition ,則結果取決於您用來部署範本的 REST API 版本。 如果您使用的版本早于2019-05-10,則 不會刪除 資源。 使用2019-05-10 或更新版本時, 會刪除 資源。 當條件為 false 時,Azure PowerShell 和 Azure CLI 的最新版本會刪除資源。

下一步