Bicep ファイルを使用したリソース グループへのデプロイ

この記事では、リソース グループにデプロイするときに Bicep を使用してスコープを設定する方法について説明します。

サポートされているリソース

ほとんどのリソースは、リソース グループにデプロイできます。 使用可能なリソースのリストについては、ARM テンプレートのリファレンスを参照してください。

セット スコープ

既定では、Bicep ファイルは、リソース グループにスコープが設定されています。 スコープを明示的に設定する場合は、次のコマンドを使用します。

targetScope = 'resourceGroup'

ただし、既定で使用されているため、ターゲット スコープをリソース グループに設定する必要はありません。

デプロイ コマンド

リソース グループにデプロイするには、リソース グループのデプロイ コマンドを使用します。

Azure CLI の場合は、az deployment group create を使用します。 次の例では、リソース グループを作成するテンプレートがデプロイされます。 --resource-group パラメーターで指定するリソース グループは、ターゲット リソース グループです。

az deployment group create \
  --name demoRGDeployment \
  --resource-group ExampleGroup \
  --template-file main.bicep \
  --parameters storageAccountType=Standard_GRS

ARM テンプレートをデプロイするためのデプロイ コマンドとオプションの詳細については、以下を参照してください。

デプロイのスコープ

リソース グループにデプロイする際には、リソースを以下にデプロイできます。

  • デプロイ操作のターゲット リソース グループ
  • 同じサブスクリプションまたは他のサブスクリプション内の他のリソース グループ
  • テナント内の任意のサブスクリプション
  • リソース グループのテナント

拡張リソースは、デプロイ ターゲットとは異なるターゲットにスコープ設定できます。

テンプレートをデプロイするユーザーは、特定のスコープにアクセスできる必要があります。

このセクションでは、異なるスコープを指定する方法について説明します。 これらの異なるスコープを 1 つのテンプレートで結合することができます。

ターゲット リソース グループにスコープを設定する

リソースをターゲット リソース グループにデプロイするには、Bicep ファイルにそれらのリソースを追加します。

// resource deployed to target resource group
resource exampleResource 'Microsoft.Storage/storageAccounts@2019-06-01' = {
  ...
}

テンプレートの例については、「ターゲット リソース グループにデプロイする」を参照してください。

異なるリソース グループにスコープを設定する

ターゲット リソース グループではないリソース グループにリソースをデプロイするには、モジュールを追加します。 resourceGroup 関数を使用して、そのモジュールに対して scope プロパティを設定します。

リソース グループが別のサブスクリプションにある場合は、サブスクリプション ID とリソース グループの名前を指定します。 リソース グループが現在のデプロイと同じサブスクリプション内にある場合は、リソース グループの名前のみを指定します。 resourceGroup 関数でサブスクリプションを指定しない場合は、現在のサブスクリプションが使用されます。

次の例には、別のサブスクリプション内のリソース グループを対象とするモジュールが示されています。

param otherResourceGroup string
param otherSubscriptionID string

// module deployed to different subscription and resource group
module exampleModule 'module.bicep' = {
  name: 'otherSubAndRG'
  scope: resourceGroup(otherSubscriptionID, otherResourceGroup)
}

次の例には、同じサブスクリプション内のリソース グループを対象とするモジュールが示されています。

param otherResourceGroup string

// module deployed to resource group in the same subscription
module exampleModule 'module.bicep' = {
  name: 'otherRG'
  scope: resourceGroup(otherResourceGroup)
}

テンプレートの例については、「複数のリソースグループにデプロイする」を参照してください。

サブスクリプションへのスコープ

サブスクリプションにリソースをデプロイするには、モジュールを追加します。 subscription 関数を使用して、scope プロパティを設定します。

現在のサブスクリプションにデプロイするには、パラメーターを指定せずに subscription 関数を使用します。


// module deployed at subscription level
module exampleModule 'module.bicep' = {
  name: 'deployToSub'
  scope: subscription()
}

別のサブスクリプションにデプロイするには、そのサブスクリプション ID を subscription 関数のパラメーターとして指定します。

param otherSubscriptionID string

// module deployed at subscription level but in a different subscription
module exampleModule 'module.bicep' = {
  name: 'deployToSub'
  scope: subscription(otherSubscriptionID)
}

