ARM şablonlarında koşullu dağıtım

Bazen isteğe bağlı olarak azure Resource Manager şablonunda (ARM şablonu) bir kaynak dağıtmanız gerekir. kaynağın condition dağıtılıp dağıtılmayacağını belirtmek için öğesini kullanın. Koşulun değeri true veya false olarak çözümlenmektedir. Değer true olduğunda kaynak oluşturulur. Değer false olduğunda kaynak oluşturulmaz. Değer yalnızca kaynağın tamamına uygulanabilir.

Not

Koşullu dağıtım alt kaynaklara basamaklama yapmaz. Bir kaynağı ve alt kaynaklarını koşullu olarak dağıtmak istiyorsanız, her kaynak türüne aynı koşulu uygulamanız gerekir.

İpucu

ARM şablonlarıyla aynı özellikleri sunduğundan ve söz diziminin kullanımı daha kolay olduğundan Bicep'i öneririz. Daha fazla bilgi edinmek için bkz. koşullu dağıtımlar.

Dağıtma koşulu

Kaynağın dağıtılıp dağıtılmadığını belirten bir parametre değeri geçirebilirsiniz. Aşağıdaki örnek bir DNS bölgesini koşullu olarak dağıtır.

{
  "$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"
    }
  ]
}

Daha karmaşık bir örnek için bkz. Azure SQL mantıksal sunucu.

Yeni veya mevcut kaynak

Koşullu dağıtımı kullanarak yeni bir kaynak oluşturabilir veya var olan bir kaynağı kullanabilirsiniz. Aşağıdaki örnekte yeni bir depolama hesabının nasıl dağıtılacağı veya mevcut bir depolama hesabının nasıl kullanılacağı gösterilmektedir.

{
  "$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": "2022-09-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2"
    },
    {
      "condition": "[equals(parameters('newOrExisting'), 'existing')]",
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-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')))]"
    }
  }
}

Parametre newOrExistingyeni olarak ayarlandığında koşul true olarak değerlendirilir. Depolama hesabı dağıtılır. Aksi takdirde mevcut depolama hesabı kullanılır.

öğesini kullanan condition tam bir örnek şablon için bkz. Yeni veya mevcut bir Sanal Ağ, Depolama ve Genel IP'ye sahip VM.

Çalışma zamanı işlevleri

Koşullu olarak dağıtılan bir kaynakla bir başvuru veya liste işlevi kullanırsanız, kaynak dağıtılmasa bile işlev değerlendirilir. İşlev var olmayan bir kaynağa başvuruyorsa hata alırsınız.

İşlevin yalnızca kaynak dağıtıldığında koşullar için değerlendirildiğinden emin olmak için if işlevini kullanın. Koşullu olarak dağıtılan bir kaynak ile ve kullanan ifreference örnek bir şablonun if işlevine bakın.

Bir kaynağı, diğer kaynaklar gibi koşullu kaynağa bağımlı olarak ayarlarsınız. Koşullu kaynak dağıtılmadığında, Azure Resource Manager bunu gerekli bağımlılıklardan otomatik olarak kaldırır.

Tamamlama modu

Tam modda bir şablon dağıtırsanız ve false olarak değerlendirildiği için condition kaynak dağıtılmazsa, sonuç şablonu dağıtmak için kullandığınız REST API sürümüne bağlıdır. 2019-05-10'dan önceki bir sürümü kullanıyorsanız, kaynak silinmez. 2019-05-10 veya üzeri sürümlerde kaynak silinir. Azure PowerShell ve Azure CLI'nın en son sürümleri, koşul yanlış olduğunda kaynağı siler.

Sonraki adımlar