ARM 範本中的條件部署

有時你需要選擇性地在 Azure 資源管理器範本(ARM 範本)中部署資源。 使用元素 condition 來指定資源是否已部署。 條件的值會被解析為真或假。 當該值為真時,資源就會被創造出來。 當此值為 false 時,則不會創建資源。 這個價值只能套用到整個資源。

備註

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

小提示

我們建議使用 Bicep,因為其提供的功能與 ARM 範本相同,而且語法更易於使用。 欲了解更多,請參閱條件部署。

部署狀態

你可以輸入一個參數值,指示資源是否已部署。 以下範例條件部署一個 DNS 區域。

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

若想看更複雜的例子,請參見 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"
      ]
    }
  },
  "resources": [
    {
      "condition": "[equals(parameters('newOrExisting'), 'new')]",
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2025-06-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2"
    },
    {
      "condition": "[equals(parameters('newOrExisting'), 'existing')]",
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2025-06-01",
      "name": "[parameters('storageAccountName')]"
    }
  ],
  "outputs": {
    "storageAccountId": {
      "type": "string",
      "value": "[if(equals(parameters('newOrExisting'), 'new'), resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')))]"
    }
  }
}

當參數 newOrExisting 設為 new 時,條件會評估為 true。 儲存體帳戶已部署完成。 否則就使用現有的儲存帳戶。

如需完整使用該 condition 元素的範例範本,請參閱 具備新建或現有虛擬網路、儲存空間及公共 IP 的虛擬機。

執行階段函式

如果您在條件式部署的資源中使用 reference 或 list 函式,則即使不部署資源,也會評估該函式。 如果函式指向不存在的資源,就會報錯。

使用 if 函式確保該函式只在資源部署時評估條件。 請參閱 if 函式,裡面有一個使用ifreference條件部署資源的範例範本。

您可以像對待其他資源一樣,將某個 資源設定為相依於條件資源。 當條件資源未部署時,Azure Resource Manager 會自動將其從所需的相依中移除。

完整模式

如果你使用 完整模式 來部署範本,但因為 condition 評估為 false 某個資源未能部署,則結果會因您使用的 REST API 版本不同而有所不同。 如果你使用的版本早於 2019-05-10,該資源 不會被刪除。 在 2019-05-10 或之後,該資源 會被刪除。 最新版本的 Azure PowerShell 和 Azure CLI 在條件為 false 時會刪除該資源。

後續步驟