Bicep のリソース関数

この記事では、リソースの値を取得するための Bicep 関数について説明します。

現在のデプロイから値を取得するには、「Deployment value functions (デプロイ値関数)」を参照してください。

extensionResourceId

extensionResourceId(resourceId, resourceType, resourceName1, [resourceName2], ...)

拡張リソースのリソース ID を返します。 拡張リソースは、その機能に追加する別のリソースに適用されるリソースの種類です。

名前空間: az

extensionResourceId 関数は Bicep ファイルで使用できますが、通常は必要はありません。 代わりに、リソースのシンボリック名を使用して、id プロパティにアクセスします。

この関数から返されるリソース ID の基本形式は次のとおりです。

{scope}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}

スコープ セグメントは、拡張されるリソースによって変わります。

拡張リソースがリソースに適用される場合、リソース ID は次の形式で返されます。

/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{baseResourceProviderNamespace}/{baseResourceType}/{baseResourceName}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}

拡張リソースがリソース グループに適用される場合、形式は次のようになります。

/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}

拡張リソースがサブスクリプションに適用される場合、形式は次のようになります。

/subscriptions/{subscriptionId}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}

拡張リソースが管理グループに適用される場合、形式は次のようになります。

/providers/Microsoft.Management/managementGroups/{managementGroupName}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}

管理グループにデプロイされたカスタム ポリシー定義は、拡張リソースとして実装されます。 ポリシーを作成して割り当てるには、以下の Bicep ファイルを管理グループにデプロイします。

targetScope = 'managementGroup'

@description('An array of the allowed locations, all other locations will be denied by the created policy.')
param allowedLocations array = [
  'australiaeast'
  'australiasoutheast'
  'australiacentral'
]

resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2021-06-01' = {
  name: 'locationRestriction'
  properties: {
    policyType: 'Custom'
    mode: 'All'
    parameters: {}
    policyRule: {
      if: {
        not: {
          field: 'location'
          in: allowedLocations
        }
      }
      then: {
        effect: 'deny'
      }
    }
  }
}

resource policyAssignment 'Microsoft.Authorization/policyAssignments@2022-06-01' = {
  name: 'locationAssignment'
  properties: {
    policyDefinitionId: policyDefinition.id
  }
}

組み込みのポリシー定義は、テナント レベルのリソースです。 組み込みのポリシー定義をデプロイする例については、「tenantResourceId」を参照してください。

getSecret

keyVaultName.getSecret(secretName)

Azure Key Vault からシークレットを返します。 この関数を使用して、Bicep モジュールのセキュリティで保護された文字列パラメーターにシークレットを渡します。

Note

az.getSecret(subscriptionId, resourceGroupName, keyVaultName, secretName, secretVersion) 関数はキー コンテナー シークレットを取得するために .bicepparam ファイルで使用できます。 詳細については、「getSecret」を参照してください。

getSecret 関数は、モジュールの params セクション内からしか使用できません。 Microsoft.KeyVault/vaults リソースでのみ使用できます。

module sql './sql.bicep' = {
  name: 'deploySQL'
  params: {
    adminPassword: keyVault.getSecret('vmAdminPassword')
  }
}

この関数を Bicep ファイルの他の部分で使用しようとすると、エラーが発生します。 また、パラメーター セクションで使用されている場合でも、文字列補間でこの関数を使用するとエラーが発生します。

この関数は、@secure() デコレーターを持つモジュール パラメーターでのみ使用できます。

キー コンテナーでは、enabledForTemplateDeploymenttrue に設定する必要があります。 Bicep ファイルをデプロイするユーザーは、シークレットにアクセスできる必要があります。 詳細については、「Bicep デプロイ時に Azure Key Vault を使用して、セキュリティで保護されたパラメーター値を渡す」を参照してください。

この関数はリソースの種類と共に使用されるため、namespace 修飾子は必要ありません。

パラメーター

パラメーター 必須 タイプ 説明
secretName はい string Key Vault に格納されているシークレットの名前。

戻り値

シークレット名のシークレット値。

次の Bicep ファイルがモジュールとして使用されます。 これには、adminPassword パラメーターが @secure() デコレーターで定義されています。

param sqlServerName string
param adminLogin string

@secure()
param adminPassword string

