Bicep で拡張リソースのスコープを設定する
拡張リソースは、別のリソースを変更するリソースです。 たとえば、リソースにロールを割り当てることができます。 ロールの割り当ては、拡張リソースの種類の 1 つです。
拡張リソースの種類の完全な一覧については、「他のリソースの機能を拡張するリソースの種類」を参照してください。
この記事では、Bicep ファイルを使用して展開されている場合に、拡張リソースの種類のスコープを設定する方法について説明します。 リソースに適用するときに拡張リソースで使用できる scope プロパティについて説明します。
Note
スコープ プロパティは、拡張リソースの種類でのみ使用できます。 拡張の種類ではないリソースの種類に別のスコープを指定するには、モジュールを使用します。
トレーニング リソース
段階的なガイダンスを通じて拡張リソースの詳細を学習する場合は、「Bicep を使用して子と拡張機能のリソースをデプロイする」を参照してください。
展開スコープで適用する
ターゲット展開スコープで拡張リソースの種類を適用するには、他のリソースの種類と同様に、リソースをテンプレートに追加します。 利用可能なスコープは、リソース グループ、サブスクリプション、管理グループ、テナントです。 展開スコープで、そのリソースの種類がサポートされている必要があります。
リソース グループにデプロイすると、次のテンプレートによってそのリソース グループにロックが追加されます。
resource createRgLock 'Microsoft.Authorization/locks@2020-05-01' = {
name: 'rgLock'
properties: {
level: 'CanNotDelete'
notes: 'Resource group should not be deleted.'
}
}
次の例では、デプロイ先のサブスクリプションにロールが割り当てられます。
targetScope = 'subscription'
@description('The principal to assign the role to')
param principalId string
@allowed([
'Owner'
'Contributor'
'Reader'
])
@description('Built-in role to assign')
param builtInRoleType string
var role = {
Owner: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635'
Contributor: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c'
Reader: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7'
}
resource roleAssignSub 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(subscription().id, principalId, role[builtInRoleType])
properties: {
roleDefinitionId: role[builtInRoleType]
principalId: principalId
}
}
リソースに適用
リソースに拡張リソースを適用するには、scope
プロパティを使用します。 scope プロパティで、拡張を追加するリソースを参照します。 リソースを参照するには、リソースのシンボリック名を指定します。 scope プロパティは、拡張リソースの種類のルート プロパティです。
次の例では、ストレージ アカウントを作成し、それにロールを適用します。
@description('The principal to assign the role to')
param principalId string
@allowed([
'Owner'
'Contributor'
'Reader'
])
@description('Built-in role to assign')
param builtInRoleType string
param location string = resourceGroup().location
var role = {
Owner: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635'
Contributor: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c'
Reader: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7'
}
var uniqueStorageName = 'storage${uniqueString(resourceGroup().id)}'
resource demoStorageAcct 'Microsoft.Storage/storageAccounts@2023-04-01' = {
name: uniqueStorageName
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'Storage'
properties: {}
}
resource roleAssignStorage 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(demoStorageAcct.id, principalId, role[builtInRoleType])
properties: {
roleDefinitionId: role[builtInRoleType]
principalId: principalId
}
scope: demoStorageAcct
}
既存のリソースに拡張機能リソースを適用できます。 次の例では、既存のストレージ アカウントにロックが追加されます。
resource demoStorageAcct 'Microsoft.Storage/storageAccounts@2023-04-01' existing = {
name: 'examplestore'
}
resource createStorageLock 'Microsoft.Authorization/locks@2020-05-01' = {
name: 'storeLock'
scope: demoStorageAcct
properties: {
level: 'CanNotDelete'
notes: 'Storage account should not be deleted.'
}
}
デプロイのターゲット スコープとは異なるスコープを対象とする場合、他のリソースと同じ要件が拡張機能リソースに適用されます。 複数のスコープへのデプロイについては、以下を参照してください。
resourceGroup とサブスクリプションのプロパティは、モジュールでのみ許可されます。 これらのプロパティは、個々のリソースでは許可されません。 スコープが別のリソース グループ内のリソースに設定された拡張機能リソースをデプロイする場合は、モジュールを使用します。
次の例では、別のリソース グループに存在するストレージ アカウントにロックを適用する方法を示します。
main.bicep:
param resourceGroup2Name string param storageAccountName string module applyStoreLock './storageLock.bicep' = { name: 'addStorageLock' scope: resourceGroup(resourceGroup2Name) params: { storageAccountName: storageAccountName } }
storageLock.bicep:
param storageAccountName string resource storage 'Microsoft.Storage/storageAccounts@2023-04-01' existing = { name: storageAccountName } resource storeLock 'Microsoft.Authorization/locks@2020-05-01' = { scope: storage name: 'storeLock' properties: { level: 'CanNotDelete' notes: 'Storage account should not be deleted.' } }
次のステップ
拡張リソースの種類の完全な一覧については、「他のリソースの機能を拡張するリソースの種類」を参照してください。