Compartir a través de


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 Tipo Descripción
nombreSecreto cuerda / cadena 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 Tipo Descripción
apiVersion No cuerda / cadena 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 objeto 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/factorys/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 lista
Microsoft.LabServices/labs/virtualMachines lista
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/repeticiones 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 lista
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 lista
Microsoft.Web/sites/config lista
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 lista
Microsoft.Web/sites/slots/config lista
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-​AzProvider​Operation. 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 Tipo Descripción
providerNamespace cuerda / cadena Espacio de nombres del proveedor de recursos para que el tipo de recurso compruebe la compatibilidad de la zona.
tipoDeRecurso cuerda / cadena El tipo de recurso para comprobar la compatibilidad de la zona.
ubicación cuerda / cadena Región en la que se va a comprobar la compatibilidad de la zona.
numberOfZones No entero 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.
compensar No entero 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.

[
]

Observaciones

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 Importancia
admitido arreglo [ "1" ]
notSupportedRegion arreglo []
notSupportedType arreglo []

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.

Proveedores

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.

referencia

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.

identificador de recurso

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)
  }
}

toLogicalZone

toLogicalZone(subscriptionId, ___location, physicalZone)

Devuelve la zona de disponibilidad lógica (por ejemplo, 1, 2o 3) correspondiente a una zona de disponibilidad física para una suscripción especificada en una región de Azure determinada.

Espacio de nombres: az

Parámetros

Parámetro Obligatorio Tipo Descripción
ID de suscripción cuerda / cadena Identificador de la suscripción de Azure (por ejemplo, 12345678-1234-1234-1234-1234567890ab).
ubicación cuerda / cadena Región de Azure que admite zonas de disponibilidad (por ejemplo, westus2).
physicalZone cuerda / cadena Identificador de zona de disponibilidad física (por ejemplo, un identificador específico del centro de datos, como westus2-az1).

Valor devuelto

Cadena que representa la zona de disponibilidad lógica (por ejemplo, 1, 2o 3) que corresponde a la zona física especificada en la región y la suscripción especificadas. Si la zona física no es válida o no se admite, se devuelve una cadena vacía ('').

Observaciones

  • La toLogicalZone función recupera la asignación de zona lógica en función de la configuración de zona de la suscripción en la región especificada.
  • Las zonas lógicas son identificadores estandarizados (por ejemplo, 1, 2, 3) que se usan en configuraciones de recursos para garantizar asignaciones de zona coherentes en los servicios de Azure.
  • Los identificadores de zona física son específicos de la región y pueden variar entre suscripciones. Use la toPhysicalZone función para invertir esta asignación.
  • La función requiere que la región admita zonas de disponibilidad. Para obtener una lista de las regiones admitidas, consulte Servicios de Azure que admiten zonas de disponibilidad.
  • Si la zona física no existe o no está asignada para la suscripción, la función devuelve una cadena vacía.
  • Esta función es útil para alinear implementaciones de zona física con configuraciones de zona lógica en plantillas, especialmente para escenarios entre suscripciones o de varias regiones.

Ejemplos

En el ejemplo siguiente se recupera la zona lógica de una zona física en Oeste de EE. UU. 2 para una suscripción específica:

param subscriptionId string = '12345678-1234-1234-1234-1234567890ab'
param physicalZone string = 'westus2-az1'

output logicalZone string = toLogicalZone(subscriptionId, 'westus2', physicalZone)

Resultado esperado:

Nombre Tipo Importancia
logicalZone Cuerda 1

En el ejemplo siguiente se usa toLogicalZone para configurar una máquina virtual con la zona lógica correcta:

param subscriptionId string = '12345678-1234-1234-1234-1234567890ab'
param physicalZone string = 'westus2-az1'
param ___location string = 'westus2'

var logicalZone = toLogicalZone(subscriptionId, ___location, physicalZone)

