Resursfunktioner för Bicep

Den här artikeln beskriver Bicep-funktionerna för att hämta resursvärden.

Information om hur du hämtar värden från den aktuella distributionen finns i Funktioner för distributionsvärde.

extensionResourceId

extensionResourceId(resourceId, resourceType, resourceName1, [resourceName2], ...)

Returnerar resurs-ID för en tilläggsresurs. En tilläggsresurs är en resurstyp som tillämpas på en annan resurs för att lägga till dess funktioner.

Namnområde: az.

Funktionen extensionResourceId är tillgänglig i Bicep-filer, men vanligtvis behöver du den inte. Använd i stället det symboliska namnet för resursen och få åtkomst till id egenskapen.

Det grundläggande formatet för resurs-ID:t som returneras av den här funktionen är:

{scope}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}

Omfångssegmentet varierar beroende på vilken resurs som utökas.

När tilläggsresursen tillämpas på en resurs returneras resurs-ID:t i följande format:

/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{baseResourceProviderNamespace}/{baseResourceType}/{baseResourceName}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}

När tilläggsresursen tillämpas på en resursgrupp är formatet:

/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}

När tilläggsresursen tillämpas på en prenumeration är formatet:

/subscriptions/{subscriptionId}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}

När tilläggsresursen tillämpas på en hanteringsgrupp är formatet:

/providers/Microsoft.Management/managementGroups/{managementGroupName}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}

En anpassad principdefinition som distribueras till en hanteringsgrupp implementeras som en tilläggsresurs. Om du vill skapa och tilldela en princip distribuerar du följande Bicep-fil till en hanteringsgrupp.

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

Inbyggda principdefinitioner är resurser på klientnivå. Ett exempel på hur du distribuerar en inbyggd principdefinition finns i tenantResourceId.

getSecret

keyVaultName.getSecret(secretName)

Returnerar en hemlighet från ett Azure Key Vault. Använd den här funktionen för att skicka en hemlighet till en säker strängparameter för en Bicep-modul.

Kommentar

az.getSecret(subscriptionId, resourceGroupName, keyVaultName, secretName, secretVersion) funktionen kan användas i .bicepparam filer för att hämta key vault-hemligheter. Mer information finns i getSecret.

Du kan bara använda getSecret funktionen inifrån avsnittet i params en modul. Du kan bara använda den med en Microsoft.KeyVault/vaults resurs.

module sql './sql.bicep' = {
  name: 'deploySQL'
  params: {
    adminPassword: keyVault.getSecret('vmAdminPassword')
  }
}

Du får ett fel om du försöker använda den här funktionen i någon annan del av Bicep-filen. Du får också ett fel om du använder den här funktionen med stränginterpolation, även när den används i params-avsnittet.

Funktionen kan endast användas med en modulparameter som har dekoratören @secure() .

Nyckelvalvet måste ha enabledForTemplateDeployment angetts till true. Användaren som distribuerar Bicep-filen måste ha åtkomst till hemligheten. Mer information finns i Använda Azure Key Vault för att skicka säkert parametervärde under Bicep-distributionen.

En namnområdeskvalificerare behövs inte eftersom funktionen används med en resurstyp.

Parametrar

Parameter Obligatoriskt Type Beskrivning
secretName Ja sträng Namnet på hemligheten som lagras i ett nyckelvalv.

Returvärde

Det hemliga värdet för det hemliga namnet.

Exempel

Följande Bicep-fil används som en modul. Den har en adminPassword parameter som definierats med dekoratören @secure() .

param sqlServerName string
param adminLogin string

@secure()
param adminPassword string

resource sqlServer 'Microsoft.Sql/servers@2023-08-01-preview' = {
  ...
}

Följande Bicep-fil använder den föregående Bicep-filen som en modul. Bicep-filen refererar till ett befintligt nyckelvalv och anropar getSecret funktionen för att hämta nyckelvalvshemligheten och skickar sedan värdet som en parameter till modulen.

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

Du kan anropa en listfunktion för valfri resurstyp med en åtgärd som börjar med list. Några vanliga användningar är list, listKeys, listKeyValueoch listSecrets.

Syntaxen för den här funktionen varierar beroende på namnet på liståtgärden. De returnerade värdena varierar också beroende på åtgärd. Bicep stöder för närvarande inte slutföranden och validering för list* funktioner.

