リソースの Bicep を使った宣言

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

宣言

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

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

そのため、ストレージ アカウントの宣言は次のように開始できます。

resource stg 'Microsoft.Storage/storageAccounts@2021-04-01' = {
  ...
}

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

使用可能なリソースの種類とバージョンについては 、Bicep リソース リファレンスに関するページを参照してください。 Bicep では、Azure Resource Manager テンプレート (ARM テンプレート) 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>]
  }
}

リソース名

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

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

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

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

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

場所

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

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

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

param location string = resourceGroup().location

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

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

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

タグ

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

Azure リソースのマネージド ID

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

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

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

resource aks 'Microsoft.ContainerService/managedClusters@2020-09-01' = {
  name: clusterName
  location: location
  tags: tags
  identity: {
    type: 'SystemAssigned'
  }

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

param userAssignedIdentity string

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

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

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

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

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

次のステップ