resource vm 'Microsoft.Compute/virtualMachines@2024-03-01' = {
  name: 'myVM'
  ___location: ___location
  zones: logicalZone != '' ? [logicalZone] : []
  properties: {
    // VM properties
  }
}

output logicalZone string = logicalZone

Resultado esperado:

Nombre Tipo Importancia
logicalZone Cuerda 1

toLogicalZones

toLogicalZones(subscriptionId, ___location, physicalZones)

Devuelve las zonas de disponibilidad lógicas (por ejemplo, 1, 2o 3) correspondientes a zonas de disponibilidad físicas para una suscripción especificada en una región de Azure determinada. Para convertir una sola zona física, use la toLogicalZone función .

Espacio de nombres: az

Parámetros

Parámetro Obligatorio Tipo Descripción
ID de suscripción cuerda / cadena Identificador de la suscripción de Azure (por ejemplo, 12345678-1234-1234-1234-1234567890ab).
ubicación cuerda / cadena Región de Azure que admite zonas de disponibilidad (por ejemplo, westus2).
physicalZones arreglo Matriz de nombres de zona física que se van a convertir en zonas lógicas (por ejemplo, un identificador específico del centro de datos como westus2-az1, westus2-az2, ...) .

Valor devuelto

Matriz de nombres de zona lógica correspondientes a las zonas físicas proporcionadas (por ejemplo, 1, 2o 3). Si una zona física no es válida o no se admite, se devuelve una cadena vacía ('').

Observaciones

La toLogicalZones función asigna nombres de zona física a sus equivalentes de zona lógica para una suscripción y región de Azure especificadas. Esto resulta útil para configurar o consultar recursos basados en zonas lógicas dentro de una región de Azure. La función requiere un identificador de suscripción válido, una ubicación de Azure compatible y una matriz de nombres de zona física. Si una zona física no es válida o no está disponible en la ubicación especificada, la función puede devolver una cadena vacía para esa zona o producir un error, dependiendo del contexto.

Ejemplos

En el ejemplo siguiente se recuperan las zonas lógicas de una lista de zonas físicas de Oeste de EE. UU. 2 para una suscripción específica:

param subscriptionId string = '12345678-1234-1234-1234-1234567890ab'
param physicalZones array = ['westus2-az1', 'westus2-az2', 'westus2-az3']

output logicalZones array = toLogicalZones(subscriptionId, 'westus2', physicalZones)

Resultado esperado:

Nombre Tipo Importancia
logicalZone arreglo ["1","2","3"]

toPhysicalZone

toPhysicalZone(subscriptionId, ___location, logicalZone)

Devuelve el identificador de zona de disponibilidad física (por ejemplo, un identificador específico del centro de datos como westus2-az1) correspondiente a una zona de disponibilidad lógica para una suscripción especificada en una región de Azure determinada.

Espacio de nombres: az

Parámetros

Parámetro Obligatorio Tipo Descripción
ID de suscripción cuerda / cadena Identificador de la suscripción de Azure (por ejemplo, 12345678-1234-1234-1234-1234567890ab).
ubicación cuerda / cadena Región de Azure que admite zonas de disponibilidad (por ejemplo, westus2).
logicalZone cuerda / cadena Zona de disponibilidad lógica (por ejemplo, 1, 2o 3).

Valor devuelto

Cadena que representa el identificador de zona de disponibilidad física (por ejemplo, westus2-az1) que corresponde a la zona lógica especificada en la región y la suscripción especificadas. Si la zona lógica no es válida o no se admite, se devuelve una cadena vacía ('').

Observaciones

  • La toPhysicalZone función recupera la asignación de zona física en función de la configuración de zona de la suscripción en la región especificada.
  • Las zonas físicas son identificadores específicos del centro de datos que pueden variar entre suscripciones, mientras que las zonas lógicas (por ejemplo, 1, 2, 3) están estandarizadas para las configuraciones de recursos.
  • Use la toLogicalZone función para invertir esta asignación, convirtiendo una zona física en su equivalente lógico.
  • La función requiere que la región admita zonas de disponibilidad. Para obtener una lista de las regiones admitidas, consulte Servicios de Azure que admiten zonas de disponibilidad.
  • Si la zona lógica no existe o no está asignada para la suscripción, la función devuelve una cadena vacía.
  • Esta función es útil para escenarios que requieren identificadores de zona física, como el registro, la auditoría o la alineación entre zonas de suscripción en implementaciones de varias regiones.