Med Bicep CLI version 0.4.X eller senare anropar du listfunktionen med hjälp av accessoroperatorn. Exempel: storageAccount.listKeys()

En namnområdeskvalificerare behövs inte eftersom funktionen används med en resurstyp.

Parametrar

Parameter Obligatoriskt Type Beskrivning
apiVersion Nej sträng Om du inte anger den här parametern används API-versionen för resursen. Ange endast en anpassad API-version när du behöver funktionen för att köras med en viss version. Använd formatet yyyy-mm-dd.
functionValues Nej objekt Ett objekt som har värden för funktionen. Ange endast det här objektet för funktioner som stöder mottagande av ett objekt med parametervärden, till exempel listAccountSas på ett lagringskonto. Ett exempel på att skicka funktionsvärden visas i den här artikeln.

Giltiga användningsområden

Funktionerna list kan användas i egenskaperna för en resursdefinition. Använd inte en list funktion som exponerar känslig information i utdataavsnittet i en Bicep-fil. Utdatavärden lagras i distributionshistoriken och kan hämtas av en obehörig användare.

När det används med en iterativ loop kan du använda list funktionerna för input eftersom uttrycket har tilldelats resursegenskapen. Du kan inte använda dem med count eftersom antalet måste fastställas innan list funktionen har lösts.

Om du använder en list funktion i en resurs som är villkorligt distribuerad utvärderas funktionen även om resursen inte distribueras. Du får ett fel om list funktionen refererar till en resurs som inte finns. Använd villkorsuttrycket ?: operator för att se till att funktionen endast utvärderas när resursen distribueras.

Returvärde

Det returnerade objektet varierar beroende på vilken listfunktion du använder. Till exempel listKeys returnerar för ett lagringskonto följande format:

{
  "keys": [
    {
      "keyName": "key1",
      "permissions": "Full",
      "value": "{value}"
    },
    {
      "keyName": "key2",
      "permissions": "Full",
      "value": "{value}"
    }
  ]
}

Andra list funktioner har olika returformat. Om du vill se formatet för en funktion tar du med den i avsnittet utdata som du ser i exemplet på Bicep-filen.

Listexempel

I följande exempel distribueras ett lagringskonto och anropas listKeys sedan på lagringskontot. Nyckeln används när du anger ett värde för distributionsskript.

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

I nästa exempel visas en list funktion som tar en parameter. I det här fallet är listAccountSasfunktionen . Skicka ett objekt för förfallotiden. Förfallotiden måste vara i framtiden.

param accountSasProperties object {
  default: {
    signedServices: 'b'
    signedPermission: 'r'
    signedExpiry: '2020-08-20T11:00:00Z'
    signedResourceTypes: 's'
  }
}
...
sasToken: storageAccount.listAccountSas('2021-04-01', accountSasProperties).accountSasToken

Implementeringar

Möjliga användningsområden för list* visas i följande tabell.

Resurstyp Funktionsnamn
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/openid Anslut Providers 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/experiment/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 visa listauthkeys
Microsoft.DataFactory/fabriker/integrationruntimes visa listauthkeys
Microsoft.DataLakeAnalytics/accounts/storageAccounts/Containers listSasTokens
Microsoft.DataShare/accounts/shares listSynkroniseringar
Microsoft.DataShare/accounts/shareSubscriptions listSourceShareSynchronization Inställningar
Microsoft.DataShare/accounts/shareSubscriptions listSynchronizationDetails
Microsoft.DataShare/accounts/shareSubscriptions listSynkroniseringar
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 list Anslut ionInfo
Microsoft.DomainRegistration listDomain Rekommendationer
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/sammansättningar 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 listNoder
Microsoft.MachineLearningServices/arbetsytor listKeys
Microsoft. Kartor/konton 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/enheter listFailoverSets
Microsoft.StorSimple/managers/enheter 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

För att avgöra vilka resurstyper som har en liståtgärd har du följande alternativ:

  • Visa REST API-åtgärderna för en resursprovider och leta efter liståtgärder. Lagringskonton har till exempel åtgärden listKeys.

  • Använd Cmdleten Get-AzProviderOperation PowerShell. I följande exempel hämtas alla liståtgärder för lagringskonton:

    Get-AzProviderOperation -OperationSearchString "Microsoft.Storage/*" | where {$_.Operation -like "*list*"} | FT Operation
    
  • Använd följande Azure CLI-kommando för att endast filtrera liståtgärderna:

    az provider operation show --namespace Microsoft.Storage --query "resourceTypes[?name=='storageAccounts'].operations[].name | [?contains(@, 'list')]"
    