resource sqlServer 'Microsoft.Sql/servers@2022-08-01-preview' = {
  ...
}

次の Bicep ファイルは、前の Bicep ファイルをモジュールとして使用します。 Bicep ファイルは既存のキー コンテナーを参照し、getSecret 関数を呼び出してキー コンテナーのシークレットを取得し、その値をパラメーターとしてモジュールに渡します。

param sqlServerName string
param adminLogin string

param subscriptionId string
param kvResourceGroup string
param kvName string

resource keyVault 'Microsoft.KeyVault/vaults@2023-02-01' existing = {
  name: kvName
  scope: resourceGroup(subscriptionId, kvResourceGroup )
}

module sql './sql.bicep' = {
  name: 'deploySQL'
  params: {
    sqlServerName: sqlServerName
    adminLogin: adminLogin
    adminPassword: keyVault.getSecret('vmAdminPassword')
  }
}

list*

resourceName.list([apiVersion], [functionValues])

list で始まる操作を使用して、任意のリソースの種類に対して list 関数を呼び出すことができます。 一般的に使用されるものとして、listlistKeyslistKeyValuelistSecrets があります。

この関数の構文は、リスト操作の名前によって異なります。 戻り値も操作によって異なります。 Bicep は現在、list* 関数の完了と検証をサポートしていません。

Bicep CLI バージョン 0.4.X 以上では、アクセサー演算子を使用して list 関数を呼び出します。 たとえば、storageAccount.listKeys() のようにします。

この関数はリソースの種類と共に使用されるため、namespace 修飾子は必要ありません。

パラメーター

パラメーター 必須 タイプ 説明
apiVersion いいえ string このパラメーターを指定しない場合は、リソースの API バージョンが使用されます。 特定のバージョンで関数を実行する必要がある場合にのみ、カスタム API バージョンを指定します。 yyyy-mm-dd の形式を使用します。
functionValues いいえ object 関数の値を持つオブジェクト。 このオブジェクトは、ストレージ アカウントの listAccountSas など、パラメーター値を持つオブジェクトの受信をサポートする関数に対してのみ指定します。 関数値を渡す例をこの記事で紹介します。

有効な使用方法

list 関数は、リソース定義のプロパティで使用できます。 Bicep ファイルの outputs セクションでは、機密情報を公開する list 関数を使用しないでください。 出力値はデプロイ履歴に格納されるため、悪意のあるユーザーによって取得される可能性があります。

反復ループと一緒に使用する場合は、inputlist 関数を使用できます。これは、式がリソース プロパティに割り当てられるためです。 これらを count と一緒に使用することはできません。カウントは、list 関数が解決される前に決定される必要があるためです。

条件付きでデプロイされるリソースで list 関数を使用した場合、この関数は、リソースがデプロイされていなくても評価されます。 list 関数が存在しないリソースを参照している場合、エラーが返されます。 条件式?: 演算子を使用して、リソースがデプロイされているときにのみ関数が評価されるようにします。

戻り値

返されるオブジェクトは、使用するリスト関数によって異なります。 たとえば、ストレージ アカウントに対して listKeys は次の形式を返します。

{
  "keys": [
    {
      "keyName": "key1",
      "permissions": "Full",
      "value": "{value}"
    },
    {
      "keyName": "key2",
      "permissions": "Full",
      "value": "{value}"
    }
  ]
}

他の list 関数の戻り値の形式はさまざまです。 関数の形式を確認するには、Bicep ファイルの例に示すように、outputs セクションにその関数を含めてください。

リストの例

次の例では、ストレージ アカウントをデプロイし、そのストレージ アカウントで listKeys を呼び出します。 このキーは、デプロイ スクリプトの値を設定するときに使用されます。

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: 'dscript${uniqueString(resourceGroup().id)}'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

resource dScript 'Microsoft.Resources/deploymentScripts@2020-10-01' = {
  name: 'scriptWithStorage'
  location: location
  ...
  properties: {
    azCliVersion: '2.0.80'
    storageAccountSettings: {
      storageAccountName: storageAccount.name
      storageAccountKey: storageAccount.listKeys().keys[0].value
    }
    ...
  }
}

