다음을 통해 공유


if 식이 있는 Bicep의 조건부 배포

필요에 따라 Bicep에서 리소스 또는 모듈을 배포하려면 if 식을 사용합니다. if 식에는 true 또는 false로 확인되는 조건이 포함됩니다. if 조건이 true이면 리소스가 배포됩니다. 값이 false이면 리소스가 만들어지지 않습니다. 전체 리소스 또는 모듈에만 값을 적용할 수 있습니다.

참고

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

학습 리소스

단계별 지침을 통해 조건에 대해 알아보려면 조건 및 루프를 사용하여 유연한 Bicep 파일 빌드를 참조하세요.

배포 조건 정의

Bicep에서는 리소스가 배포되는지 지정하는 매개 변수를 전달하여 리소스를 조건부로 배포할 수 있습니다. 리소스 선언의 if 식을 사용하여 조건을 테스트합니다. 다음 예제에서는 Bicep 파일의 if 식에 대한 구문을 보여 줍니다. DNS(도메인 이름 시스템) 영역을 조건부로 배포합니다. deployZonetrue이면 DNS 영역을 배포합니다. deployZonefalse이면 DNS 영역 배포를 건너뜁니다.

param deployZone bool

resource dnsZone 'Microsoft.Network/dnsZones@2023-07-01-preview' = if (deployZone) {
  name: 'myZone'
  ___location: 'global'
}

다음 예제에서는 모듈을 조건부로 배포합니다.

param deployZone bool

module dnsZone 'dnszones.bicep' = if (deployZone) {
  name: 'myZoneModule'
}

종속성 선언과 함께 조건을 사용할 수 있습니다. 명시적 종속성을 위해 Azure Resource Manager는 리소스가 배포되지 않을 때 필요한 종속성에서 자동으로 제거합니다. 암시적 종속성의 경우 조건부 리소스의 속성을 참조할 수 있지만 배포 오류가 발생할 수 있습니다.

신규 또는 기존 리소스

조건부 배포를 사용하여 새 리소스를 만들거나 기존 리소스를 사용할 수 있습니다. 다음 예제에서는 새 스토리지 계정을 배포하거나 기존 스토리지 계정을 사용하는 방법을 보여 줍니다.

param storageAccountName string
param ___location string = resourceGroup().___location

@allowed([
  'new'
  'existing'
])
param newOrExisting string = 'new'

resource saNew 'Microsoft.Storage/storageAccounts@2023-04-01' = if (newOrExisting == 'new') {
  name: storageAccountName
  ___location: ___location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}

resource saExisting 'Microsoft.Storage/storageAccounts@2023-04-01' existing = if (newOrExisting == 'existing') {
  name: storageAccountName
}

output storageAccountId string = ((newOrExisting == 'new') ? saNew.id : saExisting.id)

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

경고

조건부로 배포된 리소스를 참조하지만 리소스가 배포되지 않은 경우 오류가 발생합니다. 오류 메시지에는 리소스가 템플릿에 정의되어 있지 않다는 메시지가 표시됩니다.

런타임 기능

조건부 배포에 대해 지정하는 리소스와 함께 참조 또는 목록 함수를 사용하는 경우 함수가 평가됩니다. 리소스가 배포되지 않으면 오류가 발생합니다.

조건식 ?: 연산자를 사용하여 리소스가 배포될 때만 함수가 조건에 대해서만 평가되도록 합니다. 다음 예제 템플릿에서는 조건부로 유효한 식에서만 이 함수를 사용하는 방법을 보여 줍니다.

param vmName string
param ___location string
param logAnalytics string = ''

resource vmName_omsOnboarding 'Microsoft.Compute/virtualMachines/extensions@2024-03-01' = if (!empty(logAnalytics)) {
  name: '${vmName}/omsOnboarding'
  ___location: ___location
  properties: {
    publisher: 'Microsoft.EnterpriseCloud.Monitoring'
    type: 'MicrosoftMonitoringAgent'
    typeHandlerVersion: '1.0'
    autoUpgradeMinorVersion: true
    settings: {
      workspaceId: ((!empty(logAnalytics)) ? reference(logAnalytics, '2022-10-01').customerId : null)
    }
    protectedSettings: {
      workspaceKey: ((!empty(logAnalytics)) ? listKeys(logAnalytics, '2022-10-01').primarySharedKey : null)
    }
  }
}

output mgmtStatus string = ((!empty(logAnalytics)) ? 'Enabled monitoring for VM!' : 'Nothing to enable')

다음 단계