Condividi tramite


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 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 -AzProvider​Cmdlet 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 string Spazio dei nomi del provider di risorse per il tipo di risorsa da verificare per il supporto della zona.
resourceType string Tipo di risorsa da verificare per il supporto della zona.
posizione 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