Функции для работы с ресурсами для Bicep
В этой статье описаны функции Bicep для получения значений ресурса.
Получение значений параметров текущего развертывания описано в разделе Функции значений развертывания.
extensionResourceId
extensionResourceId(resourceId, resourceType, resourceName1, [resourceName2], ...)
Возвращает идентификатор ресурса для ресурса расширения. Ресурс расширения — это тип ресурса, который прилагается к другому ресурсу для увеличения его возможностей.
Пространство имен: az.
Функция extensionResourceId
доступна в файлах Bicep, но обычно она не требуется. Вместо этого используйте символьное имя для ресурса и получите доступ к свойству id
.
Базовый формат идентификатора ресурса, возвращаемого этой функцией:
{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}
Определение пользовательской политики, развернутое в группе управления, реализуется как ресурс расширения. Чтобы создать и назначить политику, разверните следующий файл Bicep в группе управления.
targetScope = 'managementGroup'
@description('An array of the allowed locations, all other locations will be denied by the created policy.')
param allowedLocations array = [
'australiaeast'
'australiasoutheast'
'australiacentral'
]
resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2023-04-01' = {
name: 'locationRestriction'
properties: {
policyType: 'Custom'
mode: 'All'
parameters: {}
policyRule: {
if: {
not: {
field: 'location'
in: allowedLocations
}
}
then: {
effect: 'deny'
}
}
}
}
resource policyAssignment 'Microsoft.Authorization/policyAssignments@2024-04-01' = {
name: 'locationAssignment'
properties: {
policyDefinitionId: policyDefinition.id
}
}
Определения встроенных политик — это ресурсы уровня клиента. Пример развертывания определения встроенной политики см. в разделе tenantResourceId.
getSecret
keyVaultName.getSecret(secretName)
Возвращает секрет из Azure Key Vault. С помощью этой функции можно передать секрет в защищенный строковый параметр модуля Bicep.
Примечание.
az.getSecret(subscriptionId, resourceGroupName, keyVaultName, secretName, secretVersion)
функцию можно использовать в .bicepparam
файлах для получения секретов хранилища ключей. Дополнительные сведения см. в разделе getSecret.
Функцию getSecret
можно использовать только в разделе params
модуля. И только с ресурсом Microsoft.KeyVault/vaults
.
module sql './sql.bicep' = {
name: 'deploySQL'
params: {
adminPassword: keyVault.getSecret('vmAdminPassword')
}
}
При попытке использовать эту функцию в любой другой части файла Bicep возникает ошибка. При использовании этой функции с интерполяцией строк также возникает ошибка, даже если она используется в разделе params.
Эту функцию можно использовать только с параметром модуля, для которого есть декоратор @secure()
.
У хранилища ключей параметр enabledForTemplateDeployment
должен иметь значение true
. У пользователя, развертывающего файл Bicep, должен быть доступ к секрету. Дополнительные сведения см. в статье Использование Azure Key Vault для передачи защищенного значения параметра во время развертывания Bicep.
Квалификатор пространства имен не требуется, так как функция используется с типом ресурса.
Параметры
Параметр | Обязательное поле | Type | Описание |
---|---|---|---|
secretName; | Да | строка | Имя секрета, хранящегося в хранилище ключей. |
Возвращаемое значение
Значение секрета для имени секрета.
Пример
В качестве модуля используется следующий файл Bicep. Он содержит параметр adminPassword
, определяемый с помощью декоратора @secure()
.
param sqlServerName string
param adminLogin string
@secure()
param adminPassword string
resource sqlServer 'Microsoft.Sql/servers@2023-08-01-preview' = {
...
}
Следующий файл Bicep использует приведенный выше файл Bicep в качестве модуля. Файл Bicep ссылается на существующее хранилище ключей и вызывает функцию getSecret
для получения секрета хранилища ключей, а затем передает значение в качестве параметра в модуль.
param sqlServerName string
param adminLogin string
param subscriptionId string
param kvResourceGroup string
param kvName string
resource keyVault 'Microsoft.KeyVault/vaults@2023-07-01' existing = {
name: kvName
scope: resourceGroup(subscriptionId, kvResourceGroup )
}
module sql './sql.bicep' = {
name: 'deploySQL'
params: {
sqlServerName: sqlServerName
adminLogin: adminLogin
adminPassword: keyVault.getSecret('vmAdminPassword')
}
}
list*
resourceName.list([apiVersion], [functionValues])
Функцию list можно вызвать для ресурсов любых типов с помощью операции, которая начинается с list
. Наиболее распространенными вариантами применения являются list
, listKeys
, listKeyValue
и listSecrets
.
Синтаксис для этой функции зависит от названия операции list. Перечень возвращаемых значений также зависит от конкретной операции. В настоящее время Bicep не поддерживает завершения и проверку для функций list*
.
При использовании интерфейса командной строки Bicep версии 0.4.X или более поздней вы вызываете функцию списка с помощью оператора доступа. Например, storageAccount.listKeys()
.
Квалификатор пространства имен не требуется, так как функция используется с типом ресурса.
Параметры
Параметр | Обязательное поле | Type | Описание |
---|---|---|---|
версия_API | Нет | строка | Если не указать этот параметр, будет использоваться версия API для ресурса. Если необходимо выполнять функцию с определенной версией, укажите только пользовательскую версию API. Используйте формат гггг-мм-дд. |
functionValues | No | объект | Объект, содержащий значения для функции. Предоставляйте этот объект только для функций, которые поддерживают прием объекта с такими значениями параметров, как listAccountSas , в учетной записи хранения. В этой статье показан пример передачи значения функции. |
Допустимые варианты использования
Функции list
можно использовать в свойствах определения ресурса. Не используйте функцию list
, которая раскрывает конфиденциальную информацию, в разделе выходных данных файла Bicep. Выходные значения хранятся в журнале развертывания и могут быть получены злоумышленником.
При использовании с итеративным циклом можно использовать функции list
для input
, так как выражение назначается свойству ресурса. Их нельзя использовать с count
, так как count должен быть определен до разрешения функции list
.
При использовании функции list
в ресурсе, который развернут условно, функция вычисляется, даже если ресурс не развернут. Если функция list
ссылается на несуществующий ресурс, возникает ошибка. Используйте оператор условного выражения ?:, чтобы убедиться, что функция вычисляется только при развертывании ресурса.
Возвращаемое значение
Возвращаемый объект зависит от используемой функции списка. Например, listKeys
для учетной записи хранения возвращает следующий формат.
{
"keys": [
{
"keyName": "key1",
"permissions": "Full",
"value": "{value}"
},
{
"keyName": "key2",
"permissions": "Full",
"value": "{value}"
}
]
}
Другие функции list
возвращают данные в других форматах. Чтобы просмотреть формат функции, включите ее в раздел outputs, как показано в примере файла Bicep.
Пример функции list
В приведенном ниже примере показано, как выполнить развертывание учетной записи хранения и вызвать для нее функцию listKeys
. Этот ключ используют при настройке значения для скриптов развертывания.
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
name: 'dscript${uniqueString(resourceGroup().id)}'
location: location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
}
resource dScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
name: 'scriptWithStorage'
location: location
...
properties: {
azCliVersion: '2.0.80'
storageAccountSettings: {
storageAccountName: storageAccount.name
storageAccountKey: storageAccount.listKeys().keys[0].value
}
...
}
}
В следующем примере показана функция list
, которая принимает параметр. В этом случае используется функция listAccountSas
. Передайте объект для времени окончания срока действия. Время окончания срока действия должно быть в будущем.
param accountSasProperties object {
default: {
signedServices: 'b'
signedPermission: 'r'
signedExpiry: '2020-08-20T11:00:00Z'
signedResourceTypes: 's'
}
}
...
sasToken: storageAccount.listAccountSas('2021-04-01', accountSasProperties).accountSasToken
Реализации
Следующая таблица содержит возможные способы использования list*
.
Тип ресурса | Имя функции |
---|---|
Microsoft.Addons/supportProviders | listsupportplaninfo |
Microsoft.AnalysisServices/servers | listGatewayStatus |
Microsoft.ApiManagement/service/authorizationServers | listSecrets |
Microsoft.ApiManagement/service/gateways | listKeys |
Microsoft.ApiManagement/service/identityProviders | listSecrets |
Microsoft.ApiManagement/service/namedValues | listValue |
Microsoft.ApiManagement/service/openidConnectProviders | listSecrets |
Microsoft.ApiManagement/service/subscriptions | listSecrets |
Microsoft.AppConfiguration/configurationStores | ListKeys |
Microsoft.AppPlatform/Spring | listTestKeys |
Microsoft.Automation/automationAccounts | listKeys |
Microsoft.Batch/batchAccounts | listkeys |
Microsoft.BatchAI/workspaces/experiments/jobs | listoutputfiles |
Microsoft.BotService/botServices/channels | listChannelWithKeys |
Microsoft.Cache/redis | listKeys |
Microsoft.CognitiveServices/accounts | listKeys |
Microsoft.ContainerRegistry/registries | listCredentials |
Microsoft.ContainerRegistry/registries | listUsages |
Microsoft.ContainerRegistry/registries/agentpools | listQueueStatus |
Microsoft.ContainerRegistry/registries/buildTasks | listSourceRepositoryProperties |
Microsoft.ContainerRegistry/registries/buildTasks/steps | listBuildArguments |
Microsoft.ContainerRegistry/registries/taskruns | listDetails |
Microsoft.ContainerRegistry/registries/webhooks | listEvents |
Microsoft.ContainerRegistry/registries/runs | listLogSasUrl |
Microsoft.ContainerRegistry/registries/tasks | listDetails |
Microsoft.ContainerService/managedClusters | listClusterAdminCredential |
Microsoft.ContainerService/managedClusters | listClusterMonitoringUserCredential |
Microsoft.ContainerService/managedClusters | listClusterUserCredential |
Microsoft.ContainerService/managedClusters/accessProfiles | listCredential |
Microsoft.DataBox/jobs | listCredentials |
Microsoft.DataFactory/datafactories/gateways | listauthkeys |
Microsoft.DataFactory/factories/integrationruntimes | listauthkeys |
Microsoft.DataLakeAnalytics/accounts/storageAccounts/Containers | listSasTokens |
Microsoft.DataShare/accounts/shares | listSynchronizations |
Microsoft.DataShare/accounts/shareSubscriptions | listSourceShareSynchronizationSettings |
Microsoft.DataShare/accounts/shareSubscriptions | listSynchronizationDetails |
Microsoft.DataShare/accounts/shareSubscriptions | listSynchronizations |
Microsoft.Devices/iotHubs | listkeys |
Microsoft.Devices/iotHubs/iotHubKeys | listkeys |
Microsoft.Devices/provisioningServices/keys | listkeys |
Microsoft.Devices/provisioningServices | listkeys |
Microsoft.DevTestLab/labs; | ListVhds |
Microsoft.DevTestLab/labs/schedules | ListApplicable |
Microsoft.DevTestLab/labs/users/serviceFabrics | ListApplicableSchedules |
Microsoft.DevTestLab/labs/virtualMachines | ListApplicableSchedules |
Microsoft.DocumentDB/databaseAccounts | listKeys |
Microsoft.DocumentDB/databaseAccounts/notebookWorkspaces | listConnectionInfo |
Microsoft.DomainRegistration | listDomainRecommendations |
Microsoft.DomainRegistration/topLevelDomains | listAgreements |
Microsoft.EventGrid/domains | listKeys |
Microsoft.EventGrid/topics | listKeys |
Microsoft.EventHub/namespaces/authorizationRules | listkeys |
Microsoft.EventHub/namespaces/disasterRecoveryConfigs/authorizationRules | listkeys |
Microsoft.EventHub/namespaces/eventhubs/authorizationRules | listkeys |
Microsoft.ImportExport/jobs | listBitLockerKeys |
Microsoft.Kusto/Clusters/Databases | ListPrincipals |
Microsoft.LabServices/labs/users | список |
Microsoft.LabServices/labs/virtualMachines | список |
Microsoft.Logic/integrationAccounts/agreements | listContentCallbackUrl |
Microsoft.Logic/integrationAccounts/assemblies | listContentCallbackUrl |
Microsoft.Logic/integrationAccounts | listCallbackUrl |
Microsoft.Logic/integrationAccounts | listKeyVaultKeys |
Microsoft.Logic/integrationAccounts/maps | listContentCallbackUrl |
Microsoft.Logic/integrationAccounts/partners | listContentCallbackUrl |
Microsoft.Logic/integrationAccounts/schemas | listContentCallbackUrl |
Microsoft.Logic/workflows | listCallbackUrl |
Microsoft.Logic/workflows | listSwagger |
Microsoft.Logic/workflows/runs/actions | listExpressionTraces |
Microsoft.Logic/workflows/runs/actions/repetitions | listExpressionTraces |
Microsoft.Logic/workflows/triggers | listCallbackUrl |
Microsoft.Logic/workflows/versions/triggers | listCallbackUrl |
Microsoft.MachineLearning/webServices | listkeys |
Microsoft.MachineLearning/Workspaces | listworkspacekeys |
Microsoft.MachineLearningServices/workspaces/computes | listKeys |
Microsoft.MachineLearningServices/workspaces/computes | listNodes |
Microsoft.MachineLearningServices/workspaces | listKeys |
Microsoft.Maps/accounts | listKeys |
Microsoft.Media/mediaservices/assets | listContainerSas |
Microsoft.Media/mediaservices/assets | listStreamingLocators |
Microsoft.Media/mediaservices/streamingLocators | listContentKeys |
Microsoft.Media/mediaservices/streamingLocators | listPaths |
Microsoft.Network/applicationSecurityGroups | listIpConfigurations |
Microsoft.NotificationHubs/Namespaces/authorizationRules | listkeys |
Microsoft.NotificationHubs/Namespaces/NotificationHubs/authorizationRules | listkeys |
Microsoft.OperationalInsights/workspaces. | список |
Microsoft.OperationalInsights/workspaces. | listKeys |
Microsoft.PolicyInsights/remediations | listDeployments |
Microsoft.RedHatOpenShift/openShiftClusters | listCredentials |
Microsoft.Relay/namespaces/disasterRecoveryConfigs/authorizationRules | listkeys |
Microsoft.Search/searchServices | listAdminKeys |
Microsoft.Search/searchServices | listQueryKeys |
Microsoft.SignalRService/SignalR | listkeys |
Microsoft.Storage/storageAccounts | listAccountSas |
Microsoft.Storage/storageAccounts | listkeys |
Microsoft.Storage/storageAccounts | listServiceSas |
Microsoft.StorSimple/managers/devices | listFailoverSets |
Microsoft.StorSimple/managers/devices | listFailoverTargets |
Microsoft.StorSimple/managers | listActivationKey |
Microsoft.StorSimple/managers | listPublicEncryptionKey |
Microsoft.Synapse/workspaces/integrationRuntimes | listAuthKeys |
Microsoft.Web/connectionGateways | ListStatus |
microsoft.web/connections | listconsentlinks |
Microsoft.Web/customApis | listWsdlInterfaces |
microsoft.web/locations | listwsdlinterfaces |
microsoft.web/apimanagementaccounts/apis/connections | listconnectionkeys |
microsoft.web/apimanagementaccounts/apis/connections | listsecrets |
microsoft.web/sites/backups | список |
Microsoft.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 | список |
Microsoft.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, чтобы отфильтровать только операции list:
az provider operation show --namespace Microsoft.Storage --query "resourceTypes[?name=='storageAccounts'].operations[].name | [?contains(@, 'list')]"
managementGroupResourceId
managementGroupResourceId(resourceType, resourceName1, [resourceName2], ...)
Возвращает уникальный идентификатор ресурса, развернутого на уровне группы управления.
Пространство имен: az.
Функция managementGroupResourceId
доступна в файлах Bicep, но обычно она не требуется. Вместо этого используйте символьное имя для ресурса и получите доступ к свойству id
.
Идентификатор возвращается в следующем формате:
/providers/Microsoft.Management/managementGroups/{managementGroupName}/providers/{resourceType}/{resourceName}
Замечания
Используйте эту функцию, чтобы получить идентификатор ресурса для ресурсов, развернутых в группе управления, а не в группе ресурсов. Возвращаемый идентификатор отличается от значения, возвращаемого функцией resourceId, поскольку не включает идентификатор подписки и значение группы ресурсов.
Пример managementGroupResourceID
Следующий шаблон создает и назначает определение политики. Для получения идентификатора ресурса для определения политики используется функция managementGroupResourceId
.
targetScope = 'managementGroup'
@description('Target Management Group')
param targetMG string
@description('An array of the allowed locations, all other locations will be denied by the created policy.')
param allowedLocations array = [
'australiaeast'
'australiasoutheast'
'australiacentral'
]
var mgScope = tenantResourceId('Microsoft.Management/managementGroups', targetMG)
var policyDefinitionName = 'LocationRestriction'
resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2023-04-01' = {
name: policyDefinitionName
properties: {
policyType: 'Custom'
mode: 'All'
parameters: {}
policyRule: {
if: {
not: {
field: 'location'
in: allowedLocations
}
}
then: {
effect: 'deny'
}
}
}
}
resource location_lock 'Microsoft.Authorization/policyAssignments@2024-04-01' = {
name: 'location-lock'
properties: {
scope: mgScope
policyDefinitionId: managementGroupResourceId('Microsoft.Authorization/policyDefinitions', policyDefinitionName)
}
dependsOn: [
policyDefinition
]
}
pickZones
pickZones(providerNamespace, resourceType, location, [numberOfZones], [offset])
Определяет, поддерживает ли тип ресурса зоны для региона. Эта функция поддерживает только зональные ресурсы. Избыточные между зонами службы возвращают пустой массив. Дополнительные сведения см. в разделе Службы Azure, поддерживающие зоны доступности.
Пространство имен: az.
Параметры
Параметр | Обязательное поле | Type | Описание |
---|---|---|---|
пространство_имен_поставщика | Да | строка | Пространство имен поставщика ресурсов для типа ресурса, для которого проверяется поддержка зоны. |
resourceType | Да | строка | Тип ресурса для проверки поддержки зоны. |
расположение | Да | строка | Регион, в котором проверяется поддержка зоны. |
numberOfZones | No | integer | Число логических зон для возврата. Значение по умолчанию — 1. Это должно быть целое положительное число от 1 до 3. Используйте 1 для ресурсов с одной зоной. Для ресурсов с несколькими зонами значение должно быть меньше или равно числу поддерживаемых зон. |
offset | No | integer | Смещение от начальной логической зоны. Функция возвращает ошибку, если смещение плюс numberOfZones превышает число поддерживаемых зон. |
Возвращаемое значение
Массив с поддерживаемыми зонами. При использовании значений по умолчанию для offset и numberOfZones
тип и регион ресурса, поддерживающие зоны, возвращают следующий массив:
[
"1"
]
Если параметр numberOfZones
имеет значение 3, возвращается:
[
"1",
"2",
"3"
]
Если тип или регион ресурса не поддерживает зоны, возвращается пустой массив.
[
]
Замечания
Существуют разные категории для зон доступности Azure – зональные и избыточные между зонами. Функцию pickZones
можно использовать для возврата зоны доступности для зональных ресурсов. Для избыточных между зонами служб (ZRS) функция возвращает пустой массив. Обычно у зональных ресурсов есть свойство zones
на верхнем уровне определения ресурса. Чтобы определить категорию поддержки для зон доступности, см. раздел службы Azure, которые поддерживают зоны доступности.
Чтобы определить, поддерживает ли регион или расположение Azure зоны доступности, вызовите функцию pickZones
с типом зонального ресурса, например Microsoft.Network/publicIPAddresses
. Если ответ содержит значение, значит, регион поддерживает зоны доступности.
Пример pickZones
В следующем файле Bicep показаны три результата использования функции pickZones
.
output supported array = pickZones('Microsoft.Compute', 'virtualMachines', 'westus2')
output notSupportedRegion array = pickZones('Microsoft.Compute', 'virtualMachines', 'westus')
output notSupportedType array = pickZones('Microsoft.Cdn', 'profiles', 'westus2')
Выходные данные из предыдущих примеров возвращают три массива.
Имя. | Тип | значение |
---|---|---|
службы | array | [ "1" ] |
notSupportedRegion | array | [] |
notSupportedType | array | [] |
Вы можете использовать ответ от pickZones
, чтобы определить, следует ли предоставить значение NULL для зон или назначить виртуальные машины разным зонам.
providers
Функция поставщиков удалена из Bicep. Мы больше не рекомендуем ее использовать. Если вы использовали эту функцию для получения версии API для поставщика ресурсов, мы рекомендуем указать конкретную версию API в вашем файле Bicep. Использование динамически возвращаемой версии API может привести к поломке вашего шаблона, если свойства изменяются между версиями.
Операция поставщиков по-прежнему доступна посредством REST API. Ее можно использовать за пределами файла Bicep для получения сведений о поставщике ресурсов.
Пространство имен: az.
Получение
reference(resourceName or resourceIdentifier, [apiVersion], ['Full'])
Возвращает объект, представляющий состояние среды выполнения ресурса. Выходные данные и поведение reference
функции сильно зависят от того, как каждый поставщик ресурсов (RP) реализует свои ответы PUT и GET.
Пространство имен: az.
Файлы Bicep предоставляют доступ к справочной функции, хотя обычно это не требуется. Вместо этого рекомендуется использовать символическое имя ресурса. Ссылочная функция может использоваться только в properties
объекте ресурса и не может использоваться для свойств верхнего уровня, например name
или location
. Это же обычно относится к ссылкам с помощью символьного имени. Однако для таких name
свойств можно создать шаблон, не используя эталонную функцию. Достаточное количество сведений об имени ресурса, как известно, напрямую выдает имя. Он называется свойствами времени компиляции. Проверка Bicep может определить любое неправильное использование символьного имени.
В следующем примере выполняется развертывание учетной записи хранения. Первые два выходных данных дают одинаковые результаты.
param storageAccountName string = uniqueString(resourceGroup().id)
param location string = resourceGroup().location
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
name: storageAccountName
location: location
kind: 'Storage'
sku: {
name: 'Standard_LRS'
}
}
output storageObjectSymbolic object = storageAccount.properties
output storageObjectReference object = reference('storageAccount')
output storageName string = storageAccount.name
output storageLocation string = storageAccount.location
Чтобы получить свойство из существующего ресурса, который не развернут в шаблоне, используйте ключевое слово existing
.
param storageAccountName string
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' existing = {
name: storageAccountName
}
// use later in template as often as needed
output blobAddress string = storageAccount.properties.primaryEndpoints.blob
Для ссылки на ресурс, который вложен в родительский ресурс, используйте вложенный метод доступа (::
). Этот синтаксис используется только при доступе к вложенному ресурсу за пределами родительского ресурса.
vNet1::subnet1.properties.addressPrefix
Если попытаться сослаться на ресурс, который не существует, вы получите ошибку NotFound
, а развертывание завершится сбоем.
resourceId
resourceId([subscriptionId], [resourceGroupName], resourceType, resourceName1, [resourceName2], ...)
Возвращает уникальный идентификатор ресурса.
Пространство имен: az.
Функция resourceId
доступна в файлах Bicep, но обычно она не требуется. Вместо этого используйте символьное имя для ресурса и получите доступ к свойству id
.
Используйте эту функцию в том случае, когда имя ресурса является неоднозначным или не было предоставлено в пределах того же файла Bicep. Формат возвращаемого идентификатора зависит от того, происходит ли развертывание в области действия группы ресурсов, подписки, группы управления или клиента.
Например:
param storageAccountName string
param location string = resourceGroup().location
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
name: storageAccountName
location: location
kind: 'Storage'
sku: {
name: 'Standard_LRS'
}
}
output storageID string = storageAccount.id
Чтобы получить идентификатор ресурса для ресурса, который не развернут в файле Bicep, используйте существующее ключевое слово.
param storageAccountName string
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' existing = {
name: storageAccountName
}
output storageID string = storageAccount.id
Дополнительные сведения см. в функции resourceId шаблона JSON.
subscriptionResourceId
subscriptionResourceId([subscriptionId], resourceType, resourceName1, [resourceName2], ...)
Возвращает уникальный идентификатор ресурса, развернутого на уровне подписки.
Пространство имен: az.
Функция subscriptionResourceId
доступна в файлах Bicep, но обычно она не требуется. Вместо этого используйте символьное имя для ресурса и получите доступ к свойству id
.
Идентификатор возвращается в следующем формате:
/subscriptions/{subscriptionId}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
Замечания
Используйте эту функцию, чтобы получить идентификатор ресурса для ресурсов, развернутых на уровне подписки, а не на уровне группы ресурсов. Возвращаемый идентификатор отличается от значения, возвращаемого функцией resourceId, тем, что он не включает значение группы ресурсов.
Пример subscriptionResourceID
Следующий файл Bicep назначает встроенную роль. Его можно развернуть либо в группе ресурсов, либо в подписке. Для получения идентификатора ресурса для встроенных ролей в нем используется функция subscriptionResourceId
.
@description('Principal Id')
param principalId string
@allowed([
'Owner'
'Contributor'
'Reader'
])
@description('Built-in role to assign')
param builtInRoleType string
var roleDefinitionId = {
Owner: {
id: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '8e3af657-a8ff-443c-a75c-2fe8c4bcb635')
}
Contributor: {
id: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')
}
Reader: {
id: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'acdd72a7-3385-48ef-bd42-f606fba81ae7')
}
}
resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(resourceGroup().id, principalId, roleDefinitionId[builtInRoleType].id)
properties: {
roleDefinitionId: roleDefinitionId[builtInRoleType].id
principalId: principalId
}
}
tenantResourceId
tenantResourceId(resourceType, resourceName1, [resourceName2], ...)
Возвращает уникальный идентификатор ресурса, развернутого на уровне клиента.
Пространство имен: az.
Функция tenantResourceId
доступна в файлах Bicep, но обычно она не требуется. Вместо этого используйте символьное имя для ресурса и получите доступ к свойству id
.
Идентификатор возвращается в следующем формате:
/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
Определения встроенных политик — это ресурсы уровня клиента. Чтобы развернуть назначение политики, ссылающееся на встроенное определение политики, используйте функцию tenantResourceId
.
@description('Specifies the ID of the policy definition or policy set definition being assigned.')
param policyDefinitionID string = '0a914e76-4921-4c19-b460-a2d36003525a'
@description('Specifies the name of the policy assignment, can be used defined or an idempotent name as the defaultValue provides.')
param policyAssignmentName string = guid(policyDefinitionID, resourceGroup().name)
resource policyAssignment 'Microsoft.Authorization/policyAssignments@2024-04-01' = {
name: policyAssignmentName
properties: {
scope: subscriptionResourceId('Microsoft.Resources/resourceGroups', resourceGroup().name)
policyDefinitionId: tenantResourceId('Microsoft.Authorization/policyDefinitions', policyDefinitionID)
}
}
Следующие шаги
- Получение значений параметров текущего развертывания описано в разделе Функции значений развертывания.
- Чтобы выполнить заданное число итераций при создании типа ресурса, см. статью Итеративные циклы в Bicep.