次の例は、パラメーターを受け取る list 関数を示しています。 この例では、関数は listAccountSas です。 有効期限のオブジェクトを渡します。 有効期限は将来の日付にする必要があります。

param accountSasProperties object {
  default: {
    signedServices: 'b'
    signedPermission: 'r'
    signedExpiry: '2020-08-20T11:00:00Z'
    signedResourceTypes: 's'
  }
}
...
sasToken: storageAccount.listAccountSas('2021-04-01', accountSasProperties).accountSasToken

実装

list* の使用例を次の表にまとめています。

リソースの種類 関数名
Microsoft.Addons/supportProviders listsupportplaninfo
Microsoft.AnalysisServices/servers listGatewayStatus
Microsoft.ApiManagement/service/authorizationServers listSecrets
Microsoft.ApiManagement/service/gateways listKeys
Microsoft.ApiManagement/service/identityProviders listSecrets
Microsoft.ApiManagement/service/namedValues listValue
Microsoft.ApiManagement/service/openidConnectProviders listSecrets
Microsoft.ApiManagement/service/subscriptions listSecrets
Microsoft.AppConfiguration/configurationStores ListKeys
Microsoft.AppPlatform/Spring listTestKeys
Microsoft.Automation/automationAccounts listKeys
Microsoft.Batch/batchAccounts listkeys
Microsoft.BatchAI/workspaces/experiments/jobs listoutputfiles
Microsoft.BotService/botServices/channels listChannelWithKeys
Microsoft.Cache/redis listKeys
Microsoft.CognitiveServices/accounts listKeys
Microsoft.ContainerRegistry/registries listCredentials
Microsoft.ContainerRegistry/registries listUsages
Microsoft.ContainerRegistry/registries/agentpools listQueueStatus
Microsoft.ContainerRegistry/registries/buildTasks listSourceRepositoryProperties
Microsoft.ContainerRegistry/registries/buildTasks/steps listBuildArguments
Microsoft.ContainerRegistry/registries/taskruns listDetails
Microsoft.ContainerRegistry/registries/webhooks listEvents
Microsoft.ContainerRegistry/registries/runs listLogSasUrl
Microsoft.ContainerRegistry/registries/tasks listDetails
Microsoft.ContainerService/managedClusters listClusterAdminCredential
Microsoft.ContainerService/managedClusters listClusterMonitoringUserCredential
Microsoft.ContainerService/managedClusters listClusterUserCredential
Microsoft.ContainerService/managedClusters/accessProfiles listCredential
Microsoft.DataBox/jobs listCredentials
Microsoft.DataFactory/datafactories/gateways listauthkeys
Microsoft.DataFactory/factories/integrationruntimes listauthkeys
Microsoft.DataLakeAnalytics/accounts/storageAccounts/Containers listSasTokens
Microsoft.DataShare/accounts/shares listSynchronizations
Microsoft.DataShare/accounts/shareSubscriptions listSourceShareSynchronizationSettings
Microsoft.DataShare/accounts/shareSubscriptions listSynchronizationDetails
Microsoft.DataShare/accounts/shareSubscriptions listSynchronizations
Microsoft.Devices/iotHubs listkeys
Microsoft.Devices/iotHubs/iotHubKeys listkeys
Microsoft.Devices/provisioningServices/keys listkeys
Microsoft.Devices/provisioningServices listkeys
Microsoft.DevTestLab/labs ListVhds
Microsoft.DevTestLab/labs/schedules ListApplicable
Microsoft.DevTestLab/labs/users/serviceFabrics ListApplicableSchedules
Microsoft.DevTestLab/labs/virtualMachines ListApplicableSchedules
Microsoft.DocumentDB/databaseAccounts listKeys
Microsoft.DocumentDB/databaseAccounts/notebookWorkspaces listConnectionInfo
Microsoft.DomainRegistration listDomainRecommendations
Microsoft.DomainRegistration/topLevelDomains listAgreements
Microsoft.EventGrid/domains listKeys
Microsoft.EventGrid/topics listKeys
Microsoft.EventHub/namespaces/authorizationRules listkeys
Microsoft.EventHub/namespaces/disasterRecoveryConfigs/authorizationRules listkeys
Microsoft.EventHub/namespaces/eventhubs/authorizationRules listkeys
Microsoft.ImportExport/jobs listBitLockerKeys
Microsoft.Kusto/Clusters/Databases ListPrincipals
Microsoft.LabServices/labs/users list
Microsoft.LabServices/labs/virtualMachines list
Microsoft.Logic/integrationAccounts/agreements listContentCallbackUrl
Microsoft.Logic/integrationAccounts/assemblies listContentCallbackUrl
Microsoft.Logic/integrationAccounts listCallbackUrl
Microsoft.Logic/integrationAccounts listKeyVaultKeys
Microsoft.Logic/integrationAccounts/maps listContentCallbackUrl
Microsoft.Logic/integrationAccounts/partners listContentCallbackUrl
Microsoft.Logic/integrationAccounts/schemas listContentCallbackUrl
Microsoft.Logic/workflows listCallbackUrl
Microsoft.Logic/workflows listSwagger
Microsoft.Logic/workflows/runs/actions listExpressionTraces
Microsoft.Logic/workflows/runs/actions/repetitions listExpressionTraces
Microsoft.Logic/workflows/triggers listCallbackUrl
Microsoft.Logic/workflows/versions/triggers listCallbackUrl
Microsoft.MachineLearning/webServices listkeys
Microsoft.MachineLearning/Workspaces listworkspacekeys
Microsoft.MachineLearningServices/workspaces/computes listKeys
Microsoft.MachineLearningServices/workspaces/computes listNodes
Microsoft.MachineLearningServices/workspaces listKeys
Microsoft.Maps/accounts listKeys
Microsoft.Media/mediaservices/assets listContainerSas
Microsoft.Media/mediaservices/assets listStreamingLocators
Microsoft.Media/mediaservices/streamingLocators listContentKeys
Microsoft.Media/mediaservices/streamingLocators listPaths
Microsoft.Network/applicationSecurityGroups listIpConfigurations
Microsoft.NotificationHubs/Namespaces/authorizationRules listkeys
Microsoft.NotificationHubs/Namespaces/NotificationHubs/authorizationRules listkeys
Microsoft.OperationalInsights/workspaces list
Microsoft.OperationalInsights/workspaces listKeys
Microsoft.PolicyInsights/remediations listDeployments
Microsoft.RedHatOpenShift/openShiftClusters listCredentials
Microsoft.Relay/namespaces/disasterRecoveryConfigs/authorizationRules listkeys
Microsoft.Search/searchServices listAdminKeys
Microsoft.Search/searchServices listQueryKeys
Microsoft.SignalRService/SignalR listkeys
Microsoft.Storage/storageAccounts listAccountSas
Microsoft.Storage/storageAccounts listkeys
Microsoft.Storage/storageAccounts listServiceSas
Microsoft.StorSimple/managers/devices listFailoverSets
Microsoft.StorSimple/managers/devices listFailoverTargets
Microsoft.StorSimple/managers listActivationKey
Microsoft.StorSimple/managers listPublicEncryptionKey
Microsoft.Synapse/workspaces/integrationRuntimes listAuthKeys
Microsoft.Web/connectionGateways ListStatus
microsoft.web/connections listconsentlinks
Microsoft.Web/customApis listWsdlInterfaces
microsoft.web/locations listwsdlinterfaces
microsoft.web/apimanagementaccounts/apis/connections listconnectionkeys
microsoft.web/apimanagementaccounts/apis/connections listsecrets
microsoft.web/sites/backups list
Microsoft.Web/sites/config list
microsoft.web/sites/functions listkeys
microsoft.web/sites/functions listsecrets
microsoft.web/sites/hybridconnectionnamespaces/relays listkeys
microsoft.web/sites listsyncfunctiontriggerstatus
microsoft.web/sites/slots/functions listsecrets
microsoft.web/sites/slots/backups list
Microsoft.Web/sites/slots/config list
microsoft.web/sites/slots/functions listsecrets

