ARM 템플릿의 조건부 배포

경우에 따라 ARM 템플릿(Azure Resource Manager 템플릿)에서 리소스를 조건부로 배포해야 합니다. 리소스 배포 여부를 지정하려면 condition 요소를 사용합니다. 조건 값은 true 또는 false로 확인됩니다. 값이 true이면 리소스가 만들어집니다. 값이 false이면 리소스가 만들어지지 않습니다. 값은 전체 리소스에만 적용할 수 있습니다.

참고

조건부 배포는 하위 리소스로 연결되지 않습니다. 리소스 및 해당 자식 리소스를 조건부로 배포하려면 각 리소스 종류에 동일한 조건을 적용해야 합니다.

ARM 템플릿과 동일한 기능을 제공하고 구문이 사용하기 더 쉽기 때문에 Bicep를 권장합니다. 자세한 내용은 조건부 배포를 참조하세요.

배포 조건

리소스 배포 여부를 나타내는 매개 변수 값을 전달할 수 있습니다. 다음 예제에서는 조건부로 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"
      ]
    }
  },
  "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')))]"
    }
  }
}

newOrExisting 매개 변수가 new로 설정되면 조건이 true로 평가됩니다. 스토리지 계정이 배포됩니다. 그렇지 않으면 기존 스토리지 계정이 사용됩니다.

condition 요소를 사용하는 전체 예제 템플릿은 신규 또는 기존 가상 네트워크, 스토리지 및 공용 IP를 사용하는 VM을 참조하세요.

런타임 기능

조건부로 배포된 리소스와 함께 reference 또는 list 함수를 사용하는 경우 리소스가 배포되지 않은 경우에도 함수가 평가됩니다. 함수가 존재하지 않는 리소스를 참조하면 오류가 발생합니다.

리소스가 배포될 때 조건에 대해서만 함수를 평가하는지 확인하려면 if 함수를 사용하세요. ifreference를 조건부로 배포된 리소스와 함께 사용하는 샘플 템플릿에 대해서는 if 함수를 참조하세요.

다른 리소스와 마찬가지로 조건부 리소스에 대해 리소스를 종속 리소스로 설정합니다. 조건부 리소스가 배포되지 않으면 Azure Resource Manager가 필요한 종속성에서 해당 리소스를 자동으로 제거합니다.

전체 모드

완료 모드로 템플릿을 배포하며, condition이 false로 평가되므로 리소스가 배포되지 않은 경우 템플릿을 배포하는 데 사용하는 REST API 버전에 따라 결과가 달라집니다. 2019년 5월 10일 이전 버전을 사용하는 경우 리소스는 삭제되지 않습니다. 2019년 5월 10일 이후 버전에서는 리소스가 삭제됩니다. 조건이 false일 때 최신 버전의 Azure PowerShell 및 Azure CLI는 리소스를 삭제합니다.

다음 단계