Ejemplos

En el ejemplo siguiente se recupera la zona física de una zona lógica en Oeste de EE. UU. 2 para una suscripción específica:

param subscriptionId string = '12345678-1234-1234-1234-1234567890ab'
param logicalZone string = '1'

output physicalZone string = toPhysicalZone(subscriptionId, 'westus2', logicalZone)

Salida esperada (suponiendo que la zona 1 lógica se asigne a westus2-az1):

Nombre Tipo Importancia
physicalZone Cuerda westus2-az1

En el ejemplo siguiente se usa toPhysicalZone para registrar la zona física de una implementación de máquina virtual:

param subscriptionId string = '12345678-1234-1234-1234-1234567890ab'
param logicalZone string = '1'
param ___location string = 'westus2'

var physicalZone = toPhysicalZone(subscriptionId, ___location, logicalZone)

resource vm 'Microsoft.Compute/virtualMachines@2024-03-01' = {
  name: 'myVM'
  ___location: ___location
  zones: [logicalZone]
  properties: {
    // VM properties
  }
}

output physicalZone string = physicalZone

Resultado esperado:

Nombre Tipo Importancia
physicalZone Cuerda westus2-az1

toPhysicalZones

toPhysicalZones(subscriptionId, ___location, logicalZones)

Devuelve los identificadores de zona de disponibilidad física (por ejemplo, un identificador específico del centro de datos como westus2-az1) correspondiente a zonas de disponibilidad lógicas para una suscripción especificada en una región de Azure determinada. Para convertir una sola zona lógica, use la toPhysicalZone función .

Espacio de nombres: az

Parámetros

Parámetro Obligatorio Tipo Descripción
ID de suscripción cuerda / cadena Identificador de la suscripción de Azure (por ejemplo, 12345678-1234-1234-1234-1234567890ab).
ubicación cuerda / cadena Región de Azure que admite zonas de disponibilidad (por ejemplo, westus2).
logicalZone cadena[] Las zonas de disponibilidad lógica (por ejemplo, 1, 2o 3) que se van a convertir en zonas físicas.

Valor devuelto

Matriz de nombres de zona física (por ejemplo, westus2-az1, westus2-az2 ) correspondientes a las zonas lógicas proporcionadas. Si una zona lógica no es válida o no se admite, se devuelve una cadena vacía ('').

Observaciones

La toPhysicalZones función asigna nombres de zona lógica a sus equivalentes de zona física para una suscripción y región de Azure especificadas. Esto es útil para implementar o configurar recursos en zonas físicas específicas dentro de una región de Azure. La función requiere un identificador de suscripción válido, una ubicación de Azure compatible y una matriz de nombres de zona lógica. Si una zona lógica no es válida o no está disponible en la ubicación especificada, la función puede devolver una cadena vacía para esa zona o producir un error, dependiendo del contexto.

Ejemplos

En el ejemplo siguiente se recuperan las zonas físicas de una lista de zonas lógicas de Oeste de EE. UU. 2 para una suscripción específica:

param subscriptionId string = '12345678-1234-1234-1234-1234567890ab'
param logicalZones array = ['1', '2', '3']

output physicalZones array = toPhysicalZones(subscriptionId, 'westus2', logicalZones)

Salida esperada (suponiendo que la zona 1 lógica se asigna a westus2-az1, la zona 1 lógica se asigna a westus2-az1y la zona 3 lógica se asigna a westus2-az3):

Nombre Tipo Importancia
physicalZone arreglo ["westus2-az1","westus2-az2","westus2-az3"]

Pasos siguientes