どのリソースの種類にリスト操作が含まれているのかを判断するには、次のオプションを使用できます。

  • リソース プロバイダーの REST API の操作に関するページを参照して、リスト操作を検索します。 たとえば、ストレージ アカウントには listKeys 操作があります。

  • Get-AzProviderOperation PowerShell コマンドレットを使用します。 次の例では、ストレージ アカウントのすべてのリスト操作が取得されます。

    Get-AzProviderOperation -OperationSearchString "Microsoft.Storage/*" | where {$_.Operation -like "*list*"} | FT Operation
    
  • 次の Azure CLI コマンドを使って、リスト操作のみをフィルター処理します。

    az provider operation show --namespace Microsoft.Storage --query "resourceTypes[?name=='storageAccounts'].operations[].name | [?contains(@, 'list')]"
    

pickZones

pickZones(providerNamespace, resourceType, location, [numberOfZones], [offset])

リソースの種類がリージョンのゾーンをサポートしているかどうかを判断します。 この関数ではゾーン リソースのみをサポートしています。 ゾーン冗長サービスでは空の配列を返します。 詳細については、「可用性ゾーンをサポートしている Azure サービス」を参照してください。

名前空間: az

パラメーター

パラメーター 必須 タイプ 説明
providerNamespace はい string ゾーンのサポートについて確認するためのリソースの種類のリソース プロバイダーの名前空間。
resourceType はい string ゾーンのサポートについて確認するためのリソースの種類。
location はい string ゾーンのサポートについて確認するためのリージョン。
numberOfZones いいえ 整数 (integer) 返される論理ゾーンの数。 既定値は 1 です。 この数は、1 から 3 までの正の整数である必要があります。 単一ゾーンのリソースには 1 を使用します。 複数ゾーンのリソースの場合、サポートされているゾーンの数以下の値である必要があります。
offset いいえ 整数 (integer) 開始論理ゾーンからのオフセット。 オフセットと numberOfZones の合計が、サポートされているゾーンの数を超えた場合、関数はエラーを返します。

