必要に応じて、リソースまたはモジュールを Bicep にデプロイするには、if
式を使用します。
if
式には、true または false に解決される条件が含まれています。
if
条件が true の場合、リソースがデプロイされます。 値が false の場合、リソースは作成されません。 この値は、リソースまたはモジュール全体にのみ適用できます。
注意
条件付きのデプロイは子リソースにはカスケードされません。 リソースとその子リソースを条件付きでデプロイする場合は、リソースの種類ごとに同じ条件を適用する必要があります。
トレーニング リソース
ステップ バイ ステップのガイダンスで条件について学習する場合は、「 条件とループを使用して柔軟な Bicep ファイルを構築する」を参照してください。
デプロイの条件を定義する
Bicep では、リソースがデプロイされるかどうかを指定するパラメーターを渡すことで、リソースを条件付きでデプロイできます。 リソース宣言の if
式を使用して条件をテストします。 次の例は、Bicep ファイル内の if
式の構文を示しています。 条件付きでドメイン ネーム システム (DNS) ゾーンをデプロイします。
deployZone
が true
の場合、DNS ゾーンがデプロイされます。
deployZone
が false
の場合、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')
次の手順
- Bicep ファイルの作成に関する推奨事項については、「Bicep のベストプラクティス」を参照してください。
- リソースから複数のインスタンスを作成するには、「Bicep の反復ループ」を参照してください。