Funzioni delle risorse per Bicep
Questo articolo descrive le funzioni Bicep per ottenere i valori delle risorse.
Per ottenere valori dalla distribuzione corrente, vedere Funzioni del valore di distribuzione.
extensionResourceId
extensionResourceId(resourceId, resourceType, resourceName1, [resourceName2], ...)
Restituisce l'ID risorsa per una risorsa di estensione. Una risorsa di estensione è un tipo di risorsa applicato a un'altra risorsa da aggiungere alle relative funzionalità.
Spazio dei nomi: az.
La funzione extensionResourceId
è disponibile nei file Bicep, ma in genere non è necessaria. Usare invece il nome simbolico per la risorsa e accedere alla proprietà id
.
Il formato di base dell'ID della risorsa restituito da questa funzione è:
{scope}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}
Il segmento di ambito varia in base alla risorsa che viene estesa.
Quando la risorsa di estensione viene applicata a una risorsa, l'ID della risorsa viene restituito nel formato seguente:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{baseResourceProviderNamespace}/{baseResourceType}/{baseResourceName}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}
Quando la risorsa di estensione viene applicata a un gruppo di risorse, il formato è:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}
Quando la risorsa di estensione viene applicata a una sottoscrizione, il formato è:
/subscriptions/{subscriptionId}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}
Quando la risorsa di estensione viene applicata a un gruppo di gestione, il formato è:
/providers/Microsoft.Management/managementGroups/{managementGroupName}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}
Una definizione di criteri personalizzata distribuita in un gruppo di gestione viene implementata come risorsa di estensione. Per creare e assegnare un criterio, distribuire il file Bicep seguente in un gruppo di gestione.
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
}
}
Le definizioni di criteri predefinite sono risorse a livello di tenant. Per un esempio di distribuzione di una definizione di criteri predefinita, vedere tenantResourceId.
getSecret
keyVaultName.getSecret(secretName)
Restituisce un segreto da un Azure Key Vault. Usare questa funzione per passare un segreto a un parametro di stringa sicura di un modulo Bicep.
Nota
La funzione az.getSecret(subscriptionId, resourceGroupName, keyVaultName, secretName, secretVersion)
può essere usata nei file .bicepparam
per recuperare i segreti dell'insieme di credenziali delle chiavi. Per altre informazioni, vedere getSecret.
È possibile usare la funzione getSecret
solo all'interno della params
sezione di un modulo. È possibile usarlo solo con una risorsa Microsoft.KeyVault/vaults
.
module sql './sql.bicep' = {
name: 'deploySQL'
params: {
adminPassword: keyVault.getSecret('vmAdminPassword')
}
}
Se si tenta di usare questa funzione in qualsiasi altra parte del file Bicep, viene visualizzato un errore. Viene visualizzato anche un errore se si usa questa funzione con l'interpolazione di stringhe, anche se usata nella sezione params.
La funzione può essere usata solo con un parametro di modulo con decorator @secure()
.
L'insieme di credenziali delle chiavi deve essere enabledForTemplateDeployment
impostato su true
. L'utente che distribuisce il file Bicep deve avere accesso al segreto. Per altre informazioni, vedere Usare Azure Key Vault per passare valori di parametro protetti durante la distribuzione di Bicep.
Non è necessario un qualificatore dello spazio dei nomi perché la funzione viene usata con un tipo di risorsa.
Parametri
Parametro | Richiesto | Type | Descrizione |
---|---|---|---|
secretName | Sì | string | Nome del segreto archiviato in un insieme di credenziali delle chiavi. |
Valore restituito
Valore del segreto per il nome del segreto.
Esempio
Il file Bicep seguente viene usato come modulo. Ha un parametro adminPassword
definito con l'elemento decorator @secure()
.
param sqlServerName string
param adminLogin string
@secure()
param adminPassword string
resource sqlServer 'Microsoft.Sql/servers@2023-08-01-preview' = {
...
}
Il file Bicep seguente usa il file Bicep precedente come modulo. Il file Bicep fa riferimento a un insieme di credenziali delle chiavi esistente e chiama la funzione getSecret
per recuperare il segreto dell'insieme di credenziali delle chiavi e quindi passa il valore come parametro al modulo.
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])
È possibile chiamare una funzione elenco per qualsiasi tipo di risorsa con un'operazione che inizia con list
. Tra gli usi comuni vi sono list
, listKeys
, listKeyValue
e listSecrets
.
La sintassi per questa funzione varia in base al nome delle operazioni elenco. I valori restituiti variano anche in base all'operazione. Bicep non supporta attualmente i completamenti e la convalida per le funzioni list*
.
Con l'interfaccia della riga di comando di Bicep versione 0.4.X o successiva è possibile chiamare la funzione elenco usando l'operatore di accesso. Ad esempio, storageAccount.listKeys()
.
Non è necessario un qualificatore dello spazio dei nomi perché la funzione viene usata con un tipo di risorsa.
Parametri
Parametro | Richiesto | Type | Descrizione |
---|---|---|---|
apiVersion | No | string | Se non si specifica questo parametro, viene usata la versione API per la risorsa. Specificare una versione dell'API personalizzata solo quando è necessaria l'esecuzione della funzione con una versione specifica. Usa il formato, aaaa-mm-gg. |
functionValues | No | oggetto | Oggetto che contiene valori per la funzione. Specificare solo questo oggetto per le funzioni che supportano la ricezione di un oggetto con valori di parametro, ad esempio listAccountSas per un account di archiviazione. Questo articolo illustra un esempio di passaggio dei valori di funzione. |
Usi validi
Le funzioni list
possono essere usate nelle proprietà di una definizione di risorsa. Non usare una funzione list
che espone informazioni riservate nella sezione output di un file Bicep. I valori di output vengono archiviati nella cronologia di distribuzione e possono essere recuperati da un utente malintenzionato.
Quando usate con un ciclo iterativo, è possibile usare le funzioni list
per input
in quanto l'espressione viene assegnata alla proprietà della risorsa. Non è possibile usarle con count
perché è necessario determinare il numero prima che la funzione list
venga risolta.
Se si usa una funzione list
in una risorsa distribuita in modo condizionale, la funzione viene valutata anche se la risorsa non viene distribuita. Se la funzione list
fa riferimento a una risorsa che non esiste, viene visualizzato un errore. Usare l'espressione booleana ?: operatore per assicurarsi che la funzione venga valutata solo quando la risorsa viene distribuita.
Valore restituito
L'oggetto restituito varia a seconda della funzione list usata. La funzione listKeys
per un account di archiviazione restituisce, ad esempio, il seguente formato:
{
"keys": [
{
"keyName": "key1",
"permissions": "Full",
"value": "{value}"
},
{
"keyName": "key2",
"permissions": "Full",
"value": "{value}"
}
]
}
Altre funzioni list
possono avere formati di restituzione diversi. Per visualizzare il formato di una funzione, includerlo nella sezione output, come mostrato nel modello di esempio del file Bicep.
Esempio di funzione list
Nell'esempio seguente viene distribuito un account di archiviazione e quindi viene chiamato listKeys
in tale account di archiviazione. La chiave viene usata quando si imposta un valore per gli script di distribuzione.
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
}
...
}
}
Nell'esempio seguente viene illustrata una funzione list
che accetta un parametro. In questo caso, la funzione è listAccountSas
. Passare un oggetto per l'ora di scadenza. L'ora di scadenza deve essere 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
Implementazioni
Gli utilizzi possibili di list*
sono visualizzati nella tabella seguente.
Tipo di risorsa | Nome della funzione |
---|---|
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 |
Per determinare quali tipi di risorse dispongono di un'operazione list, usare le opzioni seguenti:
Visualizzare le operazioni dell'API REST di un provider di risorse e individuare le operazioni list. Gli account di archiviazione, ad esempio, dispongono dell'operazione listKeys.
Usare get -AzProviderCmdlet di PowerShell per l'operazione . L'esempio seguente ottiene tutte le operazioni list degli account di archiviazione:
Get-AzProviderOperation -OperationSearchString "Microsoft.Storage/*" | where {$_.Operation -like "*list*"} | FT Operation
Usare il comando seguente dell'interfaccia della riga di comando di Azure per filtrare solo le operazioni list:
az provider operation show --namespace Microsoft.Storage --query "resourceTypes[?name=='storageAccounts'].operations[].name | [?contains(@, 'list')]"
managementGroupResourceId
managementGroupResourceId(resourceType, resourceName1, [resourceName2], ...)
Restituisce l'identificatore univoco per una risorsa distribuita a livello di gruppo di gestione.
Spazio dei nomi: az.
La funzione managementGroupResourceId
è disponibile nei file Bicep, ma in genere non è necessaria. Usare invece il nome simbolico per la risorsa e accedere alla proprietà id
.
L'identificatore viene restituito nel formato seguente:
/providers/Microsoft.Management/managementGroups/{managementGroupName}/providers/{resourceType}/{resourceName}
Osservazioni:
Usare questa funzione per ottenere l'ID della risorsa per le risorse distribuite al gruppo di gestione anziché in un gruppo di risorse. L'ID restituito è diverso dal valore restituito dalla funzione resourceId dal momento che non include l’ID della sottoscrizione e un valore di un gruppo di risorse.
Esempio di managementGroupResourceID
Il modello seguente crea e assegna una definizione di criteri. Usa la funzione managementGroupResourceId
per ottenere l'ID risorsa per la definizione dei criteri.
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 se un tipo di risorsa supporta le zone per un'area. Questa funzione supporta solo le risorse di zona. I servizi con ridondanza della zona restituiscono una matrice vuota. Per altre informazioni, vedere Servizi di Azure che supportano le zone di disponibilità.
Spazio dei nomi: az.
Parametri
Parametro | Richiesto | Type | Descrizione |
---|---|---|---|
providerNamespace | Sì | string | Spazio dei nomi del provider di risorse per il tipo di risorsa da verificare per il supporto della zona. |
resourceType | Sì | string | Tipo di risorsa da verificare per il supporto della zona. |
posizione | Sì | string | Area in cui verificare il supporto della zona. |
numberOfZones | No | integer | Numero di zone logiche da restituire. Il valore predefinito è 1. Il numero deve essere un numero intero positivo compreso tra 1 e 3. Usare 1 per le risorse a zona singola. Per le risorse con più zone, il valore deve essere minore o uguale al numero di zone supportate. |
offset | No | integer | Scostamento dalla zona logica iniziale. La funzione restituisce un errore se scostamento più numberOfZones supera il numero di zone supportate. |
Valore restituito
Matrice con le zone supportate. Quando si usano i valori predefiniti per scostamento e numberOfZones
, un tipo di risorsa e un'area che supporta le zone restituisce la matrice seguente:
[
"1"
]
Quando il parametro numberOfZones
è impostato su 3, restituisce:
[
"1",
"2",
"3"
]
Quando il tipo di risorsa o l'area non supporta le zone, viene restituita una matrice vuota.
[
]
Osservazioni:
Esistono diverse categorie per le zone di disponibilità di Azure: zona e ridondanza della zona. La funzione pickZones
può essere usata per restituire una zona di disponibilità per una risorsa di zona. Per i servizi con ridondanza della zona (ZRS, archiviazione con ridondanza della zona), la funzione restituisce una matrice vuota. Le risorse di zona in genere hanno una proprietà zones
al livello superiore della definizione della risorsa. Per determinare la categoria di supporto per le zone di disponibilità, vedere Servizi di Azure che supportano le zone di disponibilità.
Per determinare se un'area o una località di Azure specifica supporta le zone di disponibilità, chiamare la funzione pickZones
con un tipo di risorsa di zona, ad esempio Microsoft.Network/publicIPAddresses
. Se la risposta non è vuota, l'area supporta le zone di disponibilità.
Esempio di pickZones
Il file Bicep seguente mostra tre risultati per l'uso della funzione 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')
L'output degli esempi precedenti restituisce tre matrici.
Nome | Type | Valore |
---|---|---|
supportato | array | [ "1" ] |
notSupportedRegion | array | [] |
notSupportedType | array | [] |
È possibile usare la risposta da pickZones
per determinare se specificare null per le zone o assegnare macchine virtuali a zone diverse.
provider
La funzione provider è stata deprecata in Bicep. Il suo utilizzo non è più consigliato. Se questa funzione è stata usata per ottenere una versione API per il provider di risorse, è consigliabile fornire una versione API specifica nel file Bicep. L'uso di una versione API restituita dinamicamente può interrompere il modello se le proprietà cambiano tra le versioni.
L'operazione dei provider è ancora disponibile tramite l'API REST. Può essere usata all'esterno di un file Bicep per ottenere informazioni su un provider di risorse.
Spazio dei nomi: az.
reference
reference(resourceName or resourceIdentifier, [apiVersion], ['Full'])
Restituisce un oggetto che rappresenta lo stato di runtime di una risorsa. L'output e il comportamento della reference
funzione si basano molto sul modo in cui ogni provider di risorse implementa le risposte PUT e GET.
Spazio dei nomi: az.
I file Bicep forniscono l'accesso alla funzione di riferimento, anche se in genere non è necessario. È invece consigliabile usare il nome simbolico della risorsa. La funzione di riferimento può essere usata solo all'interno dell'oggetto properties
di una risorsa e non può essere utilizzata per le proprietà di primo livello come name
o location
. Lo stesso vale in genere per i riferimenti che usano il nome simbolico. Tuttavia, per le proprietà come name
, è possibile generare un modello senza usare la funzione di riferimento. Informazioni sufficienti sul nome della risorsa sono note per generare direttamente il nome. Viene definita proprietà in fase di compilazione. La convalida Bicep può identificare qualsiasi utilizzo non corretto del nome simbolico.
L'esempio seguente consente di distribuire due account di archiviazione. I primi due output offrono gli stessi risultati.
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
Per ottenere una proprietà da una risorsa esistente non distribuita nel modello, usare la parola chiave 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
Per fare riferimento a una risorsa annidata all'interno di una risorsa padre, usare la funzione di accesso annidata (::
). Questa sintassi viene usata solo quando si accede alla risorsa annidata dall'esterno della risorsa padre.
vNet1::subnet1.properties.addressPrefix
Se si tenta di fare riferimento a una risorsa che non esiste, viene visualizzato l'errore NotFound
e la distribuzione fallisce.
resourceId
resourceId([subscriptionId], [resourceGroupName], resourceType, resourceName1, [resourceName2], ...)
Restituisce l'identificatore univoco di una risorsa.
Spazio dei nomi: az.
La funzione resourceId
è disponibile nei file Bicep, ma in genere non è necessaria. Usare invece il nome simbolico per la risorsa e accedere alla proprietà id
.
Questa funzione viene usata quando il nome della risorsa è ambiguo o non è stato sottoposto a provisioning all'interno dello stesso file Bicep. Il formato dell'identificatore restituito varia a seconda che la distribuzione venga eseguita nell'ambito di un gruppo di risorse, di una sottoscrizione, di un gruppo di gestione o di un tenant.
Ad esempio:
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
Per ottenere l'ID risorsa per una risorsa non distribuita nel file Bicep, usare la parola chiave esistente.
param storageAccountName string
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' existing = {
name: storageAccountName
}
output storageID string = storageAccount.id
Per altre informazioni, vedere la funzione resourceId del modello JSON.
subscriptionResourceId
subscriptionResourceId([subscriptionId], resourceType, resourceName1, [resourceName2], ...)
Restituisce l'identificatore univoco per una risorsa distribuita a livello di sottoscrizione.
Spazio dei nomi: az.
La funzione subscriptionResourceId
è disponibile nei file Bicep, ma in genere non è necessaria. Usare invece il nome simbolico per la risorsa e accedere alla proprietà id
.
L'identificatore viene restituito nel formato seguente:
/subscriptions/{subscriptionId}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
Osservazioni:
Usare questa funzione per ottenere l'ID della risorsa per le risorse distribuite nella sottoscrizione anziché in un gruppo di risorse. L'ID restituito è diverso dal valore restituito dalla funzione resourceId dal momento che non include il valore di un gruppo di risorse.
Esempio di subscriptionResourceID
Il file Bicep seguente assegna un ruolo predefinito. È possibile distribuirlo in un gruppo di risorse o in una sottoscrizione. Usa la funzione subscriptionResourceId
per ottenere l'ID risorsa per i ruoli predefiniti.
@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], ...)
Restituisce l'identificatore univoco per una risorsa distribuita a livello di tenant.
Spazio dei nomi: az.
La funzione tenantResourceId
è disponibile nei file Bicep, ma in genere non è necessaria. Usare invece il nome simbolico per la risorsa e accedere alla proprietà id
.
L'identificatore viene restituito nel formato seguente:
/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
Le definizioni di criteri predefinite sono risorse a livello di tenant. Per distribuire un'assegnazione di criteri che fa riferimento a una definizione di criteri predefinita, usare la funzione 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)
}
}
Passaggi successivi
- Per ottenere valori dalla distribuzione corrente, vedere Funzioni del valore di distribuzione.
- Per eseguire l’iterazione di un numero specificato di volte durante la creazione di un tipo di risorsa, vedere Cicli iterativi in Bicep.