managementGroupResourceId

managementGroupResourceId(resourceType, resourceName1, [resourceName2], ...)

Returnerar den unika identifieraren för en resurs som distribueras på hanteringsgruppsnivå.

Namnområde: az.

Funktionen managementGroupResourceId är tillgänglig i Bicep-filer, men vanligtvis behöver du den inte. Använd i stället det symboliska namnet för resursen och få åtkomst till id egenskapen.

Identifieraren returneras i följande format:

/providers/Microsoft.Management/managementGroups/{managementGroupName}/providers/{resourceType}/{resourceName}

Kommentarer

Du använder den här funktionen för att hämta resurs-ID för resurser som distribueras till hanteringsgruppen i stället för en resursgrupp. Det returnerade ID:t skiljer sig från värdet som returneras av funktionen resourceId genom att inte inkludera ett prenumerations-ID och ett resursgruppsvärde.

managementGroupResourceID-exempel

Följande mall skapar och tilldelar en principdefinition. Den använder managementGroupResourceId funktionen för att hämta resurs-ID:t för principdefinitionen.

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

Avgör om en resurstyp stöder zoner för en region. Den här funktionen stöder endast zonindeliga resurser. Zonredundanta tjänster returnerar en tom matris. Mer information finns i Azure-tjänster som stöder Tillgänglighetszoner.

Namnområde: az.

Parametrar

Parameter Obligatoriskt Type Beskrivning
providerNamespace Ja sträng Resursproviderns namnområde för resurstypen för att söka efter zonstöd.
resourceType Ja sträng Resurstypen för att söka efter zonstöd.
plats Ja sträng Regionen för att söka efter zonstöd.
numberOfZones Nej integer Antalet logiska zoner som ska returneras. Standardvärdet är 1. Talet måste vara ett positivt heltal från 1 till 3. Använd 1 för resurser med en zon. För resurser med flera zoner måste värdet vara mindre än eller lika med antalet zoner som stöds.
förskjutning Nej integer Förskjutningen från den logiska startzonen. Funktionen returnerar ett fel om förskjutningen plus numberOfZones överskrider antalet zoner som stöds.

Returvärde

En matris med de zoner som stöds. När du använder standardvärdena för offset och numberOfZonesreturnerar en resurstyp och region som stöder zoner följande matris:

[
    "1"
]

När parametern numberOfZones är inställd på 3 returneras:

[
    "1",
    "2",
    "3"
]

När resurstypen eller regionen inte stöder zoner returneras en tom matris.

[
]

Kommentarer

Det finns olika kategorier för Azure Tillgänglighetszoner – zonindelad och zonredundant. Funktionen pickZones kan användas för att returnera en tillgänglighetszon för en zonindelad resurs. För zonredundanta tjänster (ZRS) returnerar funktionen en tom matris. Zonindeliga resurser har vanligtvis en zones egenskap på den översta nivån i resursdefinitionen. Information om vilken kategori av stöd som finns för tillgänglighetszoner finns i Azure-tjänster som stöder Tillgänglighetszoner.

För att avgöra om en viss Azure-region eller plats stöder tillgänglighetszoner anropar pickZones du funktionen med en zonindelad resurstyp, till exempel Microsoft.Network/publicIPAddresses. Om svaret inte är tomt stöder regionen tillgänglighetszoner.

pickZones-exempel

Följande Bicep-fil visar tre resultat för att använda pickZones funktionen.

output supported array = pickZones('Microsoft.Compute', 'virtualMachines', 'westus2')
output notSupportedRegion array = pickZones('Microsoft.Compute', 'virtualMachines', 'westus')
output notSupportedType array = pickZones('Microsoft.Cdn', 'profiles', 'westus2')

Utdata från föregående exempel returnerar tre matriser.

Namn Typ Värde
stöds matris [ "1" ]
notSupportedRegion matris []
notSupportedType matris []

Du kan använda svaret från pickZones för att avgöra om du vill ange null för zoner eller tilldela virtuella datorer till olika zoner.

Leverantörer

Funktionen providers har blivit inaktuell i Bicep. Vi rekommenderar inte längre att du använder den. Om du använde den här funktionen för att hämta en API-version för resursprovidern rekommenderar vi att du anger en specifik API-version i Bicep-filen. Om du använder en dynamiskt returnerad API-version kan mallen brytas om egenskaperna ändras mellan versionerna.