戻り値

サポートされているゾーンを含む配列。 offset および numberOfZones の既定値を使用する場合、ゾーンをサポートするリソースの種類とリージョンでは次の配列を返します。

[
    "1"
]

numberOfZones パラメーターが 3 に設定されている場合は、次を返します。

[
    "1",
    "2",
    "3"
]

リソースの種類またはリージョンがゾーンをサポートしていない場合は、空の配列が返されます。

[
]

解説

Azure Availability Zones には、ゾーンとゾーン冗長という異なるカテゴリがあります。 pickZones 関数を使用して、ゾーン リソースの可用性ゾーンを返します。 ゾーン冗長サービス (ZRS) の場合、関数では空の配列を返します。 ゾーン リソースには、通常、リソース定義のトップ レベルに zones プロパティがあります。 可用性ゾーンのサポートのカテゴリを確認するには、「可用性ゾーンをサポートする Azure サービス」を参照してください。

特定の Azure リージョンまたは場所で可用性ゾーンがサポートされるかどうかを確認するには、ゾーン リソースの種類を指定して pickZones 関数を呼び出します (たとえば、Microsoft.Network/publicIPAddresses)。 応答が空でない場合、リージョンでは可用性ゾーンをサポートします。

pickZones の例

次の Bicep ファイルは、pickZones 関数を使用した場合の 3 つの結果を示しています。

output supported array = pickZones('Microsoft.Compute', 'virtualMachines', 'westus2')
output notSupportedRegion array = pickZones('Microsoft.Compute', 'virtualMachines', 'westus')
output notSupportedType array = pickZones('Microsoft.Cdn', 'profiles', 'westus2')

前の例からの出力は、3 つの配列を返します。

名前 Type
サポート対象 array [ "1" ]
notSupportedRegion array []
notSupportedType array []

ゾーンに対して null を指定するか、別のゾーンに仮想マシンを割り当てるかを決定するために、pickZones からの応答を使用することができます。

providers

providers 関数は Bicep で非推奨になりました。 これの使用は推奨されていません。 この関数を使用してリソース プロバイダーの API バージョンを取得した場合は、Bicep ファイルで特定の API バージョンを指定することをお勧めします。 動的に返された API バージョンを使用すると、プロパティがバージョン間で変更された場合にテンプレートが破損する可能性があります。

providers 演算は、REST API から引き続き使用できます。 Bicep ファイルの外部で使用して、リソース プロバイダーに関する情報を取得できます。

名前空間: az

reference

reference(resourceName or resourceIdentifier, [apiVersion], ['Full'])

