Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Resource Manager предоставляет следующие функции для получения значений ресурсов в шаблоне Azure Resource Manager (шаблон ARM):
- extensionResourceId
- список*
- pickZones
- providers (не рекомендуется)
- ссылка
- Ссылки
- resourceId
- subscriptionResourceId
- managementGroupResourceId
- tenantResourceId
Сведения о получении значений из параметров, переменных или текущего развертывания см. в функциях значений развертывания.
Сведения о получении значений области развертывания см. в разделе "Функции области".
Совет
рекомендуется Bicep так как он предлагает те же возможности, что и шаблоны ARM, а синтаксис проще использовать. Дополнительные сведения см. в разделе Bicep resource функции.
extensionResourceId
extensionResourceId(baseResourceId, resourceType, resourceName1, [resourceName2], ...)
Возвращает идентификатор ресурса для ресурса расширения. Ресурс расширения — это тип ресурса, который прилагается к другому ресурсу для увеличения его возможностей.
В Bicep используйте функцию extensionResourceId.
Параметры
| Параметр | Обязательное поле | Тип | Описание |
|---|---|---|---|
| baseResourceId | Да | строка | Идентификатор ресурса, к которому применяется ресурс расширения. |
| Тип ресурса | Да | строка | Тип ресурса расширения, включая пространство имен поставщика ресурсов. |
| имя_ресурса1 | Да | строка | Имя ресурса расширения. |
| имя_ресурса2 | Нет | строка | Следующий сегмент имени ресурса, если он необходим. |
Продолжайте добавлять имена ресурсов в качестве параметров, если тип ресурса включает больше сегментов.
Возвращаемое значение
Базовый формат идентификатора ресурса, возвращаемого этой функцией:
{scope}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}
Сегмент области действия зависит от расширяемого базового ресурса. Например, идентификатор подписки имеет сегменты, отличные от идентификатора группы ресурсов.
Когда ресурс расширения применяется к ресурсу, идентификатор ресурса возвращается в следующем формате:
/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
В следующем примере возвращается идентификатор ресурса для блокировки группы ресурсов:
{
"$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{Value}(resourceName or resourceIdentifier, apiVersion, functionValues)
Синтаксис для этой функции зависит от имени из списка операций. Каждая реализация возвращает значения для типа ресурса, который поддерживает операцию list. Имя операции должно начинаться с list с суффикса. Наиболее распространенными вариантами применения являются list, listKeys, listKeyValue и listSecrets.
В Bicep используйте функцию list*.
Параметры
| Параметр | Обязательное поле | Тип | Описание |
|---|---|---|---|
| имя_ресурса или идентификатор_ресурса | Да | строка | Уникальный идентификатор ресурса. |
| версия_API | Да | строка | Версия API для состояния среды выполнения ресурса. Как правило, указывается в формате гггг-мм-дд. |
| functionValues | Нет | объект | Объект, содержащий значения для функции. Предоставляйте этот объект только для функций, которые поддерживают прием объекта с такими значениями параметров, как listAccountSas, в учетной записи хранения. В этой статье показан пример передачи значения функции. |
Допустимые варианты использования
Функции list можно использовать в свойствах определения ресурса. Не используйте функцию list, которая предоставляет конфиденциальную информацию, в разделе выходных данных шаблона. Выходные значения хранятся в журнале развертывания и могут быть получены злоумышленником.
При использовании с итерацией свойства можно использовать функции list для input, так как выражение назначается свойству ресурса. Их нельзя использовать с count, так как count должен быть определен до разрешения функции list.
Реализации
Следующая таблица содержит возможные способы использования list*.
| Тип ресурса | Имя функции |
|---|---|
| Майкрософт. Addons/supportProviders | listupportplaninfo |
| Майкрософт. AnalysisServices/servers | listGatewayStatus |
| Майкрософт. ApiManagement/service/authorizationServers | listSecrets |
| Майкрософт. ApiManagement/service/gateways | listKeys |
| Майкрософт. ApiManagement/service/identityProviders | listSecrets |
| Майкрософт. ApiManagement/service/namedValues | listValue |
| Майкрософт. ApiManagement/service/openidConnectProviders | listSecrets |
| Майкрософт. ApiManagement/service/subscriptions | listSecrets |
| Майкрософт. AppConfiguration/configurationStores | ListKeys |
| Майкрософт. AppPlatform/Spring | listTestKeys |
| Майкрософт. Автоматизация и автоматизацияAccounts | listKeys |
| Майкрософт. Batch/batchAccounts | listKeys |
| Майкрософт. BatchAI/workspaces/experiments/jobs | listoutputfiles |
| Майкрософт. BotService/botServices/channel | listChannelWithKeys |
| Майкрософт. Кэш/redis | listKeys |
| Майкрософт. CognitiveServices/accounts | listKeys |
| Майкрософт. ContainerRegistry/registries | listCredentials |
| Майкрософт. ContainerRegistry/registries | listUsages |
| Майкрософт. ContainerRegistry/registries/agentpools | listQueueStatus |
| Майкрософт. ContainerRegistry/registries/buildTasks | listSourceRepositoryProperties |
| Майкрософт. ContainerRegistry/registries/buildTasks/steps | listBuildArguments |
| Майкрософт. ContainerRegistry/registries/taskruns | listDetails |
| Майкрософт. ContainerRegistry/registries/webhooks | listEvents |
| Майкрософт. ContainerRegistry/registries/runs | listLogSasUrl |
| Майкрософт. ContainerRegistry/registries/tasks | listDetails |
| Майкрософт. ContainerService/managedClusters | listClusterAdminCredential |
| Майкрософт. ContainerService/managedClusters | listClusterMonitoringUserCredential |
| Майкрософт. ContainerService/managedClusters | listClusterUserCredential |
| Майкрософт. ContainerService/managedClusters/accessProfiles | listCredential |
| Майкрософт. DataBox/jobs | listCredentials |
| Майкрософт. DataFactory/datafactories/gateways | listauthkeys |
| Майкрософт. DataFactory/factories/integrationruntimes | listauthkeys |
| Майкрософт. DataLakeAnalytics/accounts/storageAccounts/Container | listSasTokens |
| Майкрософт. DataShare/accounts/share | listSynchronizations |
| Майкрософт. DataShare/accounts/shareSubscriptions | listSourceShareSynchronizationSettings |
| Майкрософт. DataShare/accounts/shareSubscriptions | listSynchronizationDetails |
| Майкрософт. DataShare/accounts/shareSubscriptions | listSynchronizations |
| Майкрософт. Устройства и iotHubs | listKeys |
| Майкрософт. Устройства/iotHubs/iotHubKeys | listKeys |
| Майкрософт. Устройства, подготовка служб и ключей | listKeys |
| Майкрософт. Устройства и службы подготовки | listKeys |
| Майкрософт. DevTestLab/labs | ListVhds |
| Майкрософт. DevTestLab/labs/schedules | ListApplicable |
| Майкрософт. DevTestLab/labs/users/serviceFabrics | ListApplicableSchedules |
| Майкрософт. DevTestLab/labs/virtualMachines | ListApplicableSchedules |
| Майкрософт. DocumentDB/databaseAccounts | listKeys |
| Майкрософт. DocumentDB/databaseAccounts/notebookWorkspaces | listConnectionInfo |
| Майкрософт. DomainRegistration/topLevelDomains | listAgreements |
| Майкрософт. EventHub/namespaces/authorizationRules | listKeys |
| Майкрософт. EventHub/namespaces/disasterRecoveryConfigs/authorizationRules | listKeys |
| Майкрософт. EventHub/namespaces/eventhubs/authorizationRules | listKeys |
| Майкрософт. ImportExport/jobs | listBitLockerKeys |
| Майкрософт. Kusto/Clusters/Database | ListPrincipals |
| Майкрософт. LabServices/labs/users | список |
| Майкрософт. LabServices/labs/virtualMachines | список |
| Майкрософт. Logic/integrationAccounts/agreements | listContentCallbackUrl |
| Майкрософт. Logic/integrationAccounts/assemblies | listContentCallbackUrl |
| Майкрософт. Logic/integrationAccounts | listCallbackUrl |
| Майкрософт. Logic/integrationAccounts | listKeyVaultKeys |
| Майкрософт. Logic/integrationAccounts/maps | listContentCallbackUrl |
| Майкрософт. Logic/integrationAccounts/partners | listContentCallbackUrl |
| Майкрософт. Logic/integrationAccounts/schemas | listContentCallbackUrl |
| Майкрософт. Логика и рабочие процессы | listCallbackUrl |
| Майкрософт. Логика и рабочие процессы | listSwagger |
| Майкрософт. Логика, рабочие процессы, запуски и действия | listExpressionTraces |
| Майкрософт. Логика,рабочие процессы,запуски/действия/повторения | listExpressionTraces |
| Майкрософт. Логика, рабочие процессы и триггеры | listCallbackUrl |
| Майкрософт. Логика/рабочие процессы/ версии/триггеры | listCallbackUrl |
| Майкрософт. MachineLearning/webServices | listkeys |
| Майкрософт. MachineLearning/Workspaces | listworkspacekeys |
| Майкрософт. Карты и учетные записи | listKeys |
| Майкрософт. Media/mediaservices/assets | listContainerSas |
| Майкрософт. Media/mediaservices/assets | listStreamingLocator |
| Майкрософт. Media/mediaservices/streamingLocator | listContentKeys |
| Майкрософт. Media/mediaservices/streamingLocator | listPaths |
| Майкрософт. Network/applicationSecurityGroups | listIpConfigurations |
| Майкрософт. NotificationHubs/Namespaces/authorizationRules | listkeys |
| Майкрософт. NotificationHubs/Namespaces/NotificationHubs/authorizationRules | listkeys |
| Майкрософт. OperationsInsights/workspaces | список |
| Майкрософт. OperationsInsights/workspaces | listKeys |
| Майкрософт. ПолитикиInsights/исправлений | listDeployments |
| Майкрософт. RedHatOpenShift/openShiftClusters | listCredentials |
| Майкрософт. Relay/namespaces/authorizationRules | listKeys |
| Майкрософт. Relay/namespaces/disasterRecoveryConfigs/authorizationRules | listKeys |
| Майкрософт. Relay/namespaces/HybridConnections/authorizationRules | listKeys |
| Майкрософт. Relay/namespaces/WcfRelays/authorizationRules | listkeys |
| Майкрософт. Search/searchServices | listAdminKeys |
| Майкрософт. Search/searchServices | listQueryKeys |
| Майкрософт. ServiceBus/namespaces/authorizationRules | listKeys |
| Майкрософт. ServiceBus/namespaces/disasterRecoveryConfigs/authorizationRules | listKeys |
| Майкрософт. ServiceBus/namespaces/queues/authorizationRules | listKeys |
| Майкрософт. SignalRService/SignalR | listKeys |
| Майкрософт. Storage/storageAccounts | listAccountSas |
| Майкрософт. Storage/storageAccounts | listKeys |
| Майкрософт. Storage/storageAccounts | listServiceSas |
| Майкрософт. StorSimple/manager/devices | listFailoverSets |
| Майкрософт. StorSimple/manager/devices | listFailoverTargets |
| Майкрософт. StorSimple/менеджеры | listActivationKey |
| Майкрософт. StorSimple/менеджеры | listPublicEncryptionKey |
| Майкрософт. Synapse/workspaces/integrationRuntimes | listAuthKeys |
| Майкрософт. Web/connectionGateways | ListStatus |
| microsoft.web/connections | listconsentlinks |
| Майкрософт. Web/customApis | listWsdlInterfaces |
| microsoft.web/locations | listwsdlinterfaces |
| microsoft.web/apimanagementaccounts/apis/connections | listconnectionkeys |
| microsoft.web/apimanagementaccounts/apis/connections | listSecrets |
| microsoft.web/sites/backups | список |
| Майкрософт. Web/sites/config | список |
| 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 | список |
| Майкрософт. Web/sites/slots/config | список |
| microsoft.web/sites/slots/functions | listSecrets |
Чтобы определить, какие типы ресурсов поддерживают операцию list, можно использовать следующие варианты:
Просмотрите операции REST API для поставщика ресурсов и найдите операции list. Например, в учетных записях хранения есть операция listKeys.
Воспользуйтесь командлетом PowerShell Get-AzProviderOperation. В следующем примере извлекаются все операции list для учетных записей хранения:
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 примера шаблона, использующего if и list с условно развернутыми ресурсами.
Пример функции list
В следующем примере используется 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.
Параметры
| Параметр | Обязательное поле | Тип | Описание |
|---|---|---|---|
| пространство_имен_поставщика | Да | строка | Пространство имен поставщика ресурсов для типа ресурса, для которого проверяется поддержка зоны. |
| Тип ресурса | Да | строка | Тип ресурса для проверки поддержки зоны. |
| расположение | Да | строка | Регион, в котором проверяется поддержка зоны. |
| numberOfZones | Нет | целое число | Число логических зон для возврата. Значение по умолчанию — 1. Это должно быть целое положительное число от 1 до 3. Используйте 1 для ресурсов с одной зоной. Для ресурсов с несколькими зонами значение должно быть меньше или равно числу поддерживаемых зон. |
| смещение | Нет | целое число | Смещение от начальной логической зоны. Функция возвращает ошибку, если смещение плюс numberOfZones превышает число поддерживаемых зон. |
Возвращаемое значение
Массив с поддерживаемыми зонами. При использовании значений по умолчанию для offset и numberOfZones тип и регион ресурса, поддерживающие зоны, возвращают следующий массив:
[
"1"
]
Если параметр numberOfZones имеет значение 3, возвращается:
[
"1",
"2",
"3"
]
Если тип или регион ресурса не поддерживает зоны, возвращается пустой массив. Избыточные между зонами службы также возвращают пустой массив.
[
]
Замечания
Существуют различные категории для Azure Зоны доступности — зональные и избыточные между зонами. Функцию pickZones можно использовать для возврата зоны доступности для зональных ресурсов. Для избыточных между зонами служб (ZRS) функция возвращает пустой массив. Обычно у зональных ресурсов есть свойство zones на верхнем уровне определения ресурса. Сведения о категории поддержки зон доступности см. в разделе Azure службы, поддерживающие зоны доступности.
Чтобы определить, поддерживает ли данный регион или расположение Azure зоны доступности, вызовите функцию pickZones с зональным типом ресурса, например Майкрософт.Network/publicIPAddresses. Если ответ содержит значение, значит, регион поддерживает зоны доступности.
Пример pickZones
В следующем шаблоне показаны три результата для использования pickZones функции:
{
"$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')]"
}
}
}
Выходные данные из предыдущих примеров возвращают три массива.
| Имя. | Тип | значение |
|---|---|---|
| службы | массив | [ "1" ] |
| notSupportedRegion | массив | [] |
| notSupportedType | массив | [] |
Ответ можно использовать для pickZones определения того, следует ли предоставлять значение NULL для зон или назначать виртуальные машины разным зонам. В следующем примере устанавливается значение для зоны на основе доступности зон:
"zones": {
"value": "[if(not(empty(pickZones('Microsoft.Compute', 'virtualMachines', 'westus2'))), string(add(mod(copyIndex(),3),1)), json('null'))]"
},
Azure Cosmos DB не является зональным ресурсом, но можно использовать функцию pickZones, чтобы определить, следует ли включить избыточность зоны для георепликации. Передайте Майкрософт. Тип ресурса storage/storageAccounts, чтобы определить, следует ли включить избыточность зоны:
"resources": [
{
"type": "Microsoft.DocumentDB/databaseAccounts",
"apiVersion": "2025-05-01-preview",
"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 устарела в шаблонах ARM. Мы больше не рекомендуем ее использовать. Если вы использовали эту функцию для получения версии API для поставщика ресурсов, мы рекомендуем указать конкретную версию API в вашем шаблоне. Использование динамически возвращаемой версии API может привести к поломке вашего шаблона, если свойства изменяются между версиями.
В Bicep функция providers не рекомендуется.
Операция [providers ](/rest/api/resources/providers) по-прежнему доступна через REST API. Ее можно использовать за пределами файла шаблона ARM для получения сведений о поставщике ресурсов.
Получение
В шаблонах без символьных имен:
reference(resourceName or resourceIdentifier, [apiVersion], ['Full'])
В шаблонах с символьными именами:
reference(symbolicName or resourceIdentifier, [apiVersion], ['Full'])
Возвращает объект, представляющий состояние среды выполнения ресурса. Выходные данные и поведение reference функции сильно зависят от того, как каждый поставщик ресурсов (RP) реализует свои ответы PUT и GET. Чтобы вернуть массив объектов, представляющих состояния среды выполнения коллекций ресурсов, см . ссылки.
Bicep предоставляет функцию reference, но в большинстве случаев функция не требуется. Вместо этого используйте символическое имя ресурса. См. reference для получения дополнительной информации.
Параметры
| Параметр | Обязательное поле | Тип | Описание |
|---|---|---|---|
| resourceName/resourceIdentifier или symbolicName/resourceIdentifier | Да | строка | В шаблонах без символьных имен укажите имя или уникальный идентификатор ресурса. При указании ссылки на ресурс в текущем шаблоне укажите в качестве параметра только имя ресурса. При указании ссылки на ранее развернутый ресурс или если имя ресурса неоднозначно, укажите идентификатор ресурса.
В шаблонах с символьными именами укажите символьное имя или уникальный идентификатор ресурса. При ссылке на ресурс в текущем шаблоне укажите только символическое имя ресурса в качестве параметра. При ссылке на ранее развернутый ресурс укажите идентификатор ресурса. |
| версия_API | Нет | строка | Версия API для указанного ресурса. Этот параметр является обязательным, если ресурс не подготовлен в рамках того же шаблона. Как правило, указывается в формате гггг-мм-дд. Действительные версии API своего ресурса можно посмотреть в справочнике по шаблонам. |
| Full | Нет | строка | Значение, указывающее, возвращает ли объект полного ресурса. Если вы не укажете 'Full', возвращается только объект свойств ресурса. Полный объект включает такие значения, как идентификатор ресурса и расположение. |
Возвращаемое значение
Каждый тип ресурса возвращает различные свойства для reference функции. Функция не возвращает данные в едином предварительно заданном формате. Кроме того, возвращаемое значение отличается в зависимости от значения аргумента 'Full'. Чтобы просмотреть свойства для типа ресурса, возвратите объект в разделе outputs, как показано в примере.
Замечания
Функция reference извлекает состояние среды выполнения ранее развернутого ресурса или ресурса, развернутого в текущем шаблоне. В этой статье приведены примеры для обоих сценариев.
Обычно функция reference используется, чтобы получить определенное значение из объекта, например универсальный код ресурса (URI) конечной точки BLOB-объекта или полное доменное имя.
"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', если вам нужны значения ресурсов, которые не являются частью схемы свойств. Например, чтобы задать политику доступа к хранилищу ключей, получите свойства идентификатора для виртуальной машины.
{
"type": "Microsoft.KeyVault/vaults",
"apiVersion": "2025-05-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, namelocationили другие свойства верхнего уровня определения ресурса. При использовании с итерацией свойства можно воспользоваться функцией reference для input, так как выражение назначается свойству ресурса.
Нельзя использовать функцию reference для задания значения свойства count в цикле копирования. Можно использовать для задания других свойств в цикле. Функция reference заблокирована для свойства count, так как это свойство должно быть определено до разрешения функции reference.
Чтобы использовать функцию reference или любую функцию list* в разделе outputs вложенного шаблона, необходимо задать для параметра значение expressionEvaluationOptions, чтобы использовать оценку внутренней области, или использовать ссылку вместо вложенного шаблона.
Если вы используете reference функцию в ресурсе, который условно развернут, функция оценивается даже в том случае, если ресурс не развернут. Если функция reference ссылается на несуществующий ресурс, возникает ошибка. Используйте функцию if, чтобы убедиться, что функция вычисляется только при развертывании ресурса. См. функциюif примера шаблона, использующего if и reference с условно развернутыми ресурсами.
Неявная зависимость
С помощью функции reference вы прямо объявляете, что один ресурс зависит от другого, если указанный по ссылке ресурс предоставляется в том же шаблоне и вы ссылаетесь на него по имени (а не идентификатору). При этом свойство dependsOn использовать не нужно. Расчет функции выполняется только после развертывания ресурса, на который указывает ссылка.
Имя ресурса, символическое имя или идентификатор
При ссылке на ресурс, развернутый в том же шаблоне none-символьного имени, укажите имя ресурса.
"value": "[reference(parameters('storageAccountName'))]"
При ссылке на ресурс, развернутый в том же шаблоне символьного имени, укажите символьное имя ресурса.
"value": "[reference('myStorage').primaryEndpoints]"
или
"value": "[reference('myStorage', '2022-09-01', 'Full').location]"
При ссылке на ресурс, который не развернут в том же шаблоне, укажите идентификатор ресурса и apiVersion.
"value": "[reference(resourceId(parameters('storageResourceGroup'), 'Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2022-09-01')]"
Чтобы избежать неоднозначности в отношении ресурса, на который вы ссылаетесь, можно указать полный идентификатор ресурса.
"value": "[reference(resourceId('Microsoft.Network/publicIPAddresses', parameters('ipAddressName')))]"
При создании полной ссылки на ресурс порядок объединения сегментов из типа и имени представляет собой не только использование этих двух вариантов. Вместо этого после пространства имен используйте пары типа и имени, начиная от наименее подходящей к наиболее подходящей.
{resource-provider-namespace}/{parent-resource-type}/{parent-resource-name}[/{child-resource-type}/{child-resource-name}]
Например:
Майкрософт.Compute/virtualMachines/myVM/extensions/myExt правильно Майкрософт.Compute/virtualMachines/extensions/myVM/myExt неправильно
Чтобы упростить создание любого идентификатора ресурса, вместо функции resourceId() используйте функции concat(), описанные в этом документе.
Получение управляемого удостоверения
удостоверения Managed для ресурсов Azure являются типами ресурсов extension которые создаются неявно для некоторых ресурсов. Так как управляемое удостоверение не определено явным образом в шаблоне, необходимо указать ссылку на ресурс, к которому применяется удостоверение. Используйте Full, чтобы получить все свойства, включая явно созданное удостоверение.
Шаблон:
"[reference(resourceId(<resource-provider-namespace>, <resource-name>), <API-version>, 'Full').Identity.propertyName]"
Например, чтобы получить идентификатор субъекта для управляемого удостоверения, применяемого к виртуальной машине, используйте следующую команду:
"[reference(resourceId('Microsoft.Compute/virtualMachines', variables('vmName')),'2019-12-01', 'Full').identity.principalId]",
Кроме того, чтобы получить идентификатор клиента для управляемого удостоверения, применяемого к масштабируемой группе виртуальных машин, используйте следующую команду:
"[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": "2025-06-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')]"
}
}
}
В предыдущем примере возвращаются два объекта. Объект свойств имеет следующий формат:
{
"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 функция возвращает массив объектов, представляющих состояния среды выполнения коллекции ресурсов. Для этой функции требуется версия 2.0 языка шаблона ARM и с включенным символьным именем :
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"languageVersion": "2.0",
"contentVersion": "1.0.0.0",
...
}
В Bicep нет явной функции references. Вместо этого использование символьной коллекции используется напрямую, а во время создания кода Bicep преобразует его в шаблон ARM, который использует функцию ARM references. Дополнительные сведения см. в разделе "Справочные коллекции ресурсов и модулей".
Параметры
| Параметр | Обязательное поле | Тип | Описание |
|---|---|---|---|
| Символьное имя коллекции ресурсов | Да | строка | Символьное имя коллекции ресурсов, определенной в текущем шаблоне. Функция references не поддерживает ссылки на ресурсы, внешние к текущему шаблону. |
| "Full", "Properties" | Нет | строка | Значение, указывающее, следует ли возвращать массив полных объектов ресурсов. Значение по умолчанию — 'Properties'. Если не указать 'Full', возвращаются только объекты свойств ресурсов. Полный объект включает такие значения, как идентификатор ресурса и расположение. |
Возвращаемое значение
Массив коллекции ресурсов. Каждый тип ресурса возвращает различные свойства для reference функции. Кроме того, возвращаемое значение отличается в зависимости от значения аргумента 'Full'. Дополнительные сведения см . в справочнике.
Выходной порядок references всегда упорядочен в порядке возрастания на основе индекса копирования. Поэтому первый ресурс в коллекции с индексом 0 отображается сначала, а затем индекс 1 и т. д. Например, [worker-0, worker-1, worker-2, ...].
В приведенном выше примере, если рабочая роль-0 и рабочая роль-2 развертываются, а рабочая роль-1 не обусловлена ложным условием, выходные данные references опустят недеплойдированные ресурсы и отображают развернутые, упорядоченные по их номерам. Выходные references данные будут [ worker-0, worker-2, ...]. Если все ресурсы опущены, функция возвращает пустой массив.
Допустимые варианты использования
Функцию references нельзя использовать в циклах копирования resource или Bicep для цикла. Например, references в следующем сценарии запрещено:
{
resources: {
"resourceCollection": {
"copy": { ... },
"properties": {
"prop": "[references(...)]"
}
}
}
}
Чтобы использовать функцию references или любую функцию list* в разделе outputs вложенного шаблона, необходимо задать для параметра значение 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": "2025-09-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": "2025-09-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')]"
}
}
}
В предыдущем примере возвращаются три объекта.
"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 scope .
В Bicep используйте функцию resourceGroup scope.
идентификатор ресурса
resourceId([subscriptionId], [resourceGroupName], resourceType, resourceName1, [resourceName2], ...)
Возвращает уникальный идентификатор ресурса. Используйте эту функцию в том случае, когда имя ресурса является неоднозначным или не было предоставлено в пределах того же шаблона. Формат возвращаемого идентификатора зависит от того, происходит ли развертывание в области группы ресурсов, подписки, группы управления или клиента.
В Bicep используйте функцию resourceId.
Параметры
| Параметр | Обязательное поле | Тип | Описание |
|---|---|---|---|
| ID подписки | Нет | строка (в формате GUID) | Значение по умолчанию — текущая подписка. Укажите это значение, если нужно получить ресурс из другой подписки. Это значение предоставляется только при развертывании в области действия группы ресурсов или подписки. |
| имяГруппыРесурсов | Нет | строка | Значение по умолчанию — текущая группа ресурсов. Укажите это значение, если нужно получить ресурс из другой группы ресурсов. Это значение предоставляется только при развертывании в области действия группы ресурсов. |
| Тип ресурса | Да | строка | Тип ресурса, включая пространство имен поставщика ресурсов. |
| имя_ресурса1 | Да | строка | Имя ресурса. |
| имя_ресурса2 | Нет | строка | Следующий сегмент имени ресурса, если он необходим. |
Продолжайте добавлять имена ресурсов в качестве параметров, если тип ресурса включает больше сегментов.
Возвращаемое значение
Идентификатор ресурса возвращается в разных форматах в разных областях:
Область группы ресурсов:
/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для встроенных определений политик, так как они реализуются на уровне клиента.
Замечания
Количество параметров, предоставляемых в зависимости от того, является ли ресурс родительским или дочерним ресурсом, а ресурс находится в одной подписке или группе ресурсов.
Чтобы получить идентификатор ресурса для родительского ресурса в той же подписке и группе ресурсов, укажите тип и имя ресурса.
"[resourceId('Microsoft.ServiceBus/namespaces', 'namespace1')]"
При получении идентификатора ресурса для дочернего ресурса обратите внимание на количество сегментов в типе ресурса. Укажите имя ресурса для каждого сегмента типа ресурса. Имя сегмента соответствует ресурсу, который существует для этой части иерархии.
"[resourceId('Microsoft.ServiceBus/namespaces/queues/authorizationRules', 'namespace1', 'queue1', 'auth1')]"
Чтобы получить идентификатор ресурса в той же подписке, но в другой группе ресурсов, укажите имя группы ресурсов.
"[resourceId('otherResourceGroup', 'Microsoft.Storage/storageAccounts', 'examplestorage')]"
Чтобы получить идентификатор ресурса в другой подписке и группе ресурсов, укажите идентификатор подписки и имя группы ресурсов.
"[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": "2025-01-01",
"name": "[parameters('nicName')]",
"location": "[parameters('location')]",
"properties": {
"ipConfigurations": [
{
"name": "ipconfig1",
"properties": {
"privateIPAllocationMethod": "Dynamic",
"subnet": {
"id": "[variables('subnet1Ref')]"
}
}
}
]
}
}
]
}
Пример идентификатора ресурса
Следующий пример возвращает идентификатор ресурса для учетной записи хранения в группе ресурсов:
{
"$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')]"
}
}
}
Выходные данные значений по умолчанию из предыдущего примера:
| Имя. | Тип | значение |
|---|---|---|
| sameRGOutput | Строка | /subscriptions/{current-sub-id}/resourceGroups/examplegroup/providers/Майкрософт. Storage/storageAccounts/examplestorage |
| differentRGOutput | Строка | /subscriptions/{current-sub-id}/resourceGroups/otherResourceGroup/providers/Майкрософт. Storage/storageAccounts/examplestorage |
| differentSubOutput | Строка | /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeee4e4e4e4e/resourceGroups/otherResourceGroup/providers/Майкрософт. Storage/storageAccounts/examplestorage |
| nestedResourceOutput | Строка | /subscriptions/{current-sub-id}/resourceGroups/examplegroup/providers/Майкрософт. SQL/servers/serverName/database/databaseName |
roleDefinitions
roleDefinisions(roleName)
Возвращает сведения об определении указанной роли, включая id и roleDefinitionId. Это вспомогательный элемент на основе имен для назначений ролей RBAC Azure. Вместо того, чтобы жестко закодировать GUID встроенного определения роли (например, участника, читателя и других), вы можете указать отображаемое имя встроенной роли, а функция разрешает соответствующие сведения об определении ролей во время развертывания.
В Bicep используйте функцию roleDefinitions.
Параметры
| Параметр | Обязательное поле | Тип | Описание |
|---|---|---|---|
| roleName | Да | строка | Отображаемое имя определения роли. |
Возвращаемое значение
Объект, представляющий определение роли, включая id и roleDefinitionId.
Примеры
Следующий шаблон ARM создает детерминированное назначение ролей RBAC Azure RBAC, которое предоставляет указанному субъекту Storage Blob Data Reader встроенную роль в области развертывания путем разрешения определения роли по имени во время развертывания.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"roleDefinitionName": {
"type": "string",
"defaultValue": "Storage Blob Data Reader",
"metadata": {
"description": "Specifies the role definition ID used in the role assignment."
}
},
"principalId": {
"type": "string",
"metadata": {
"description": "Specifies the principal ID assigned to the role."
}
}
},
"variables": {
"roleAssignmentName": "[guid(parameters('principalId'), parameters('roleDefinitionName'), resourceGroup().id)]"
},
"resources": [
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"name": "[variables('roleAssignmentName')]",
"properties": {
"roleDefinitionId": "[roleDefinitions(parameters('roleDefinitionName')).id]",
"principalId": "[parameters('principalId')]"
}
}
]
}
Дополнительные сведения см. в< функции roleDefinition
Подписка
Дополнительные сведения см. в subscription функции области .
В Bicep используйте функцию subscription scope.
subscriptionResourceId
subscriptionResourceId([subscriptionId], resourceType, resourceName1, [resourceName2], ...)
Возвращает уникальный идентификатор ресурса, развернутого на уровне подписки.
В Bicep используйте функцию subscriptionResourceId.
Параметры
| Параметр | Обязательное поле | Тип | Описание |
|---|---|---|---|
| ID подписки | Нет | строка (в формате GUID) | Значение по умолчанию — текущая подписка. Укажите это значение, если нужно получить ресурс из другой подписки. |
| Тип ресурса | Да | строка | Тип ресурса, включая пространство имен поставщика ресурсов. |
| имя_ресурса1 | Да | строка | Имя ресурса. |
| имя_ресурса2 | Нет | строка | Следующий сегмент имени ресурса, если он необходим. |
Продолжайте добавлять имена ресурсов в качестве параметров, если тип ресурса включает больше сегментов.
Возвращаемое значение
Идентификатор возвращается в следующем формате:
/subscriptions/{subscriptionId}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
Замечания
Используйте эту функцию, чтобы получить идентификатор ресурса для ресурсов, развернутых на уровне подписки, а не на уровне группы ресурсов. Возвращаемый идентификатор отличается от значения, возвращаемого resourceId функцией, так как он не возвращает значение группы ресурсов.
Пример subscriptionResourceID
Следующий шаблон назначает встроенную роль. Его можно развернуть в группе ресурсов или подписке. Она использует subscriptionResourceId функцию для получения идентификатора ресурса для встроенных ролей:
{
"$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) | Значение по умолчанию — текущая группа управления. Укажите это значение, если нужно получить ресурс из другой группы управления. |
| Тип ресурса | Да | строка | Тип ресурса, включая пространство имен поставщика ресурсов. |
| имя_ресурса1 | Да | строка | Имя ресурса. |
| имя_ресурса2 | Нет | строка | Следующий сегмент имени ресурса, если он необходим. |
Продолжайте добавлять имена ресурсов в качестве параметров, если тип ресурса включает больше сегментов.
Возвращаемое значение
Идентификатор возвращается в следующем формате:
/providers/Microsoft.Management/managementGroups/{managementGroupName}/providers/{resourceType}/{resourceName}
Замечания
Используйте эту функцию, чтобы получить идентификатор ресурса для ресурсов, развернутых в группе управления, а не в группе ресурсов. Возвращаемый идентификатор отличается от значения, возвращаемого resourceId функцией, так как он не включает идентификатор подписки или значение группы ресурсов.
Пример managementGroupResourceID
Следующий шаблон создает и назначает определение политики. Для получения идентификатора ресурса для определения политики используется функция managementGroupResourceId.
{
"$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": "2025-03-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": "2025-03-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.
Параметры
| Параметр | Обязательное поле | Тип | Описание |
|---|---|---|---|
| Тип ресурса | Да | строка | Тип ресурса, включая пространство имен поставщика ресурсов. |
| имя_ресурса1 | Да | строка | Имя ресурса. |
| имя_ресурса2 | Нет | строка | Следующий сегмент имени ресурса, если он необходим. |
Продолжайте добавлять имена ресурсов в качестве параметров, если тип ресурса включает больше сегментов.
Возвращаемое значение
Идентификатор возвращается в следующем формате:
/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
Замечания
Эта функция используется для получения идентификатора ресурса для ресурса, развернутого в клиенте. Возвращенный идентификатор отличается от значений, возвращаемых другими функциями получения идентификаторов, тем, что он не включает значения группы ресурсов и подписки.
Пример 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": "2025-03-01",
"properties": {
"scope": "[subscriptionResourceId('Microsoft.Resources/resourceGroups', resourceGroup().name)]",
"policyDefinitionId": "[tenantResourceId('Microsoft.Authorization/policyDefinitions', parameters('policyDefinitionID'))]"
}
}
]
}
Следующие шаги
- Описание разделов в шаблоне ARM приведено в статье Общие сведения о структуре и синтаксисе шаблонов ARM.
- Сведения о слиянии нескольких шаблонов см. в статье Using связанных и вложенных шаблонов при развертывании ресурсов Azure.
- Чтобы выполнить итерацию заданное число раз при создании типа ресурса, см. статью Итерация ресурса в шаблонах ARM.
- Сведения о развертывании созданного шаблона см. в статье Deploy с помощью шаблонов ARM и Azure PowerShell.