Provideråtgärden är fortfarande tillgänglig via REST-API:et. Den kan användas utanför en Bicep-fil för att hämta information om en resursprovider.

Namnområde: az.

Referens

reference(resourceName or resourceIdentifier, [apiVersion], ['Full'])

Returnerar ett objekt som representerar en resurss körningstillstånd. Utdata och beteende för reference funktionen är starkt beroende av hur varje resursprovider (RP) implementerar sina PUT- och GET-svar.

Namnområde: az.

Bicep-filerna ger åtkomst till referensfunktionen, men det är vanligtvis onödigt. I stället rekommenderar vi att du använder det symboliska namnet på resursen. Referensfunktionen kan bara användas i properties objektet för en resurs och kan inte användas för egenskaper på den översta nivån som name eller location. Samma sak gäller vanligtvis för referenser som använder det symboliska namnet. För egenskaper som name, är det dock möjligt att generera en mall utan att använda referensfunktionen. Tillräckligt med information om resursnamnet är känt för att generera namnet direkt. Det kallas kompileringstidsegenskaper. Bicep-validering kan identifiera felaktig användning av det symboliska namnet.

I följande exempel distribueras ett lagringskonto. De två första utdata ger samma resultat.

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

Om du vill hämta en egenskap från en befintlig resurs som inte har distribuerats i mallen använder du nyckelordet 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

Om du vill referera till en resurs som är kapslad i en överordnad resurs använder du den kapslade accessorn (::). Du använder bara den här syntaxen när du kommer åt den kapslade resursen utanför den överordnade resursen.

vNet1::subnet1.properties.addressPrefix

Om du försöker referera till en resurs som inte finns får du felet och distributionen NotFound misslyckas.

resourceId

resourceId([subscriptionId], [resourceGroupName], resourceType, resourceName1, [resourceName2], ...)

Returnerar den unika identifieraren för en resurs.

Namnområde: az.

Funktionen resourceId är tillgänglig i Bicep-filer, men vanligtvis behöver du den inte. Använd i stället det symboliska namnet för resursen och få åtkomst till id egenskapen.

Du använder den här funktionen när resursnamnet är tvetydigt eller inte har etablerats i samma Bicep-fil. Formatet för den returnerade identifieraren varierar beroende på om distributionen sker i omfånget för en resursgrupp, prenumeration, hanteringsgrupp eller klientorganisation.

Till exempel:

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

Om du vill hämta resurs-ID:t för en resurs som inte har distribuerats i Bicep-filen använder du det befintliga nyckelordet.

param storageAccountName string

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' existing = {
  name: storageAccountName
}

output storageID string = storageAccount.id

Mer information finns i funktionen resourceId för JSON-mall.

subscriptionResourceId

subscriptionResourceId([subscriptionId], resourceType, resourceName1, [resourceName2], ...)

Returnerar den unika identifieraren för en resurs som distribueras på prenumerationsnivå.

Namnområde: az.

Funktionen subscriptionResourceId är tillgänglig i Bicep-filer, men vanligtvis behöver du den inte. Använd i stället det symboliska namnet för resursen och få åtkomst till id egenskapen.

Identifieraren returneras i följande format:

/subscriptions/{subscriptionId}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}

Kommentarer

Du använder den här funktionen för att hämta resurs-ID för resurser som distribueras till prenumerationen i stället för en resursgrupp. Det returnerade ID:t skiljer sig från det värde som returneras av funktionen resourceId genom att inte inkludera ett resursgruppsvärde.

subscriptionResourceID-exempel

Följande Bicep-fil tilldelar en inbyggd roll. Du kan distribuera den till antingen en resursgrupp eller prenumeration. Den använder subscriptionResourceId funktionen för att hämta resurs-ID:t för inbyggda roller.

@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], ...)

Returnerar den unika identifieraren för en resurs som distribuerats på klientorganisationsnivå.

Namnområde: az.

Funktionen tenantResourceId är tillgänglig i Bicep-filer, men vanligtvis behöver du den inte. Använd i stället det symboliska namnet för resursen och få åtkomst till id egenskapen.

Identifieraren returneras i följande format:

/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}

Inbyggda principdefinitioner är resurser på klientnivå. Om du vill distribuera en principtilldelning som refererar till en inbyggd principdefinition använder du tenantResourceId funktionen.

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

Nästa steg