リソースのランタイム状態を表すオブジェクトを返します。 reference 関数の出力と動作は、各リソース プロバイダー (RP) で PUT および GET 応答を実装する方法に大きく依存します。

名前空間: az

Bicep ファイルでは reference 関数へのアクセスを提供しますが、通常は不要です。 代わりに、リソースのシンボリック名を使用することをお勧めします。 reference 関数は、リソースの properties オブジェクト内でのみ使用でき、namelocation などの最上位のプロパティでは使用できません。 一般に、シンボリック名を使用する参照にも同じことが当てはまります。 ただし、name などのプロパティの場合は、reference 関数を利用せずにテンプレートを生成できます。 リソース名に関する十分な情報が、その名前を直接出力するために把握されています。 これは、コンパイル時のプロパティと呼ばれます。 Bicep 検証により、シンボリック名の不適切な使用がすべて特定できます。

次の例では、ストレージ アカウントをデプロイします。 最初の 2 つの出力では、同じ結果が得られます。

param storageAccountName string = uniqueString(resourceGroup().id)
param location string = resourceGroup().location

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: storageAccountName
  location: location
  kind: 'Storage'
  sku: {
    name: 'Standard_LRS'
  }
}

output storageObjectSymbolic object = storageAccount.properties
output storageObjectReference object = reference('storageAccount')
output storageName string = storageAccount.name
output storageLocation string = storageAccount.location

テンプレートにデプロイされていない既存のリソースからプロパティを取得するには、existing キーワードを使用します。

param storageAccountName string

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' existing = {
  name: storageAccountName
}

// use later in template as often as needed
output blobAddress string = storageAccount.properties.primaryEndpoints.blob

親リソース内に入れ子になっているリソースを参照するには、入れ子になったアクセサー (::) を使用します。 この構文は、親リソースの外部から入れ子になったリソースにアクセスする場合にのみ使用します。

vNet1::subnet1.properties.addressPrefix

存在しないリソースを参照しようとすると、NotFound エラーが発生し、デプロイは失敗します。

resourceId

resourceId([subscriptionId], [resourceGroupName], resourceType, resourceName1, [resourceName2], ...)

リソースの一意の識別子を返します。

名前空間: az

resourceId 関数は Bicep ファイルで使用できますが、通常は必要はありません。 代わりに、リソースのシンボリック名を使用して、id プロパティにアクセスします。

リソース名があいまいであるか、同じ Bicep ファイル内でプロビジョニングされていないときに、この関数を使用します。 返される ID の形式は、デプロイがリソース グループ、サブスクリプション、管理グループ、またはテナントのスコープで行われるかどうかによって異なります。

次に例を示します。

param storageAccountName string
param location string = resourceGroup().location

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: storageAccountName
  location: location
  kind: 'Storage'
  sku: {
    name: 'Standard_LRS'
  }
}

output storageID string = storageAccount.id

Bicep ファイルにデプロイされていないリソースのリソース ID を取得するには、既存のキーワードを使用します。

param storageAccountName string

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' existing = {
    name: storageAccountName
}

output storageID string = storageAccount.id

詳細については、JSON テンプレート resourceId 関数に関する記事を参照してください。

subscriptionResourceId

subscriptionResourceId([subscriptionId], resourceType, resourceName1, [resourceName2], ...)

サブスクリプション レベルでデプロイされたリソースの一意の識別子を返します。

名前空間: az

subscriptionResourceId 関数は Bicep ファイルで使用できますが、通常は必要はありません。 代わりに、リソースのシンボリック名を使用して、id プロパティにアクセスします。

識別子は、次の形式で返されます。

/subscriptions/{subscriptionId}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}

解説

この関数を使用すると、リソース グループではなく、サブスクリプションにデプロイされているリソースのリソース ID を取得できます。 返される ID は、リソース グループ値が含まれていないという点で、resourceId 関数から返される値とは異なります。

subscriptionResourceID の例

次の Bicep ファイルでは、組み込みのロールが割り当てられます。 リソース グループまたはサブスクリプションにデプロイできます。 ここでは、subscriptionResourceId 関数を使用して、組み込みロールのリソース ID を取得しています。

@description('Principal Id')
param principalId string

