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@2023-04-01' = {
name: 'locationRestriction'
properties: {
policyType: 'Custom'
mode: 'All'
parameters: {}
policyRule: {
if: {
not: {
field: 'location'
in: allowedLocations
}
}
then: {
effect: 'deny'
}
}
}
}
resource policyAssignment 'Microsoft.Authorization/policyAssignments@2024-04-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()
デコレーターを持つモジュール パラメーターでのみ使用できます。
キー コンテナーでは、enabledForTemplateDeployment
を true
に設定する必要があります。 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@2023-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-07-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 関数を呼び出すことができます。 一般的に使用されるものとして、list
、listKeys
、listKeyValue
、listSecrets
があります。
この関数の構文は、リスト操作の名前によって異なります。 戻り値も操作によって異なります。 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
関数を使用しないでください。 出力値はデプロイ履歴に格納されるため、悪意のあるユーザーによって取得される可能性があります。
反復ループと一緒に使用する場合は、input
の list
関数を使用できます。これは、式がリソース プロパティに割り当てられるためです。 これらを 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@2023-04-01' = {
name: 'dscript${uniqueString(resourceGroup().id)}'
location: location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
}
resource dScript 'Microsoft.Resources/deploymentScripts@2023-08-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')]"
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@2023-04-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@2024-04-01' = {
name: 'location-lock'
properties: {
scope: mgScope
policyDefinitionId: managementGroupResourceId('Microsoft.Authorization/policyDefinitions', policyDefinitionName)
}
dependsOn: [
policyDefinition
]
}
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
オブジェクト内でのみ使用でき、name
や location
などの最上位のプロパティでは使用できません。 一般に、シンボリック名を使用する参照にも同じことが当てはまります。 ただし、name
などのプロパティの場合は、reference 関数を利用せずにテンプレートを生成できます。 リソース名に関する十分な情報が、その名前を直接出力するために把握されています。 これは、コンパイル時のプロパティと呼ばれます。 Bicep 検証により、シンボリック名の不適切な使用がすべて特定できます。
次の例では、ストレージ アカウントをデプロイします。 最初の 2 つの出力では、同じ結果が得られます。
param storageAccountName string = uniqueString(resourceGroup().id)
param location string = resourceGroup().location
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-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@2023-04-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@2023-04-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@2023-04-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
}
}
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@2024-04-01' = {
name: policyAssignmentName
properties: {
scope: subscriptionResourceId('Microsoft.Resources/resourceGroups', resourceGroup().name)
policyDefinitionId: tenantResourceId('Microsoft.Authorization/policyDefinitions', policyDefinitionID)
}
}
次のステップ
- 現在のデプロイから値を取得するには、「Deployment value functions (デプロイ値関数)」を参照してください。
- リソースの種類を作成するときに指定した回数反復処理を行う場合は Bicep での反復ループを参照してください。