次の方法で共有


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)

パラメーター newOrExistingnew に設定されると、その条件は 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')

次の手順