テンプレートの例については、Bicep を使ったリソース グループの作成に関する記事を参照してください。

テナントへのスコープ

テナントでリソースを作成するには、モジュールを追加します。 tenant 関数を使用して、その scope プロパティを設定します。

テンプレートをデプロイするユーザーには、テナントでデプロイするための必要なアクセス権が必要です

次の例には、テナントにデプロイするモジュールが含まれています。

// module deployed at tenant level
module exampleModule 'module.bicep' = {
  name: 'deployToTenant'
  scope: tenant()
}

モジュールを使用する代わりに、一部のリソースの種類に対してスコープを tenant() に設定できます。 次の例では、テナントに管理グループをデプロイします。

param mgName string = 'mg-${uniqueString(newGuid())}'

// ManagementGroup deployed at tenant
resource managementGroup 'Microsoft.Management/managementGroups@2020-05-01' = {
  scope: tenant()
  name: mgName
  properties: {}
}

output output string = mgName

詳細については、「管理グループ」を参照してください。

ターゲット リソース グループにデプロイする

リソースをターゲット リソース グループにデプロイするには、テンプレートのresources セクションにそれらのリソースを定義します。 次のテンプレートでは、デプロイ操作で指定されているリソース グループにストレージ アカウントが作成されます。

@minLength(3)
@maxLength(11)
param storagePrefix string

@allowed([
  'Standard_LRS'
  'Standard_GRS'
  'Standard_RAGRS'
  'Standard_ZRS'
  'Premium_LRS'
  'Premium_ZRS'
  'Standard_GZRS'
  'Standard_RAGZRS'
])
param storageSKU string = 'Standard_LRS'

param location string = resourceGroup().location

var uniqueStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'

resource stg 'Microsoft.Storage/storageAccounts@2021-04-01' = {
  name: uniqueStorageName
  location: location
  sku: {
    name: storageSKU
  }
  kind: 'StorageV2'
  properties: {
    supportsHttpsTrafficOnly: true
  }
}

output storageEndpoint object = stg.properties.primaryEndpoints

複数のリソース グループにデプロイする

1 つの Bicep ファイルで複数のリソース グループにデプロイできます。

Note

単一のデプロイで 800 のリソース グループにデプロイできます。 通常、この制限は、親テンプレートに対しては 1 つのリソース グループを、入れ子になったデプロイまたはリンクされたデプロイでは最大 799 のリソース グループを指定してデプロイできることを意味します。 ただし、親テンプレートが入れ子になったテンプレートまたはリンクされたテンプレートのみを含んでいて、親テンプレート自体はリソースをデプロイしない場合は、入れ子になったデプロイまたはリンクされたデプロイで最大 800 のリソース グループを含めることができます。

次の例では、2 つのストレージ アカウントをデプロイします。 最初のストレージ アカウントは、デプロイ操作で指定されたリソース グループにデプロイされます。 2 番目のストレージ アカウントは、secondResourceGroup および secondSubscriptionID パラメーターで指定されたリソース グループにデプロイされます。

@maxLength(11)
param storagePrefix string

param firstStorageLocation string = resourceGroup().location

param secondResourceGroup string
param secondSubscriptionID string = ''
param secondStorageLocation string

var firstStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'
var secondStorageName = '${storagePrefix}${uniqueString(secondSubscriptionID, secondResourceGroup)}'

module firstStorageAcct 'storage.bicep' = {
  name: 'storageModule1'
  params: {
    storageLocation: firstStorageLocation
    storageName: firstStorageName
  }
}

module secondStorageAcct 'storage.bicep' = {
  name: 'storageModule2'
  scope: resourceGroup(secondSubscriptionID, secondResourceGroup)
  params: {
    storageLocation: secondStorageLocation
    storageName: secondStorageName
  }
}

どちらのモジュールも、storage.bicep という名前の同じ Bicep ファイルを使用します。

param storageLocation string
param storageName string

resource storageAcct 'Microsoft.Storage/storageAccounts@2019-06-01' = {
  name: storageName
  location: storageLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'Storage'
  properties: {}
}

リソース グループの作成

リソース グループの作成については、Bicep を使ったリソース グループの作成に関する記事を参照してください。

次のステップ

他のスコープについて確認するには、以下を参照してください。