Funciones de recurso para Bicep
En este artículo se describen las funciones de Bicep para obtener valores de recurso.
Para obtener valores de la implementación actual, consulte Funciones con valores de implementación.
extensionResourceId
extensionResourceId(resourceId, resourceType, resourceName1, [resourceName2], ...)
Devuelve el id. de recurso de un recurso de extensión. Un recurso de extensión es un tipo de recurso que se aplica a otro para agregarlo a sus funcionalidades.
Espacio de nombres: az.
La función extensionResourceId
está disponible en archivos de Bicep, pero normalmente no la necesita. En su lugar, use el nombre simbólico del recurso y acceda a la propiedad id
.
El formato básico del identificador de recurso devuelto por esta función es:
{scope}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}
El segmento de ámbito varía según el recurso que se está ampliando.
Cuando el recurso de extensión se aplica a un recurso, el identificador de recurso se devuelve en el formato siguiente:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{baseResourceProviderNamespace}/{baseResourceType}/{baseResourceName}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}
Cuando el recurso de extensión se aplica a un grupo de recursos, el formato es:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}
Cuando el recurso de extensión se aplica a una suscripción, el formato es:
/subscriptions/{subscriptionId}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}
Cuando el recurso de extensión se aplica a un grupo de administración, el formato es:
/providers/Microsoft.Management/managementGroups/{managementGroupName}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}
Una definición de directiva personalizada implementada en un grupo de administración se implementa como recurso de extensión. Para crear y asignar una directiva, implemente el siguiente archivo de Bicep en un grupo de administración.
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
}
}
Las definiciones de directivas integradas son recursos del nivel de inquilino. Para obtener un ejemplo de implementación de una definición de directiva integrada, consulte tenantResourceId.
getSecret
keyVaultName.getSecret(secretName)
Devuelve un secreto de Azure Key Vault. Use esta función para pasar un secreto a un parámetro de cadena segura de un módulo Bicep.
Nota:
La función az.getSecret(subscriptionId, resourceGroupName, keyVaultName, secretName, secretVersion)
se puede usar en archivos .bicepparam
para recuperar secretos del almacén de claves. Para más información, vea getSecret.
Solo puede usar la getSecret
función desde la params
sección de un módulo. Solo puede usarlo con un Microsoft.KeyVault/vaults
recurso.
module sql './sql.bicep' = {
name: 'deploySQL'
params: {
adminPassword: keyVault.getSecret('vmAdminPassword')
}
}
Se produce un error si intenta usar esta función en cualquier otra parte del archivo de Bicep. También se produce un error si usa esta función con interpolación de cadenas, incluso cuando se utiliza en la sección de parámetros.
La función solo se puede usar con un parámetro del módulo que tenga el elemento decorator @secure()
.
El almacén de claves debe tener enabledForTemplateDeployment
establecido en true
. El usuario que implementa el archivo Bicep debe tener acceso al secreto. Para obtener más información, consulte Uso de Azure Key Vault para pasar el valor de parámetro seguro durante la implementación de Bicep.
No es necesario un calificador de espacio de nombres porque la función se usa con un tipo de recurso.
Parámetros
Parámetro | Obligatorio | Type | Descripción |
---|---|---|---|
secretName | Sí | string | Nombre del secreto almacenado en un almacén de claves. |
Valor devuelto
Valor del secreto para el nombre del secreto.
Ejemplo
El siguiente archivo de Bicep se usa como módulo. Tiene un parámetro adminPassword
definido con el decorador @secure()
.
param sqlServerName string
param adminLogin string
@secure()
param adminPassword string
resource sqlServer 'Microsoft.Sql/servers@2023-08-01-preview' = {
...
}
El siguiente archivo de Bicep consume el archivo de Bicep anterior como módulo. El archivo de Bicep hace referencia a un almacén de claves existente y llama a la función getSecret
para recuperar el secreto del almacén de claves y, a continuación, pasa el valor como parámetro al módulo.
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')
}
}
lista*
resourceName.list([apiVersion], [functionValues])
Puede llamar a una función de lista para cualquier tipo de recurso con una operación que comience por list
. Algunos usos habituales son list
, listKeys
, listKeyValue
y listSecrets
.
La sintaxis de esta función varía según el nombre de la operación de la lista. Los valores devueltos también varían según la operación. Bicep no admite actualmente finalizaciones y validación de funciones list*
.
Con la versión 0.4.X o posterior de la CLI de Bicep, puede llamar a la función de lista con el operador de acceso. Por ejemplo, storageAccount.listKeys()
.
No es necesario un calificador de espacio de nombres porque la función se usa con un tipo de recurso.
Parámetros
Parámetro | Obligatorio | Type | Descripción |
---|---|---|---|
apiVersion | No | string | Si no proporciona este parámetro, se usa la versión de API para el recurso. Proporcione solo una versión de API personalizada cuando necesite que la función se ejecute con una versión específica. Use el formato aaaa-mm-dd. |
functionValues | No | object | Un objeto que tiene valores para la función. Proporcione este objeto solo para las funciones que admiten la recepción de un objeto con valores de parámetro, como listAccountSas en una cuenta de almacenamiento. En este artículo se muestra un ejemplo de cómo pasar los valores de funciones. |
Usos válidos
Las funciones list
se pueden usar en las propiedades de una definición de recursos. No use una función list
que exponga información confidencial en la sección de salidas de un archivo de Bicep. Los valores de salida se almacenan en el historial de implementaciones y un usuario malintencionado podría recuperarlos.
Cuando se usa con un bucle iterativo, puede usar las funciones list
para input
porque la expresión se asigna a la propiedad de recurso. No se pueden utilizar con count
porque debe determinarse el recuento antes de resolver la función list
.
Si usa una función list
con un recurso que se implementa de forma condicional, se puede evaluar la función incluso si el recurso no está implementado. Se genera un error si la función list
hace referencia a un recurso que no existe. Use el operador de expresión condicional ?: para asegurarse de que la función solo se evalúa cuando se implementa el recurso.
Valor devuelto
El objeto devuelto varía según la función de la lista que use. Por ejemplo, listKeys
para una cuenta de almacenamiento devuelve el formato siguiente:
{
"keys": [
{
"keyName": "key1",
"permissions": "Full",
"value": "{value}"
},
{
"keyName": "key2",
"permissions": "Full",
"value": "{value}"
}
]
}
Otras funciones list
tienen otros formatos de devolución. Para ver el formato de una función, inclúyalo en la sección de salidas tal y como se muestra en el archivo de Bicep de ejemplo.
Ejemplo de lista
En el ejemplo siguiente se implementa una cuenta de almacenamiento y, después, se llama a listKeys
en ella. La clave se utiliza cuando se configura un valor para los scripts de implementación.
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
}
...
}
}
En el ejemplo siguiente se muestra una función list
que toma un parámetro. En este caso, la función es listAccountSas
. Pase un objeto para la hora de expiración. Dicha hora debe ser futura.
param accountSasProperties object {
default: {
signedServices: 'b'
signedPermission: 'r'
signedExpiry: '2020-08-20T11:00:00Z'
signedResourceTypes: 's'
}
}
...
sasToken: storageAccount.listAccountSas('2021-04-01', accountSasProperties).accountSasToken
Implementaciones
Los usos posibles de list*
se muestran en la tabla siguiente.
Tipo de recurso | Nombre de función |
---|---|
Microsoft.Addons/supportProviders | listsupportplaninfo |
Microsoft.AnalysisServices/servers | listGatewayStatus |
Microsoft.ApiManagement/service/authorizationServers | listSecrets |
Microsoft.ApiManagement/service/gateways | listKeys |
Microsoft.ApiManagement/service/identityProviders | listSecrets |
Microsoft.ApiManagement/service/namedValues | listValue |
Microsoft.ApiManagement/service/openidConnectProviders | listSecrets |
Microsoft.ApiManagement/service/subscriptions | listSecrets |
Microsoft.AppConfiguration/configurationStores | ListKeys |
Microsoft.AppPlatform/Spring | listTestKeys |
Microsoft.Automation/automationAccounts | listKeys |
Microsoft.Batch/batchAccounts | listkeys |
Microsoft.BatchAI/workspaces/experiments/jobs | listoutputfiles |
Microsoft.BotService/botServices/channels | listChannelWithKeys |
Microsoft.Cache/redis | listKeys |
Microsoft.CognitiveServices/accounts | listKeys |
Microsoft.ContainerRegistry/registries | listCredentials |
Microsoft.ContainerRegistry/registries | listUsages |
Microsoft.ContainerRegistry/registries/agentpools | listQueueStatus |
Microsoft.ContainerRegistry/registries/buildTasks | listSourceRepositoryProperties |
Microsoft.ContainerRegistry/registries/buildTasks/steps | listBuildArguments |
Microsoft.ContainerRegistry/registries/taskruns | listDetails |
Microsoft.ContainerRegistry/registries/webhooks | listEvents |
Microsoft.ContainerRegistry/registries/runs | listLogSasUrl |
Microsoft.ContainerRegistry/registries/tasks | listDetails |
Microsoft.ContainerService/managedClusters | listClusterAdminCredential |
Microsoft.ContainerService/managedClusters | listClusterMonitoringUserCredential |
Microsoft.ContainerService/managedClusters | listClusterUserCredential |
Microsoft.ContainerService/managedClusters/accessProfiles | listCredential |
Microsoft.DataBox/jobs | listCredentials |
Microsoft.DataFactory/datafactories/gateways | listauthkeys |
Microsoft.DataFactory/factories/integrationruntimes | listauthkeys |
Microsoft.DataLakeAnalytics/accounts/storageAccounts/Containers | listSasTokens |
Microsoft.DataShare/accounts/shares | listSynchronizations |
Microsoft.DataShare/accounts/shareSubscriptions | listSourceShareSynchronizationSettings |
Microsoft.DataShare/accounts/shareSubscriptions | listSynchronizationDetails |
Microsoft.DataShare/accounts/shareSubscriptions | listSynchronizations |
Microsoft.Devices/iotHubs | listkeys |
Microsoft.Devices/iotHubs/iotHubKeys | listkeys |
Microsoft.Devices/provisioningServices/keys | listkeys |
Microsoft.Devices/provisioningServices | listkeys |
Microsoft.DevTestLab/labs | ListVhds |
Microsoft.DevTestLab/labs/schedules | ListApplicable |
Microsoft.DevTestLab/labs/users/serviceFabrics | ListApplicableSchedules |
Microsoft.DevTestLab/labs/virtualMachines | ListApplicableSchedules |
Microsoft.DocumentDB/databaseAccounts | listKeys |
Microsoft.DocumentDB/databaseAccounts/notebookWorkspaces | listConnectionInfo |
Microsoft.DomainRegistration | listDomainRecommendations |
Microsoft.DomainRegistration/topLevelDomains | listAgreements |
Microsoft.EventGrid/domains | listKeys |
Microsoft.EventGrid/topics | listKeys |
Microsoft.EventHub/namespaces/authorizationRules | listkeys |
Microsoft.EventHub/namespaces/disasterRecoveryConfigs/authorizationRules | listkeys |
Microsoft.EventHub/namespaces/eventhubs/authorizationRules | listkeys |
Microsoft.ImportExport/jobs | listBitLockerKeys |
Microsoft.Kusto/Clusters/Databases | ListPrincipals |
Microsoft.LabServices/labs/users | list |
Microsoft.LabServices/labs/virtualMachines | list |
Microsoft.Logic/integrationAccounts/agreements | listContentCallbackUrl |
Microsoft.Logic/integrationAccounts/assemblies | listContentCallbackUrl |
Microsoft.Logic/integrationAccounts | listCallbackUrl |
Microsoft.Logic/integrationAccounts | listKeyVaultKeys |
Microsoft.Logic/integrationAccounts/maps | listContentCallbackUrl |
Microsoft.Logic/integrationAccounts/partners | listContentCallbackUrl |
Microsoft.Logic/integrationAccounts/schemas | listContentCallbackUrl |
Microsoft.Logic/workflows | listCallbackUrl |
Microsoft.Logic/workflows | listSwagger |
Microsoft.Logic/workflows/runs/actions | listExpressionTraces |
Microsoft.Logic/workflows/runs/actions/repetitions | listExpressionTraces |
Microsoft.Logic/workflows/triggers | listCallbackUrl |
Microsoft.Logic/workflows/versions/triggers | listCallbackUrl |
Microsoft.MachineLearning/webServices | listkeys |
Microsoft.MachineLearning/Workspaces | listworkspacekeys |
Microsoft.MachineLearningServices/workspaces/computes | listKeys |
Microsoft.MachineLearningServices/workspaces/computes | listNodes |
Microsoft.MachineLearningServices/workspaces | listKeys |
Microsoft.Maps/accounts | listKeys |
Microsoft.Media/mediaservices/assets | listContainerSas |
Microsoft.Media/mediaservices/assets | listStreamingLocators |
Microsoft.Media/mediaservices/streamingLocators | listContentKeys |
Microsoft.Media/mediaservices/streamingLocators | listPaths |
Microsoft.Network/applicationSecurityGroups | listIpConfigurations |
Microsoft.NotificationHubs/Namespaces/authorizationRules | listkeys |
Microsoft.NotificationHubs/Namespaces/NotificationHubs/authorizationRules | listkeys |
Microsoft.OperationalInsights/workspaces | list |
Microsoft.OperationalInsights/workspaces | listKeys |
Microsoft.PolicyInsights/remediations | listDeployments |
Microsoft.RedHatOpenShift/openShiftClusters | listCredentials |
Microsoft.Relay/namespaces/disasterRecoveryConfigs/authorizationRules | listkeys |
Microsoft.Search/searchServices | listAdminKeys |
Microsoft.Search/searchServices | listQueryKeys |
Microsoft.SignalRService/SignalR | listkeys |
Microsoft.Storage/storageAccounts | listAccountSas |
Microsoft.Storage/storageAccounts | listkeys |
Microsoft.Storage/storageAccounts | listServiceSas |
Microsoft.StorSimple/managers/devices | listFailoverSets |
Microsoft.StorSimple/managers/devices | listFailoverTargets |
Microsoft.StorSimple/managers | listActivationKey |
Microsoft.StorSimple/managers | listPublicEncryptionKey |
Microsoft.Synapse/workspaces/integrationRuntimes | listAuthKeys |
Microsoft.Web/connectionGateways | ListStatus |
microsoft.web/connections | listconsentlinks |
Microsoft.Web/customApis | listWsdlInterfaces |
microsoft.web/locations | listwsdlinterfaces |
microsoft.web/apimanagementaccounts/apis/connections | listconnectionkeys |
microsoft.web/apimanagementaccounts/apis/connections | listsecrets |
microsoft.web/sites/backups | list |
Microsoft.Web/sites/config | list |
microsoft.web/sites/functions | listkeys |
microsoft.web/sites/functions | listsecrets |
microsoft.web/sites/hybridconnectionnamespaces/relays | listkeys |
microsoft.web/sites | listsyncfunctiontriggerstatus |
microsoft.web/sites/slots/functions | listsecrets |
microsoft.web/sites/slots/backups | list |
Microsoft.Web/sites/slots/config | list |
microsoft.web/sites/slots/functions | listsecrets |
Para determinar qué tipos de recursos tienen una operación de lista, dispone de las siguientes opciones:
Vea las operaciones de API de REST para un proveedor de recursos y busque operaciones List. Por ejemplo, las cuentas de almacenamiento tienen una operación listKeys.
Use el cmdlet de PowerShell Get-AzProviderOperation. En el ejemplo siguiente se obtienen todas las operaciones List para cuentas de almacenamiento:
Get-AzProviderOperation -OperationSearchString "Microsoft.Storage/*" | where {$_.Operation -like "*list*"} | FT Operation
Use el siguiente comando de la CLI de Azure para filtrar solo las operaciones de la lista:
az provider operation show --namespace Microsoft.Storage --query "resourceTypes[?name=='storageAccounts'].operations[].name | [?contains(@, 'list')]"
managementGroupResourceId
managementGroupResourceId(resourceType, resourceName1, [resourceName2], ...)
Devuelve el identificador único de un recurso implementado en el nivel de grupo de administración.
Espacio de nombres: az.
La función managementGroupResourceId
está disponible en archivos de Bicep, pero normalmente no la necesita. En su lugar, use el nombre simbólico del recurso y acceda a la propiedad id
.
El identificador se devuelve con el formato siguiente:
/providers/Microsoft.Management/managementGroups/{managementGroupName}/providers/{resourceType}/{resourceName}
Observaciones
Utilice esta función para obtener el identificador de recurso de los recursos que se implementan en el grupo de administración en lugar de en un grupo de recursos. El id. devuelto difiere del valor devuelto por la función resourceId en que no incluye un valor de id. de subscripción ni de grupo de recursos.
Ejemplo de managementGroupResourceID
La siguiente plantilla crea y asigna una definición de directiva. Usa la función managementGroupResourceId
para obtener el id. de recurso de la definición de directiva.
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])
Determina si un tipo de recurso admite zonas para una región. Esta función solo admite recursos zonales. Los servicios con redundancia de zona devuelven una matriz vacía. Para obtener más información, consulte Servicios de Azure compatibles con zonas de disponibilidad.
Espacio de nombres: az.
Parámetros
Parámetro | Obligatorio | Type | Descripción |
---|---|---|---|
providerNamespace | Sí | string | Espacio de nombres del proveedor de recursos para que el tipo de recurso compruebe la compatibilidad de la zona. |
resourceType | Sí | string | El tipo de recurso para comprobar la compatibilidad de la zona. |
ubicación | Sí | string | Región en la que se va a comprobar la compatibilidad de la zona. |
numberOfZones | No | integer | Número de zonas lógicas que se van a devolver. El valor predeterminado es 1. El número debe ser un entero positivo de 1 a 3. Use 1 para los recursos de una sola zona. En el caso de los recursos de varias zonas, el valor debe ser menor o igual que el número de zonas admitidas. |
offset | No | integer | Desplazamiento de la zona lógica inicial. La función devuelve un error si el desplazamiento más el valor de numberOfZones supera el número de zonas admitidas. |
Valor devuelto
Matriz con las zonas admitidas. Cuando se usan los valores predeterminados para offset y numberOfZones
, un tipo de recurso y una región que admiten zonas devuelven la siguiente matriz:
[
"1"
]
Cuando el parámetro numberOfZones
se establece en 3, devuelve lo siguiente:
[
"1",
"2",
"3"
]
Si el tipo de recurso o la región no admiten zonas, se devuelve una matriz vacía.
[
]
Comentarios
Hay distintas categorías para Azure Availability Zones: zonal y con redundancia de zona. La función pickZones
se puede usar para devolver una zona de disponibilidad para un recurso zonal. En el caso de servicios con redundancia de zona (ZRS), la función devuelve una matriz vacía. Los recursos zonales suelen tener una propiedad zones
en el nivel superior de la definición del recurso. Para determinar la categoría de compatibilidad con zonas de disponibilidad, consulte Servicios de Azure que admiten zonas de disponibilidad.
Para determinar si una determinada región o ubicación de Azure admite zonas de disponibilidad, llame a la función pickZones
con un tipo de recurso zonal, por ejemplo, Microsoft.Network/publicIPAddresses
. Si la respuesta no está vacía, la región admite zonas de disponibilidad.
Ejemplo de pickZones
En el archivo de Bicep siguiente se muestran tres resultados para usar la función 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')
La salida de los ejemplos anteriores devuelve tres matrices.
Nombre | Tipo | Value |
---|---|---|
admitido | array | [ "1" ] |
notSupportedRegion | array | [] |
notSupportedType | array | [] |
Puede usar la respuesta de pickZones
a fin de determinar si se debe proporcionar un valor NULL para las zonas o asignar máquinas virtuales a otras zonas.
providers
La función "providers" está en desuso en Bicep. Por tanto, no se recomienda utilizarla. Si usó esta función para obtener una versión de la API para el proveedor de recursos, se recomienda proporcionar una versión de la API específica en el archivo de Bicep. El uso de una versión de API devuelta dinámicamente puede interrumpir la plantilla si las propiedades cambian entre versiones.
La operación de proveedores sigue estando disponible a través de la API de REST. Se puede usar fuera de un archivo de Bicep para obtener información sobre un proveedor de recursos.
Espacio de nombres: az.
reference
reference(resourceName or resourceIdentifier, [apiVersion], ['Full'])
Devuelve un objeto que representa el estado de tiempo de ejecución de un recurso. La salida y el comportamiento de la función reference
se basan en gran medida en cómo cada proveedor de recursos (RP) implementa sus respuestas PUT y GET.
Espacio de nombres: az.
Los archivos de Bicep proporcionan acceso a la función de referencia, aunque normalmente no es necesario. En su lugar, se recomienda usar el nombre simbólico del recurso. La función de referencia solo se puede usar dentro del objeto properties
de un recurso y no se puede usar para propiedades de nivel superior, como name
o location
. Lo mismo se aplica generalmente a las referencias mediante el nombre simbólico. Sin embargo, para las propiedades como name
, es posible generar una plantilla sin usar la función de referencia. Se sabe que hay suficiente información sobre el nombre del recurso para emitir directamente el nombre. Se conoce como propiedades en tiempo de compilación. La validación de Bicep puede identificar cualquier uso incorrecto del nombre simbólico.
En el ejemplo siguiente se implementa una cuenta de almacenamiento. Las dos primeras salidas proporcionan los mismos resultados.
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
Para obtener una propiedad de un recurso existente que no está implementado en la plantilla, use la palabra clave 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
Para hacer referencia a un recurso anidado dentro de un recurso primario, use el descriptor de acceso anidado (::
). Esta sintaxis solo se usa cuando se accede al recurso anidado desde fuera del recurso primario.
vNet1::subnet1.properties.addressPrefix
Si intenta hacer referencia a un recurso que no existe, se produce el error NotFound
y se produce un error en la implementación.
resourceId
resourceId([subscriptionId], [resourceGroupName], resourceType, resourceName1, [resourceName2], ...)
Devuelve el identificador único de un recurso.
Espacio de nombres: az.
La función resourceId
está disponible en archivos de Bicep, pero normalmente no la necesita. En su lugar, use el nombre simbólico del recurso y acceda a la propiedad id
.
Utilice esta función cuando el nombre del recurso sea ambiguo o no esté aprovisionado dentro del mismo archivo de Bicep. El formato del identificador devuelto varía en función de si la implementación se produce en el ámbito de un grupo de recursos, una suscripción, un grupo de administración o un inquilino.
Por ejemplo:
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
Para obtener el identificador de recurso para un recurso que no está implementado en el archivo de Bicep, use la palabra clave existente.
param storageAccountName string
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' existing = {
name: storageAccountName
}
output storageID string = storageAccount.id
Para obtener más información, consulte la función resourceId de plantilla JSON.
subscriptionResourceId
subscriptionResourceId([subscriptionId], resourceType, resourceName1, [resourceName2], ...)
Devuelve el identificador único de un recurso implementado en el nivel de suscripción.
Espacio de nombres: az.
La función subscriptionResourceId
está disponible en archivos de Bicep, pero normalmente no la necesita. En su lugar, use el nombre simbólico del recurso y acceda a la propiedad id
.
El identificador se devuelve con el formato siguiente:
/subscriptions/{subscriptionId}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
Observaciones
Utilice esta función para obtener el identificador de recurso de los recursos que se implementan en la suscripción en lugar de en un grupo de recursos. El identificador devuelto difiere del valor devuelto por la función resourceId en que no incluye un valor de grupo de recursos.
Ejemplo de subscriptionResourceId
El siguiente archivo de Bicep asigna un rol integrado. Puede implementarlo en un grupo de recursos o en una suscripción. Usa la función subscriptionResourceId
para obtener el id. de recurso de los recursos integrados.
@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], ...)
Devuelve el identificador único de un recurso implementado en el nivel de inquilino.
Espacio de nombres: az.
La función tenantResourceId
está disponible en archivos de Bicep, pero normalmente no la necesita. En su lugar, use el nombre simbólico del recurso y acceda a la propiedad id
.
El identificador se devuelve con el formato siguiente:
/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
Las definiciones de directivas integradas son recursos del nivel de inquilino. Para implementar una asignación de directiva que hace referencia a una definición de directiva integrada, use la función 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)
}
}
Pasos siguientes
- Para obtener valores de la implementación actual, consulte Funciones con valores de implementación.
- Para iterar un número especificado de veces al crear un tipo de recurso, consulte Bucles iterativos en Bicep.