Bicep でのリソース宣言

この記事では、Bicep ファイルにリソースを追加するために使用する構文について説明します。 Bicep ファイルでは、リソースが 800 個に制限されます。 詳細については、「テンプレートの制限」を参照してください。

リソースの定義

resource キーワードを使用してリソース宣言を追加します。 リソースのシンボリック名を設定します。 シンボリック名はリソース名と同じものではありません。 シンボリック名を使用して、Bicep ファイルの他の部分のリソースを参照します。

@<decorator>(<argument>)
resource <symbolic-name> '<full-type-name>@<api-version>' = {
  <resource-properties>
}

ストレージ アカウントの宣言は、次のいずれかで開始できます:

resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
  ...
}

シンボリック名は大文字と小文字が区別されます。 文字、数字、アンダースコア (_) を含めることができます。 数字で始めることはできません。 リソースの名前を、パラメーター、変数またはモジュールと同じにすることはできません。

使用可能なリソースの種類とバージョンについては、リソースリファレンスBicep参照してください。 Bicep では、Azure Resource Manager templates (ARM templates) JSON で使用できる apiProfile はサポートされていません。 Bicep 拡張機能プロバイダー リソースを定義することもできます。 詳細については、「Bicep 拡張機能 Kubernetes プロバイダー」を参照してください。

リソースを条件付きでデプロイするには、 構文を使用 if します。 詳細については 、「Bicep での条件付きデプロイ」を参照してください

resource <symbolic-name> '<full-type-name>@<api-version>' = if (condition) {
  <resource-properties>
}

リソースの複数のインスタンスをデプロイするには、for 構文を使用します。 batchSize デコレーターを使用して、インスタンスを順番にデプロイするか、または並列でデプロイするかを指定できます。 詳細については 、「Bicep の反復ループ」を参照してください

@batchSize(int) // optional decorator for serial deployment
resource <symbolic-name> '<full-type-name>@<api-version>' = [for <item> in <collection>: {
  <properties-to-repeat>
}]

リソース プロパティで for 構文を使用して、配列を作成することもできます。

resource <symbolic-name> '<full-type-name>@<api-version>' = {
  properties: {
    <array-property>: [for <item> in <collection>: <value-to-repeat>]
  }
}

デコレーターを使用する

@expression形式でデコレーターを記述し、リソース宣言の上に配置します。 次の表に、リソースで使用できるデコレーターを示します。

デコレーター 引数 説明
batchSize なし 順番にデプロイするようにインスタンスを設定します。
説明 文字列 リソースの説明を指定します。
nullIfNotFound なし リソースが存在しない場合、リソース シンボルはデプロイの失敗を引き起こすのではなく、 null と評価されます。
onlyIfNotExists なし リソースがターゲット スコープにまだ存在しない場合にのみ、リソースをデプロイします。

デコレーターは、sys 名前空間にあります。 このデコレーターを同じ名前の別の項目と区別する必要がある場合は、デコレータの前に「sys」を付けます。 たとえば、Bicep ファイルに description という名前のパラメーターが含まれている場合、description デコレーターを使用するときに、sys 名前空間を追加する必要があります。

バッチサイズ

@batchSize() は、forを使用するリソースまたはモジュールの定義だけに適用できます。

既定では、リソースは並列でデプロイされます。 batchSize(int) デコレーターを追加する場合、インスタンスを順次にデプロイします。

@batchSize(3)
resource storageAccountResources 'Microsoft.Storage/storageAccounts@2025-06-01' = [for storageName in storageAccounts: {
  ...
}]

詳細については、「バッチでのデプロイ」を参照してください。

説明

説明を追加するには、リソースの宣言に description を追加します。 次に例を示します。

@description('Create a number of storage accounts')
resource storageAccountResources 'Microsoft.Storage/storageAccounts@2025-06-01' = [for storageName in storageAccounts: {
  ...
}]

説明のテキストとして Markdown 形式のテキストを使用できます。

nullIfNotFound

@nullIfNotFound()デコレーターを既存のリソース宣言に適用します。 (既存のキーワードを使用して) Bicep内の既存のリソースを参照すると、デプロイ時にそのリソースが見つからない場合、ARM のデプロイは失敗します。 @nullIfNotFound()を適用すると、リソースが存在しない場合、リソース シンボルはデプロイエラーを引き起こすのではなく、nullに評価されます。