@allowed([
  'Owner'
  'Contributor'
  'Reader'
])
@description('Built-in role to assign')
param builtInRoleType string

var roleDefinitionId = {
  Owner: {
    id: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '8e3af657-a8ff-443c-a75c-2fe8c4bcb635')
  }
  Contributor: {
    id: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')
  }
  Reader: {
    id: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'acdd72a7-3385-48ef-bd42-f606fba81ae7')
  }
}

resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: guid(resourceGroup().id, principalId, roleDefinitionId[builtInRoleType].id)
  properties: {
    roleDefinitionId: roleDefinitionId[builtInRoleType].id
    principalId: principalId
  }
}

managementGroupResourceId

managementGroupResourceId(resourceType, resourceName1, [resourceName2], ...)

管理グループ レベルでデプロイされたリソースの一意の識別子を返します。

名前空間: az

managementGroupResourceId 関数は Bicep ファイルで使用できますが、通常は必要はありません。 代わりに、リソースのシンボリック名を使用して、id プロパティにアクセスします。

識別子は、次の形式で返されます。

/providers/Microsoft.Management/managementGroups/{managementGroupName}/providers/{resourceType}/{resourceName}

解説

この関数を使用すると、リソース グループではなく、管理グループにデプロイされているリソースのリソース ID を取得できます。 返される ID は、サブスクリプション ID とリソース グループ値が含まれていないという点で、resourceId 関数から返される値とは異なります。

managementGroupResourceID の例

次のテンプレートでは、ポリシー定義を作成し、割り当てます。 ここでは、managementGroupResourceId 関数を使用して、ポリシー定義のリソース ID を取得しています。

targetScope = 'managementGroup'

@description('Target Management Group')
param targetMG string

@description('An array of the allowed locations, all other locations will be denied by the created policy.')
param allowedLocations array = [
  'australiaeast'
  'australiasoutheast'
  'australiacentral'
]

var mgScope = tenantResourceId('Microsoft.Management/managementGroups', targetMG)
var policyDefinitionName = 'LocationRestriction'

resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2021-06-01' = {
  name: policyDefinitionName
  properties: {
    policyType: 'Custom'
    mode: 'All'
    parameters: {}
    policyRule: {
      if: {
        not: {
          field: 'location'
          in: allowedLocations
        }
      }
      then: {
        effect: 'deny'
      }
    }
  }
}

resource location_lock 'Microsoft.Authorization/policyAssignments@2021-06-01' = {
  name: 'location-lock'
  properties: {
    scope: mgScope
    policyDefinitionId: managementGroupResourceId('Microsoft.Authorization/policyDefinitions', policyDefinitionName)
  }
  dependsOn: [
    policyDefinition
  ]
}

tenantResourceId

tenantResourceId(resourceType, resourceName1, [resourceName2], ...)

テナント レベルでデプロイされたリソースの一意の識別子を返します。

名前空間: az

tenantResourceId 関数は Bicep ファイルで使用できますが、通常は必要はありません。 代わりに、リソースのシンボリック名を使用して、id プロパティにアクセスします。

識別子は、次の形式で返されます。

/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}

組み込みのポリシー定義は、テナント レベルのリソースです。 組み込みのポリシー定義を参照するポリシー割り当てをデプロイするには、tenantResourceId 関数を使用します。

@description('Specifies the ID of the policy definition or policy set definition being assigned.')
param policyDefinitionID string = '0a914e76-4921-4c19-b460-a2d36003525a'

@description('Specifies the name of the policy assignment, can be used defined or an idempotent name as the defaultValue provides.')
param policyAssignmentName string = guid(policyDefinitionID, resourceGroup().name)

resource policyAssignment 'Microsoft.Authorization/policyAssignments@2022-06-01' = {
  name: policyAssignmentName
  properties: {
    scope: subscriptionResourceId('Microsoft.Resources/resourceGroups', resourceGroup().name)
    policyDefinitionId: tenantResourceId('Microsoft.Authorization/policyDefinitions', policyDefinitionID)
  }
}

次のステップ

  • 現在のデプロイから値を取得するには、「Deployment value functions (デプロイ値関数)」を参照してください。
  • リソースの種類を作成するときに指定した回数反復処理を行う場合は Bicep での反復ループを参照してください。