ARM テンプレート用のリソース関数
Resource Manager では、Azure Resource Manager テンプレート (ARM テンプレート) でリソースの値を取得するために、次の関数が提供されています。
- extensionResourceId
- list*
- pickZones
- providers (非推奨)
- reference
- references
- resourceId
- subscriptionResourceId
- managementGroupResourceId
- tenantResourceId
パラメーター、変数、現在のデプロイから値を取得する方法については、「 デプロイの値関数」を参照してください。
デプロイ スコープの値を取得するには、スコープ関数に関するページを参照してください。
extensionResourceId
extensionResourceId(baseResourceId, resourceType, resourceName1, [resourceName2], ...)
拡張リソースのリソース ID を返します。 拡張リソースは、その機能に追加する別のリソースに適用されるリソースの種類です。
Bicep では、extensionResourceId 関数を使用します。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
baseResourceId | はい | string | 拡張リソースが適用されるリソースのリソース ID。 |
resourceType | はい | string | リソース プロバイダーの名前空間を含む拡張リソースの種類。 |
resourceName1 | はい | string | 拡張リソースの名前。 |
resourceName2 | いいえ | string | 次のリソース名セグメント (必要な場合)。 |
さらに他のセグメントがリソースの種類に含まれる場合は、続けてリソース名をパラメーターとして追加します。
戻り値
この関数から返されるリソース ID の基本形式は次のとおりです。
{scope}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}
スコープ セグメントは、拡張される基本リソースによって変わります。 たとえば、サブスクリプションの ID には、リソース グループの ID とは異なるセグメントがあります。
拡張リソースがリソースに適用される場合、リソース 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}
次のセクションでは、管理グループでこの関数を使用する例を示します。
extensionResourceId の例
次の例では、リソース グループ ロックのリソース ID が返されます。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"lockName": {
"type": "string"
}
},
"variables": {},
"resources": [],
"outputs": {
"lockResourceId": {
"type": "string",
"value": "[extensionResourceId(resourceGroup().Id , 'Microsoft.Authorization/locks', parameters('lockName'))]"
}
}
}
管理グループにデプロイされたカスタム ポリシー定義は、拡張リソースとして実装されます。 ポリシーを作成して割り当てるには、次のテンプレートを管理グループにデプロイします。
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.5.6.12127",
"templateHash": "1532257987028557958"
}
},
"parameters": {
"targetMG": {
"type": "string",
"metadata": {
"description": "Target Management Group"
}
},
"allowedLocations": {
"type": "array",
"defaultValue": [
"australiaeast",
"australiasoutheast",
"australiacentral"
],
"metadata": {
"description": "An array of the allowed locations, all other locations will be denied by the created policy."
}
}
},
"variables": {
"mgScope": "[tenantResourceId('Microsoft.Management/managementGroups', parameters('targetMG'))]",
"policyDefinitionName": "LocationRestriction"
},
"resources": [
{
"type": "Microsoft.Authorization/policyDefinitions",
"apiVersion": "2020-03-01",
"name": "[variables('policyDefinitionName')]",
"properties": {
"policyType": "Custom",
"mode": "All",
"parameters": {},
"policyRule": {
"if": {
"not": {
"field": "location",
"in": "[parameters('allowedLocations')]"
}
},
"then": {
"effect": "deny"
}
}
}
},
{
"type": "Microsoft.Authorization/policyAssignments",
"apiVersion": "2020-03-01",
"name": "location-lock",
"properties": {
"scope": "[variables('mgScope')]",
"policyDefinitionId": "[extensionResourceId(variables('mgScope'), 'Microsoft.Authorization/policyDefinitions', variables('policyDefinitionName'))]"
},
"dependsOn": [
"[extensionResourceId(managementGroup().id, 'Microsoft.Authorization/policyDefinitions', variables('policyDefinitionName'))]"
]
}
]
}
組み込みのポリシー定義は、テナント レベルのリソースです。 組み込みのポリシー定義をデプロイする例については、「tenantResourceId」を参照してください。
list*
list{Value}(resourceName or resourceIdentifier, apiVersion, functionValues)
この関数の構文はリスト操作の名前によって異なります。 実装ごとに、リスト操作をサポートするリソースの種類の値が返されます。 操作名は list
で始まる必要があり、サフィックスを付けることができます。 一般的に使用されるものとして、list
、listKeys
、listKeyValue
、listSecrets
があります。
Bicep では、list* 関数を使用します。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
resourceName または resourceIdentifier | はい | string | リソースの一意識別子です。 |
apiVersion | はい | string | リソースのランタイム状態の API バージョン。 通常、yyyy-mm-dd の形式。 |
functionValues | いいえ | object | 関数の値を持つオブジェクト。 このオブジェクトは、ストレージ アカウントの listAccountSas など、パラメーター値を持つオブジェクトの受信をサポートする関数に対してのみ指定します。 関数値を渡す例をこの記事で紹介します。 |
有効な使用方法
リスト関数は、リソース定義のプロパティで使用できます。 テンプレートの outputs セクションでは、機密情報を公開するリスト関数を使用しないでください。 出力値はデプロイ履歴に格納されるため、悪意のあるユーザーによって取得される可能性があります。
プロパティの反復処理で使用する場合には、式がリソース プロパティに割り当てられるため、input
に対して list 関数を使用できます。 これらを count
と一緒に使用することはできません。カウントは、list 関数が解決される前に決定される必要があるためです。
実装
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/topLevelDomains | listAgreements |
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.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/authorizationRules | listKeys |
Microsoft.Relay/namespaces/disasterRecoveryConfigs/authorizationRules | listKeys |
Microsoft.Relay/namespaces/HybridConnections/authorizationRules | listKeys |
Microsoft.Relay/namespaces/WcfRelays/authorizationRules | listkeys |
Microsoft.Search/searchServices | listAdminKeys |
Microsoft.Search/searchServices | listQueryKeys |
Microsoft.ServiceBus/namespaces/authorizationRules | listKeys |
Microsoft.ServiceBus/namespaces/disasterRecoveryConfigs/authorizationRules | listKeys |
Microsoft.ServiceBus/namespaces/queues/authorizationRules | listKeys |
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')]"
戻り値
返されるオブジェクトは、使用する list
関数によって異なります。 たとえば、ストレージ アカウントに対して listKeys
は次の形式を返します。
{
"keys": [
{
"keyName": "key1",
"permissions": "Full",
"value": "{value}"
},
{
"keyName": "key2",
"permissions": "Full",
"value": "{value}"
}
]
}
他の list
関数の戻り値の形式はさまざまです。 関数の形式を確認するには、テンプレートの例に示すように、outputs セクションにその関数を含めてください。
解説
リソース名または resourceId 関数を使用して、リソースを指定します。 参照されているリソースをデプロイするのと同じテンプレートで list
関数を使うときは、リソース名を使ってください。
条件付きでデプロイされるリソースで list
関数を使用した場合、この関数は、リソースがデプロイされていなくても評価されます。 list
関数が存在しないリソースを参照している場合、エラーが返されます。 リソースがデプロイされている場合にのみ、この関数が評価されるようにするには、if
関数を使用します。 条件付きでデプロイされるリソースで if
と list
を使用するサンプル テンプレートについては、if 関数に関するページを参照してください。
リストの例
次の例では、デプロイ スクリプトの値を設定するときに listKeys
を使用します。
"storageAccountSettings": {
"storageAccountName": "[variables('storageAccountName')]",
"storageAccountKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), '2019-06-01').keys[0].value]"
}
次の例は、パラメーターを受け取る list
関数を示しています。 この例では、関数は listAccountSas
です。 有効期限のオブジェクトを渡します。 有効期限は将来の日付にする必要があります。
"parameters": {
"accountSasProperties": {
"type": "object",
"defaultValue": {
"signedServices": "b",
"signedPermission": "r",
"signedExpiry": "2020-08-20T11:00:00Z",
"signedResourceTypes": "s"
}
}
},
...
"sasToken": "[listAccountSas(parameters('storagename'), '2018-02-01', parameters('accountSasProperties')).accountSasToken]"
pickZones
pickZones(providerNamespace, resourceType, location, [numberOfZones], [offset])
指定された場所または領域のゾーンをリソースの種類がサポートしているかどうかを判断します。 この関数ではゾーン リソースのみをサポートしています。 ゾーン冗長サービスでは空の配列を返します。 詳細については、「可用性ゾーンをサポートしている Azure サービス」をご覧ください。
Bicep では、pickZones 関数を使用します。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
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 の例
次のテンプレートは、pickZones
関数を使用した場合の 3 つの結果を示しています。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"functions": [],
"variables": {},
"resources": [],
"outputs": {
"supported": {
"type": "array",
"value": "[pickZones('Microsoft.Compute', 'virtualMachines', 'westus2')]"
},
"notSupportedRegion": {
"type": "array",
"value": "[pickZones('Microsoft.Compute', 'virtualMachines', 'westus')]"
},
"notSupportedType": {
"type": "array",
"value": "[pickZones('Microsoft.Cdn', 'profiles', 'westus2')]"
}
}
}
前の例からの出力は、3 つの配列を返します。
名前 | Type | 値 |
---|---|---|
サポート対象 | array | [ "1" ] |
notSupportedRegion | array | [] |
notSupportedType | array | [] |
ゾーンに対して null を指定するか、別のゾーンに仮想マシンを割り当てるかを決定するために、pickZones
からの応答を使用することができます。 次の例では、ゾーンの可用性に基づいて、ゾーンの値を設定します。
"zones": {
"value": "[if(not(empty(pickZones('Microsoft.Compute', 'virtualMachines', 'westus2'))), string(add(mod(copyIndex(),3),1)), json('null'))]"
},
Azure Cosmos DB は、ゾーン リソースではありませんが、pickZones
関数を使用すると、georeplication のゾーン冗長性を有効にするかどうかを判断できます。 Microsoft.Storage/storageAccounts リソースの種類を渡して、ゾーン冗長性を有効にするかどうかを判断します。
"resources": [
{
"type": "Microsoft.DocumentDB/databaseAccounts",
"apiVersion": "2021-04-15",
"name": "[variables('accountName_var')]",
"location": "[parameters('location')]",
"kind": "GlobalDocumentDB",
"properties": {
"consistencyPolicy": "[variables('consistencyPolicy')[parameters('defaultConsistencyLevel')]]",
"locations": [
{
"locationName": "[parameters('primaryRegion')]",
"failoverPriority": 0,
"isZoneRedundant": "[if(empty(pickZones('Microsoft.Storage', 'storageAccounts', parameters('primaryRegion'))), bool('false'), bool('true'))]",
},
{
"locationName": "[parameters('secondaryRegion')]",
"failoverPriority": 1,
"isZoneRedundant": "[if(empty(pickZones('Microsoft.Storage', 'storageAccounts', parameters('secondaryRegion'))), bool('false'), bool('true'))]",
}
],
"databaseAccountOfferType": "Standard",
"enableAutomaticFailover": "[parameters('automaticFailover')]"
}
}
]
providers
providers 関数は ARM テンプレートで非推奨になりました。 これの使用は推奨されていません。 この関数を使用してリソース プロバイダーの API バージョンを取得した場合は、テンプレートで特定の API バージョンを指定することをお勧めします。 動的に返された API バージョンを使用すると、プロパティがバージョン間で変更された場合にテンプレートが破損する可能性があります。
Bicep では、providers 関数は非推奨です。
providers 演算は、REST API から引き続き使用できます。 ARM テンプレートの外部で使用し、リソース プロバイダーに関する情報を取得できます。
reference
シンボリック名 のないテンプレートでは:
reference(resourceName or resourceIdentifier, [apiVersion], ['Full'])
シンボリック名 のあるテンプレートでは:
reference(symbolicName or resourceIdentifier, [apiVersion], ['Full'])
リソースのランタイム状態を表すオブジェクトを返します。 reference
関数の出力と動作は、各リソース プロバイダー (RP) で PUT および GET 応答を実装する方法に大きく依存します。 リソース コレクションのランタイム状態を表すオブジェクトの配列を返すには、「参照」を参照してください。
Bicep は参照関数を提供しますが、ほとんどの場合、参照関数は必要ありません。 代わりに、リソースのシンボリック名を使用することをお勧めします。 参考資料をご覧ください。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
resourceName/resourceIdentifier または symbolicName/resourceIdentifier | はい | string | シンボリック名のないテンプレートで、リソースの名前または一意識別子を指定します。 現在のテンプレート内のリソースを参照する場合は、パラメーターとしてリソース名のみを指定します。 以前にデプロイされたリソースを参照する場合、またはリソースの名前があいまいな場合は、リソース ID を指定します。 シンボリック名のないテンプレートで、リソースの名前または一意識別子を指定します。 現在のテンプレート内のリソースを参照する場合は、パラメーターとしてリソース名のみを指定します。 以前にデプロイされたリソースを参照する場合は、リソース ID を指定します。 |
apiVersion | いいえ | string | 指定したリソースの API バージョンです。 このパラメーターは、同じテンプレート内でリソースがプロビジョニングされない場合に必要です。 通常、yyyy-mm-dd の形式。 リソースに有効な API のバージョンについては、テンプレート リファレンスを参照してください。 |
'Full' | いいえ | string | 完全なリソース オブジェクトを返すかどうかを指定する値。 'Full' を指定しない場合、リソースのプロパティ オブジェクトのみが返されます。 完全なオブジェクトには、リソース ID や場所などの値が含まれます。 |
戻り値
あらゆるリソースの種類で、reference 関数のさまざまなプロパティが返されます。 この関数は、定義済みの単一の形式を返しません。 また、戻り値は、'Full'
引数の値によって異なります。 あるリソースの種類のプロパティを確認するには、この例に示すように、outputs セクションでオブジェクトを返します。
解説
reference 関数は、以前にデプロイされたリソースまたは現在のテンプレートにデプロイされたリソースのいずれかのランタイム状態を取得します。 この記事では、両方のシナリオの例を示します。
通常、reference
関数は、BLOB エンドポイント URI や完全修飾ドメイン名などのオブジェクトから特定の値を返すために使用します。
"outputs": {
"BlobUri": {
"type": "string",
"value": "[reference(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))).primaryEndpoints.blob]"
},
"FQDN": {
"type": "string",
"value": "[reference(resourceId('Microsoft.Network/publicIPAddresses', parameters('ipAddressName'))).dnsSettings.fqdn]"
}
}
'Full'
は、プロパティのスキーマに含まれないリソースの値が必要なときに使用します。 たとえば、キー コンテナーのアクセス ポリシーを設定するために、仮想マシンの ID プロパティを取得する場合です。
{
"type": "Microsoft.KeyVault/vaults",
"apiVersion": "2022-07-01",
"name": "vaultName",
"properties": {
"tenantId": "[subscription().tenantId]",
"accessPolicies": [
{
"tenantId": "[reference(resourceId('Microsoft.Compute/virtualMachines', variables('vmName')), '2019-03-01', 'Full').identity.tenantId]",
"objectId": "[reference(resourceId('Microsoft.Compute/virtualMachines', variables('vmName')), '2019-03-01', 'Full').identity.principalId]",
"permissions": {
"keys": [
"all"
],
"secrets": [
"all"
]
}
}
],
...
有効な使用方法
reference
関数は、テンプレートまたはデプロイの出力セクションと、リソース定義のプロパティ オブジェクトでのみ使用できます。 type
、name
、location
、およびリソース定義のその他の最上位プロパティなど、リソース プロパティには使用できません。 プロパティの反復処理で使用する場合には、式がリソース プロパティに割り当てられるため、input
に対して reference
関数を使用できます。
reference
関数を使用してコピー ループの count
プロパティの値を設定することはできません。 ループ内のその他のプロパティの設定には使用できます。 count プロパティの参照はブロックされます。このプロパティは reference
関数が解決される前に決定される必要があるためです。
入れ子になったテンプレートの outputs セクションで reference
関数または list*
関数を使用するには、内部スコープ評価を使用するか、入れ子になったテンプレートの代わりにリンクされたテンプレートを使用するように expressionEvaluationOptions
を設定する必要があります。
reference
関数を条件付きでデプロイされるリソースで使用した場合、この関数はリソースがデプロイされていなくても評価されます。 reference
関数が存在しないリソースを参照している場合、エラーが返されます。 リソースがデプロイされている場合にのみ、この関数が評価されるようにするには、if
関数を使用します。 条件付きでデプロイされるリソースで if
と reference
を使用するサンプル テンプレートについては、if 関数に関するページを参照してください。
暗黙の依存関係
参照されているリソースを同じテンプレート内でプロビジョニングし、(リソース ID ではなく) 名前でリソースを参照する場合は、reference
関数を使用することにより、あるリソースが他のリソースに依存することを暗黙的に宣言します。 dependsOn
プロパティを一緒に使用する必要はありません。 参照先のリソースがデプロイを完了するまで、関数は評価されません。
リソース名、シンボリック名、または識別子
同じ非シンボリック名テンプレートでデプロイされるリソースを参照するときは、リソースの名前を指定します。
"value": "[reference(parameters('storageAccountName'))]"
同じシンボリック名テンプレートでデプロイされるリソースを参照するときは、リソースの名前を指定します。
"value": "[reference('myStorage').primaryEndpoints]"
または
"value": "[reference('myStorage', '2022-09-01', 'Full').location]"
同じテンプレートでデプロイされないリソースを参照するときは、リソース ID と apiVersion
を指定します。
"value": "[reference(resourceId(parameters('storageResourceGroup'), 'Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2022-09-01')]"
参照しているリソースがあいまいにならないようにするには、完全修飾リソース識別子を指定します。
"value": "[reference(resourceId('Microsoft.Network/publicIPAddresses', parameters('ipAddressName')))]"
リソースに対する完全修飾参照を作成する場合、種類と名前からセグメントを結合する順序は、単に 2 つの連結ではありません。 名前空間の後に、"種類/名前" のペアを具体性の低いものから高いものへの順に使用します。
{resource-provider-namespace}/{parent-resource-type}/{parent-resource-name}[/{child-resource-type}/{child-resource-name}]
次に例を示します。
Microsoft.Compute/virtualMachines/myVM/extensions/myExt
は正しいMicrosoft.Compute/virtualMachines/extensions/myVM/myExt
は正しくない
リソース ID の作成を簡略化するには、concat()
関数ではなく、このドキュメントで説明されている resourceId()
関数を使用します。
マネージド ID を取得する
Azure リソースのマネージド ID は、一部のリソースに対して暗黙的に作成される拡張リソースの種類です。 テンプレートにはマネージ ID が明示的に定義されていないため、ID が適用されるリソースを参照する必要があります。 暗黙的に作成された ID を含め、すべてのプロパティを取得するには、Full
を使用します。
パターンは次のとおりです。
"[reference(resourceId(<resource-provider-namespace>, <resource-name>), <API-version>, 'Full').Identity.propertyName]"
たとえば、仮想マシンに適用されるマネージド ID のプリンシパル ID を取得するには、次を使用します。
"[reference(resourceId('Microsoft.Compute/virtualMachines', variables('vmName')),'2019-12-01', 'Full').identity.principalId]",
または、仮想マシン スケール セットに適用されるマネージド ID のテナント ID を取得するには、次を使用します。
"[reference(resourceId('Microsoft.Compute/virtualMachineScaleSets', variables('vmNodeType0Name')), 2019-12-01, 'Full').Identity.tenantId]"
参照の例
次の例では、リソースをデプロイし、そのリソースを参照します。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountName": {
"type": "string"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[parameters('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"tags": {},
"properties": {
}
}
],
"outputs": {
"referenceOutput": {
"type": "object",
"value": "[reference(parameters('storageAccountName'))]"
},
"fullReferenceOutput": {
"type": "object",
"value": "[reference(parameters('storageAccountName'), '2022-09-01', 'Full')]"
}
}
}
前の例では、2 つのオブジェクトが返されます。 properties オブジェクトの形式は次のとおりです。
{
"creationTime": "2017-10-09T18:55:40.5863736Z",
"primaryEndpoints": {
"blob": "https://examplestorage.blob.core.windows.net/",
"file": "https://examplestorage.file.core.windows.net/",
"queue": "https://examplestorage.queue.core.windows.net/",
"table": "https://examplestorage.table.core.windows.net/"
},
"primaryLocation": "southcentralus",
"provisioningState": "Succeeded",
"statusOfPrimary": "available",
"supportsHttpsTrafficOnly": false
}
完全なオブジェクトの形式は次のとおりです。
{
"apiVersion":"2022-09-01",
"location":"southcentralus",
"sku": {
"name":"Standard_LRS",
"tier":"Standard"
},
"tags":{},
"kind":"Storage",
"properties": {
"creationTime":"2021-10-09T18:55:40.5863736Z",
"primaryEndpoints": {
"blob":"https://examplestorage.blob.core.windows.net/",
"file":"https://examplestorage.file.core.windows.net/",
"queue":"https://examplestorage.queue.core.windows.net/",
"table":"https://examplestorage.table.core.windows.net/"
},
"primaryLocation":"southcentralus",
"provisioningState":"Succeeded",
"statusOfPrimary":"available",
"supportsHttpsTrafficOnly":false
},
"subscriptionId":"<subscription-id>",
"resourceGroupName":"functionexamplegroup",
"resourceId":"Microsoft.Storage/storageAccounts/examplestorage",
"referenceApiVersion":"2021-04-01",
"condition":true,
"isConditionTrue":true,
"isTemplateResource":false,
"isAction":false,
"provisioningOperation":"Read"
}
次のテンプレート例では、このテンプレートでデプロイされていないストレージ アカウントが参照されます。 このストレージ アカウントは、既に同じサブスクリプション内に存在します。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageResourceGroup": {
"type": "string"
},
"storageAccountName": {
"type": "string"
}
},
"resources": [],
"outputs": {
"ExistingStorage": {
"type": "object",
"value": "[reference(resourceId(parameters('storageResourceGroup'), 'Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2021-04-01')]"
}
}
}
参照
references(symbolic name of a resource collection, ['Full', 'Properties])
references
関数は reference
と同様に機能します。 references
関数は、リソースのランタイム状態を示すオブジェクトを返すのではなく、リソース コレクションのランタイム状態を表すオブジェクトの配列を返します。 この関数には、ARM テンプレート言語バージョン 2.0
が必要であり、さらに、シンボリック名が有効になっている必要があります。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"languageVersion": "2.0",
"contentVersion": "1.0.0.0",
...
}
Bicep には、明示的な references
関数はありません。 代わりに、シンボリック コレクションの使用が直接使用され、コードの生成中に、Bicep によって ARM テンプレート references
関数を利用する ARM テンプレートに変換されます。 詳細については、「リソース/モジュール コレクションを参照する」を参照してください。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
リソース コレクションのシンボリック名 | はい | string | 現在のテンプレートで定義されているリソース コレクションのシンボリック名。 references 関数は、現在のテンプレートの外部にあるリソースの参照をサポートしていません。 |
'Full'、'Properties' | いいえ | string | リソース オブジェクト全体の配列を返すかどうかを示す値です。 既定値は 'Properties' です。 'Full' を指定しない場合、リソースのプロパティ オブジェクトのみが返されます。 完全なオブジェクトには、リソース ID や場所などの値が含まれます。 |
戻り値
リソース コレクションの配列。 reference
関数では、それぞれのリソースの種類に対し異なるプロパティが返されます。 また、戻り値は、'Full'
引数の値によって異なります。 詳細については、「reference」を参照してください。
references
の出力順序は、常にコピー インデックスに基づいて昇順に配置されます。 したがって、インデックス 0 を持つコレクション内の最初のリソースが最初に表示され、その次にインデックス 1、という順で表示されます。 たとえば、[worker-0、worker-1、worker-2、...] のようにです。
前の例では、worker-0 と worker-2 がデプロイされている一方、worker-1 は false 条件のためデプロイされいない場合、references
の出力では、デプロイされていないリソースは省略され、デプロイされたリソースが番号順に表示されます。 references
の出力は [worker-0, worker-2, ...] となります。すべてのリソースを省略すると、関数は空の配列を返します。
有効な使用方法
references
関数は、リソース コピー ループ または Bicep for ループ内では使用できません。 たとえば、次のシナリオでは、references
は許可されません。
{
resources: {
"resourceCollection": {
"copy": { ... },
"properties": {
"prop": "[references(...)]"
}
}
}
}
入れ子になったテンプレートの outputs セクションで references
関数または list*
関数を使用するには、内部スコープ評価を使用するか、入れ子になったテンプレートの代わりにリンクされたテンプレートを使用するように expressionEvaluationOptions
を設定する必要があります。
暗黙の依存関係
references
関数を使うことで、あるリソースが別のリソースに依存することが暗黙的に宣言されます。 dependsOn
プロパティを一緒に使用する必要はありません。 参照先のリソースがデプロイを完了するまで、関数は評価されません。
参照の例
次の例では、リソース コレクションをデプロイし、そのリソース コレクションを参照します。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"languageVersion": "2.0",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Location for all resources."
}
},
"numWorkers": {
"type": "int",
"defaultValue": 4,
"metadata": {
"description": "The number of workers"
}
}
},
"resources": {
"containerWorkers": {
"copy": {
"name": "containerWorkers",
"count": "[length(range(0, parameters('numWorkers')))]"
},
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2023-05-01",
"name": "[format('worker-{0}', range(0, parameters('numWorkers'))[copyIndex()])]",
"location": "[parameters('location')]",
"properties": {
"containers": [
{
"name": "[format('worker-container-{0}', range(0, parameters('numWorkers'))[copyIndex()])]",
"properties": {
"image": "mcr.microsoft.com/azuredocs/aci-helloworld",
"ports": [
{
"port": 80,
"protocol": "TCP"
}
],
"resources": {
"requests": {
"cpu": 1,
"memoryInGB": 2
}
}
}
}
],
"osType": "Linux",
"restartPolicy": "Always",
"ipAddress": {
"type": "Public",
"ports": [
{
"port": 80,
"protocol": "TCP"
}
]
}
}
},
"containerController": {
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2023-05-01",
"name": "controller",
"location": "[parameters('location')]",
"properties": {
"containers": [
{
"name": "controller-container",
"properties": {
"command": [
"echo",
"[format('Worker IPs are {0}', join(map(references('containerWorkers', 'full'), lambda('w', lambdaVariables('w').properties.ipAddress.ip)), ','))]"
],
"image": "mcr.microsoft.com/azuredocs/aci-helloworld",
"ports": [
{
"port": 80,
"protocol": "TCP"
}
],
"resources": {
"requests": {
"cpu": 1,
"memoryInGB": 2
}
}
}
}
],
"osType": "Linux",
"restartPolicy": "Always",
"ipAddress": {
"type": "Public",
"ports": [
{
"port": 80,
"protocol": "TCP"
}
]
}
},
"dependsOn": [
"containerWorkers"
]
}
},
"outputs": {
"workerIpAddresses": {
"type": "string",
"value": "[join(map(references('containerWorkers', 'full'), lambda('w', lambdaVariables('w').properties.ipAddress.ip)), ',')]"
},
"containersFull": {
"type": "array",
"value": "[references('containerWorkers', 'full')]"
},
"container": {
"type": "array",
"value": "[references('containerWorkers')]"
}
}
}
前の例では、3 つのオブジェクトが返されます。
"outputs": {
"workerIpAddresses": {
"type": "String",
"value": "20.66.74.26,20.245.100.10,13.91.86.58,40.83.249.30"
},
"containersFull": {
"type": "Array",
"value": [
{
"apiVersion": "2023-05-01",
"condition": true,
"copyContext": {
"copyIndex": 0,
"copyIndexes": {
"": 0,
"containerWorkers": 0
},
"name": "containerWorkers"
},
"copyLoopSymbolicName": "containerWorkers",
"deploymentResourceLineInfo": {
"lineNumber": 30,
"linePosition": 25
},
"existing": false,
"isAction": false,
"isConditionTrue": true,
"isTemplateResource": true,
"location": "westus",
"properties": {
"containers": [
{
"name": "worker-container-0",
"properties": {
"environmentVariables": [],
"image": "mcr.microsoft.com/azuredocs/aci-helloworld",
"instanceView": {
"currentState": {
"detailStatus": "",
"startTime": "2023-07-31T19:25:31.996Z",
"state": "Running"
},
"restartCount": 0
},
"ports": [
{
"port": 80,
"protocol": "TCP"
}
],
"resources": {
"requests": {
"cpu": 1.0,
"memoryInGB": 2.0
}
}
}
}
],
"initContainers": [],
"instanceView": {
"events": [],
"state": "Running"
},
"ipAddress": {
"ip": "20.66.74.26",
"ports": [
{
"port": 80,
"protocol": "TCP"
}
],
"type": "Public"
},
"isCustomProvisioningTimeout": false,
"osType": "Linux",
"provisioningState": "Succeeded",
"provisioningTimeoutInSeconds": 1800,
"restartPolicy": "Always",
"sku": "Standard"
},
"provisioningOperation": "Create",
"references": [],
"resourceGroupName": "demoRg",
"resourceId": "Microsoft.ContainerInstance/containerGroups/worker-0",
"scope": "",
"subscriptionId": "",
"symbolicName": "containerWorkers[0]"
},
...
]
},
"containers": {
"type": "Array",
"value": [
{
"containers": [
{
"name": "worker-container-0",
"properties": {
"environmentVariables": [],
"image": "mcr.microsoft.com/azuredocs/aci-helloworld",
"instanceView": {
"currentState": {
"detailStatus": "",
"startTime": "2023-07-31T19:25:31.996Z",
"state": "Running"
},
"restartCount": 0
},
"ports": [
{
"port": 80,
"protocol": "TCP"
}
],
"resources": {
"requests": {
"cpu": 1.0,
"memoryInGB": 2.0
}
}
}
}
],
"initContainers": [],
"instanceView": {
"events": [],
"state": "Running"
},
"ipAddress": {
"ip": "20.66.74.26",
"ports": [
{
"port": 80,
"protocol": "TCP"
}
],
"type": "Public"
},
"isCustomProvisioningTimeout": false,
"osType": "Linux",
"provisioningState": "Succeeded",
"provisioningTimeoutInSeconds": 1800,
"restartPolicy": "Always",
"sku": "Standard"
},
...
]
}
}
resourceGroup
resourceGroup スコープ関数に関する記事を参照してください。
Bicep では、resourcegroup スコープ関数を使用します。
resourceId
resourceId([subscriptionId], [resourceGroupName], resourceType, resourceName1, [resourceName2], ...)
リソースの一意の識別子を返します。 リソース名があいまいであるか、同じテンプレート内でプロビジョニングされていないときに、この関数を使用します。 返される ID の形式は、デプロイがリソース グループ、サブスクリプション、管理グループ、またはテナントのスコープで行われるかどうかによって異なります。
Bicep では、resourceId 関数を使用します。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
subscriptionId | いいえ | 文字列 (GUID 形式) | 既定値は、現在のサブスクリプションです。 別のサブスクリプション内のリソースを取得する必要がある場合は、この値を指定します。 リソース グループまたはサブスクリプションのスコープでデプロイする場合にのみ、この値を指定します。 |
resourceGroupName | いいえ | string | 既定値は、現在のリソース グループです。 別のリソース グループ内のリソースを取得する必要がある場合は、この値を指定します。 リソース グループのスコープでデプロイする場合にのみ、この値を指定します。 |
resourceType | はい | string | リソース プロバイダーの名前空間を含むリソースの種類。 |
resourceName1 | はい | string | リソースの名前。 |
resourceName2 | いいえ | string | 次のリソース名セグメント (必要な場合)。 |
さらに他のセグメントがリソースの種類に含まれる場合は、続けてリソース名をパラメーターとして追加します。
戻り値
リソース ID は、スコープによって異なる形式で返されます。
リソース グループのスコープ:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
サブスクリプション スコープ:
/subscriptions/{subscriptionId}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
管理グループまたはテナントのスコープ:
/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
混乱を避けるために、サブスクリプション、管理グループ、またはテナントにデプロイされたリソースを操作するときは、resourceId
を使用しないことをお勧めします。 代わりに、そのスコープに対して設計されている ID 関数を使用します。
- サブスクリプション レベルのリソースの場合、subscriptionResourceId 関数を使用します。
- 管理グループ レベルのリソースの場合、managementGroupResourceId 関数を使用します。 extensionResourceId 関数を使用して、管理グループの拡張として実装されているリソースを参照します。 たとえば、管理グループにデプロイされているカスタム ポリシー定義は、管理グループの拡張機能です。 テナントにデプロイされているが管理グループで使用できるリソースを参照するには、tenantResourceId 関数を使用します。 たとえば、組み込みのポリシー定義は、テナント レベルのリソースとして実装されます。
- テナントレベルのリソースの場合、tenantResourceId 関数を使用します。 組み込みのポリシー定義はテナント レベルで実装されているため、
tenantResourceId
を使用します。
解説
指定するパラメーターの数は、リソースが親であるか子であるか、また、リソースが同じサブスクリプション (またはリソース グループ) にあるかどうかで異なります。
同じサブスクリプションおよび同じリソース グループに存在する親リソースの ID を取得するには、リソースの種類と名前を指定します。
"[resourceId('Microsoft.ServiceBus/namespaces', 'namespace1')]"
子リソースのリソース ID を取得するには、リソースの種類に含まれるセグメント数に注目します。 リソースの種類を構成するセグメントごとにリソース名を指定してください。 セグメントの名前は、その階層部分に存在するリソースと対応関係にあります。
"[resourceId('Microsoft.ServiceBus/namespaces/queues/authorizationRules', 'namespace1', 'queue1', 'auth1')]"
同じサブスクリプションで、リソース グループが異なるリソースの ID を取得するには、リソース グループの名前を指定します。
"[resourceId('otherResourceGroup', 'Microsoft.Storage/storageAccounts', 'examplestorage')]"
サブスクリプションもリソース グループも異なるリソースの ID を取得するには、サブスクリプション ID とリソース グループ名を指定します。
"[resourceId('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', 'otherResourceGroup', 'Microsoft.Storage/storageAccounts','examplestorage')]"
代替のリソース グループで、ストレージ アカウントや仮想ネットワークを使用するときには、多くの場合にこの関数を使用する必要があります。 次の例は、外部のリソース グループのリソースを簡単に使用する方法を示しています。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string"
},
"virtualNetworkName": {
"type": "string"
},
"virtualNetworkResourceGroup": {
"type": "string"
},
"subnet1Name": {
"type": "string"
},
"nicName": {
"type": "string"
}
},
"variables": {
"subnet1Ref": "[resourceId(parameters('virtualNetworkResourceGroup'), 'Microsoft.Network/virtualNetworks/subnets', parameters('virtualNetworkName'), parameters('subnet1Name'))]"
},
"resources": [
{
"type": "Microsoft.Network/networkInterfaces",
"apiVersion": "2022-11-01",
"name": "[parameters('nicName')]",
"location": "[parameters('location')]",
"properties": {
"ipConfigurations": [
{
"name": "ipconfig1",
"properties": {
"privateIPAllocationMethod": "Dynamic",
"subnet": {
"id": "[variables('subnet1Ref')]"
}
}
}
]
}
}
]
}
リソース ID の例
次の例では、リソース グループ内にあるストレージ アカウントのリソース ID を返します。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [],
"outputs": {
"sameRGOutput": {
"type": "string",
"value": "[resourceId('Microsoft.Storage/storageAccounts','examplestorage')]"
},
"differentRGOutput": {
"type": "string",
"value": "[resourceId('otherResourceGroup', 'Microsoft.Storage/storageAccounts','examplestorage')]"
},
"differentSubOutput": {
"type": "string",
"value": "[resourceId('11111111-1111-1111-1111-111111111111', 'otherResourceGroup', 'Microsoft.Storage/storageAccounts','examplestorage')]"
},
"nestedResourceOutput": {
"type": "string",
"value": "[resourceId('Microsoft.SQL/servers/databases', 'serverName', 'databaseName')]"
}
}
}
既定値を使用した場合の前の例の出力は次のようになります。
名前 | Type | 値 |
---|---|---|
sameRGOutput | String | /subscriptions/{current-sub-id}/resourceGroups/examplegroup/providers/Microsoft.Storage/storageAccounts/examplestorage |
differentRGOutput | String | /subscriptions/{current-sub-id}/resourceGroups/otherResourceGroup/providers/Microsoft.Storage/storageAccounts/examplestorage |
differentSubOutput | String | /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/otherResourceGroup/providers/Microsoft.Storage/storageAccounts/examplestorage |
nestedResourceOutput | String | /subscriptions/{current-sub-id}/resourceGroups/examplegroup/providers/Microsoft.SQL/servers/serverName/databases/databaseName |
subscription
サブスクリプション スコープ関数に関する記事を参照してください。
Bicep では、subscription スコープ関数を使用します。
subscriptionResourceId
subscriptionResourceId([subscriptionId], resourceType, resourceName1, [resourceName2], ...)
サブスクリプション レベルでデプロイされたリソースの一意の識別子を返します。
Bicep では、subscriptionResourceId スコープ関数を使用します。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
subscriptionId | いいえ | 文字列 (GUID 形式) | 既定値は、現在のサブスクリプションです。 別のサブスクリプション内のリソースを取得する必要がある場合は、この値を指定します。 |
resourceType | はい | string | リソース プロバイダーの名前空間を含むリソースの種類。 |
resourceName1 | はい | string | リソースの名前。 |
resourceName2 | いいえ | string | 次のリソース名セグメント (必要な場合)。 |
さらに他のセグメントがリソースの種類に含まれる場合は、続けてリソース名をパラメーターとして追加します。
戻り値
識別子は、次の形式で返されます。
/subscriptions/{subscriptionId}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
解説
この関数を使用すると、リソース グループではなく、サブスクリプションにデプロイされているリソースのリソース ID を取得できます。 返される ID は、リソース グループ値が含まれていないという点で、resourceId 関数から返される値とは異なります。
subscriptionResourceID の例
次のテンプレートでは、組み込みのロールが割り当てられます。 リソース グループまたはサブスクリプションにデプロイできます。 ここでは、subscriptionResourceId
関数を使用して、組み込みロールのリソース ID を取得しています。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"principalId": {
"type": "string",
"metadata": {
"description": "The principal to assign the role to"
}
},
"builtInRoleType": {
"type": "string",
"allowedValues": [
"Owner",
"Contributor",
"Reader"
],
"metadata": {
"description": "Built-in role to assign"
}
},
"roleNameGuid": {
"type": "string",
"defaultValue": "[newGuid()]",
"metadata": {
"description": "A new GUID used to identify the role assignment"
}
}
},
"variables": {
"Owner": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '8e3af657-a8ff-443c-a75c-2fe8c4bcb635')]",
"Contributor": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')]",
"Reader": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'acdd72a7-3385-48ef-bd42-f606fba81ae7')]"
},
"resources": [
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"name": "[parameters('roleNameGuid')]",
"properties": {
"roleDefinitionId": "[variables(parameters('builtInRoleType'))]",
"principalId": "[parameters('principalId')]"
}
}
]
}
managementGroupResourceId
managementGroupResourceId([managementGroupResourceId],resourceType, resourceName1, [resourceName2], ...)
管理グループ レベルでデプロイされたリソースの一意の識別子を返します。
Bicep では、managementGroupResourceId 関数を使用します。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
managementGroupResourceId | いいえ | 文字列 (GUID 形式) | 既定値は現在の管理グループです。 別の管理グループ内のリソースを取得する必要がある場合は、この値を指定します。 |
resourceType | はい | string | リソース プロバイダーの名前空間を含むリソースの種類。 |
resourceName1 | はい | string | リソースの名前。 |
resourceName2 | いいえ | string | 次のリソース名セグメント (必要な場合)。 |
さらに他のセグメントがリソースの種類に含まれる場合は、続けてリソース名をパラメーターとして追加します。
戻り値
識別子は、次の形式で返されます。
/providers/Microsoft.Management/managementGroups/{managementGroupName}/providers/{resourceType}/{resourceName}
解説
この関数を使用すると、リソース グループではなく、管理グループにデプロイされているリソースのリソース ID を取得できます。 返される ID は、サブスクリプション ID とリソース グループ値が含まれていないという点で、resourceId 関数から返される値とは異なります。
managementGroupResourceID の例
次のテンプレートでは、ポリシー定義を作成し、割り当てます。 ここでは、managementGroupResourceId
関数を使用して、ポリシー定義のリソース ID を取得しています。
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"targetMG": {
"type": "string",
"metadata": {
"description": "Target Management Group"
}
},
"allowedLocations": {
"type": "array",
"defaultValue": [
"australiaeast",
"australiasoutheast",
"australiacentral"
],
"metadata": {
"description": "An array of the allowed locations, all other locations will be denied by the created policy."
}
}
},
"variables": {
"mgScope": "[tenantResourceId('Microsoft.Management/managementGroups', parameters('targetMG'))]",
"policyDefinitionName": "LocationRestriction"
},
"resources": [
{
"type": "Microsoft.Authorization/policyDefinitions",
"apiVersion": "2021-06-01",
"name": "[variables('policyDefinitionName')]",
"properties": {
"policyType": "Custom",
"mode": "All",
"parameters": {},
"policyRule": {
"if": {
"not": {
"field": "location",
"in": "[parameters('allowedLocations')]"
}
},
"then": {
"effect": "deny"
}
}
}
},
"location_lock": {
"type": "Microsoft.Authorization/policyAssignments",
"apiVersion": "2022-06-01",
"name": "location-lock",
"properties": {
"scope": "[variables('mgScope')]",
"policyDefinitionId": "[managementGroupResourceId('Microsoft.Authorization/policyDefinitions', variables('policyDefinitionName'))]"
},
"dependsOn": [
"[format('Microsoft.Authorization/policyDefinitions/{0}', variables('policyDefinitionName'))]"
]
}
]
}
tenantResourceId
tenantResourceId(resourceType, resourceName1, [resourceName2], ...)
テナント レベルでデプロイされたリソースの一意の識別子を返します。
Bicep では、tenantResourceId スコープ関数を使用します。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
resourceType | はい | string | リソース プロバイダーの名前空間を含むリソースの種類。 |
resourceName1 | はい | string | リソースの名前。 |
resourceName2 | いいえ | string | 次のリソース名セグメント (必要な場合)。 |
さらに他のセグメントがリソースの種類に含まれる場合は、続けてリソース名をパラメーターとして追加します。
戻り値
識別子は、次の形式で返されます。
/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
解説
テナントにデプロイされているリソースのリソース ID を取得するには、この関数を使用します。 返される ID は、リソース グループまたはサブスクリプションの値を含まないという点で、他のリソース ID 関数から返される値とは異なります。
tenantResourceId の例
組み込みのポリシー定義は、テナント レベルのリソースです。 組み込みのポリシー定義を参照するポリシー割り当てをデプロイするには、tenantResourceId
関数を使用します。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"policyDefinitionID": {
"type": "string",
"defaultValue": "0a914e76-4921-4c19-b460-a2d36003525a",
"metadata": {
"description": "Specifies the ID of the policy definition or policy set definition being assigned."
}
},
"policyAssignmentName": {
"type": "string",
"defaultValue": "[guid(parameters('policyDefinitionID'), resourceGroup().name)]",
"metadata": {
"description": "Specifies the name of the policy assignment, can be used defined or an idempotent name as the defaultValue provides."
}
}
},
"resources": [
{
"type": "Microsoft.Authorization/policyAssignments",
"name": "[parameters('policyAssignmentName')]",
"apiVersion": "2022-06-01",
"properties": {
"scope": "[subscriptionResourceId('Microsoft.Resources/resourceGroups', resourceGroup().name)]",
"policyDefinitionId": "[tenantResourceId('Microsoft.Authorization/policyDefinitions', parameters('policyDefinitionID'))]"
}
}
]
}
次のステップ
- ARM テンプレートのセクションの説明については、「ARM テンプレートの構造と構文について」を参照してください。
- 複数のテンプレートをマージする方法については、「Azure リソース デプロイ時のリンクされたテンプレートおよび入れ子になったテンプレートの使用」を参照してください。
- ある種類のリソースを作成するときに、指定した回数だけ反復する方法については、「ARM テンプレートでのリソースの反復処理」を参照してください。
- 作成したテンプレートをデプロイする方法については、「ARM テンプレートと Azure PowerShell を使用したリソースのデプロイ」を参照してください。