@nullIfNotFound()
resource centralWorkspace 'Microsoft.OperationalInsights/workspaces@2023-09-01' existing = {
  name: 'central-log-analytics'
}

// Safe access
output workspaceId string = centralWorkspace.?id ?? ''
output workspaceExists bool = centralWorkspace != null

存在しない場合のみ

既定では、Bicep デプロイが実行されると、Azure Resource Manager (ARM) によってリソースが存在しない場合は作成され、存在する場合は更新されます。 既存のリソースにテンプレートと異なるプロパティがある場合は、ARM によって更新が試みられたり、更新が許可されていない場合は失敗したりする可能性があります。

Bicep バージョン v0.38.3 以降、@onlyIfNotExists() デコレーターは、リソースがまだ存在しない場合にのみリソースを作成するように ARM に指示します。 ARM がリソース ID を持つリソースを見つけた場合、作成はスキップされ、既存のリソースは変更されません。

@onlyIfNotExists()
resource example 'Microsoft.Storage/storageAccounts@2025-06-01' = {
  name: 'mystorageacct'
  location: resourceGroup().location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

リソース名

各リソースには名前があります。 リソース名を設定する際には、リソース名の規則と制限事項に注意してください。

resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
  name: 'examplestorage'
  ...
}

通常、デプロイ時に異なる値を渡すことができるように、名前をパラメーターに設定します。

@minLength(3)
@maxLength(24)
param storageAccountName string

resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
  name: storageAccountName
  ...
}

リソースの場所

多くのリソースには場所が必要です。 IntelliSense または テンプレート参照を使用して、リソースに場所が必要かどうかを判断できます。 次の例では、ストレージ アカウントに使用される location パラメーターを追加しています。

resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
  name: 'examplestorage'
  location: 'eastus'
  ...
}

通常、場所をパラメーターに設定して、別の場所にデプロイできるようにします。

param location string = resourceGroup().location

resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
  name: 'examplestorage'
  location: location
  ...
}

場所ごとに、異なるリソースの種類がサポートされます。 Azure サービスでサポートされている場所を取得するには、「リージョン別に利用可能な製品」を参照してください。 リソースの種類にサポートされている場所を取得するには、Azure PowerShell または Azure CLI を使用します。

((Get-AzResourceProvider -ProviderNamespace Microsoft.Batch).ResourceTypes `
  | Where-Object ResourceTypeName -eq batchAccounts).Locations

リソース タグ

デプロイ時には、リソースにタグを適用することができます。 タグは、デプロイされたリソースを論理的に整理するために役立ちます。 タグを指定するさまざまな方法の例については、ARM テンプレートのタグに関する記事を参照してください。

リソース用マネージド ID

一部のリソースでは、Azure リソースのマネージド ID がサポートされます。 これらのリソースには、リソース宣言のルート レベルで ID オブジェクトがあります。

システム割り当てまたはユーザー割り当ての ID を使用できます。

次の例は、Azure Kubernetes Service クラスターのシステム割り当て ID を構成する方法を示しています。

resource aks 'Microsoft.ContainerService/managedClusters@2025-08-02-preview' = {
  name: clusterName
  location: location
  tags: tags
  identity: {
    type: 'SystemAssigned'
  }

次の例は、仮想マシンのユーザー割り当て ID を構成する方法を示しています。

param userAssignedIdentity string

resource vm 'Microsoft.Compute/virtualMachines@2025-04-01' = {
  name: vmName
  location: location
  identity: {
    type: 'UserAssigned'
    userAssignedIdentities: {
      '${userAssignedIdentity}': {}
    }
  }

リソース固有のプロパティ

上記のプロパティは、ほとんどの種類のリソースに共通するものです。 これらの値を設定した後、デプロイするリソースの種類に固有のプロパティを設定します。

IntelliSense またはBicepリソース参照を使用して、使用可能なプロパティと必要なプロパティを決定します。 次の例では、ストレージ アカウントの残りのプロパティを設定しています。

resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
  name: 'examplestorage'
  location: 'eastus'
  sku: {
    name: 'Standard_LRS'
    tier: 'Standard'
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
  }
}

次のステップ