Share via


Resourcefuncties voor Bicep

In dit artikel worden de Bicep-functies beschreven voor het ophalen van resourcewaarden.

Zie De functies Implementatiewaarde om waarden op te halen uit de huidige implementatie.

extensionResourceId

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

Retourneert de resource-id voor een extensieresource. Een extensieresource is een resourcetype dat wordt toegepast op een andere resource om toe te voegen aan de mogelijkheden ervan.

Naamruimte: az.

De extensionResourceId functie is beschikbaar in Bicep-bestanden, maar meestal hebt u deze niet nodig. Gebruik in plaats daarvan de symbolische naam voor de resource en open de id eigenschap.

De basisindeling van de resource-id die door deze functie wordt geretourneerd, is:

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

Het bereiksegment varieert per resource die wordt uitgebreid.

Wanneer de extensieresource wordt toegepast op een resource, wordt de resource-id geretourneerd in de volgende indeling:

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

Wanneer de extensieresource wordt toegepast op een resourcegroep, is de volgende indeling:

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

Wanneer de extensieresource wordt toegepast op een abonnement, is de volgende indeling:

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

Wanneer de extensieresource wordt toegepast op een beheergroep, is de volgende indeling:

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

Een aangepaste beleidsdefinitie die is geïmplementeerd in een beheergroep, wordt geïmplementeerd als een extensieresource. Als u een beleid wilt maken en toewijzen, implementeert u het volgende Bicep-bestand in een beheergroep.

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

Ingebouwde beleidsdefinities zijn resources op tenantniveau. Zie tenantResourceId voor een voorbeeld van het implementeren van een ingebouwde beleidsdefinitie.

getSecret

keyVaultName.getSecret(secretName)

Retourneert een geheim uit een Azure Key Vault. Gebruik deze functie om een geheim door te geven aan een beveiligde tekenreeksparameter van een Bicep-module.

Notitie

az.getSecret(subscriptionId, resourceGroupName, keyVaultName, secretName, secretVersion) functie kan worden gebruikt in .bicepparam bestanden om sleutelkluisgeheimen op te halen. Zie getSecret voor meer informatie.

U kunt de getSecret functie alleen gebruiken vanuit de params sectie van een module. U kunt deze alleen gebruiken met een Microsoft.KeyVault/vaults resource.

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

U krijgt een foutmelding als u deze functie probeert te gebruiken in een ander deel van het Bicep-bestand. U krijgt ook een foutmelding als u deze functie gebruikt met tekenreeksinterpolatie, zelfs als deze wordt gebruikt in de sectie params.

De functie kan alleen worden gebruikt met een moduleparameter met de @secure() decorator.

De sleutelkluis moet zijn enabledForTemplateDeployment ingesteld op true. De gebruiker die het Bicep-bestand implementeert, moet toegang hebben tot het geheim. Zie Azure Key Vault gebruiken om een veilige parameterwaarde door te geven tijdens de bicep-implementatie voor meer informatie.

Er is geen kwalificatie voor naamruimten nodig omdat de functie wordt gebruikt met een resourcetype.

Parameters

Parameter Vereist Type Description
secretName Ja tekenreeks De naam van het geheim dat is opgeslagen in een sleutelkluis.

Retourwaarde

De geheime waarde voor de geheime naam.

Opmerking

Het volgende Bicep-bestand wordt gebruikt als een module. Er is een adminPassword parameter gedefinieerd met de @secure() decorator.

param sqlServerName string
param adminLogin string

@secure()
param adminPassword string

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

Het volgende Bicep-bestand gebruikt het voorgaande Bicep-bestand als een module. Het Bicep-bestand verwijst naar een bestaande sleutelkluis en roept de getSecret functie aan om het sleutelkluisgeheim op te halen en geeft vervolgens de waarde als parameter door aan de module.

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

Lijst*

resourceName.list([apiVersion], [functionValues])

U kunt een lijstfunctie aanroepen voor elk resourcetype met een bewerking die begint met list. Sommige veelvoorkomende gebruiksrechten zijn list, listKeys, listKeyValueen listSecrets.

De syntaxis voor deze functie verschilt per naam van de lijstbewerking. De geretourneerde waarden variëren ook per bewerking. Bicep biedt momenteel geen ondersteuning voor voltooiingen en validatie voor list* functies.

Met Bicep CLI versie 0.4.X of hoger roept u de lijstfunctie aan met behulp van de toegangsoperator. Bijvoorbeeld: storageAccount.listKeys().

Er is geen kwalificatie voor naamruimten nodig omdat de functie wordt gebruikt met een resourcetype.

Parameters

Parameter Vereist Type Description
apiVersion Nee tekenreeks Als u deze parameter niet opgeeft, wordt de API-versie voor de resource gebruikt. Geef alleen een aangepaste API-versie op wanneer u de functie wilt uitvoeren met een specifieke versie. Gebruik de notatie jjjj-mm-dd.
functionValues Nee object Een object met waarden voor de functie. Geef dit object alleen op voor functies die ondersteuning bieden voor het ontvangen van een object met parameterwaarden, zoals listAccountSas in een opslagaccount. In dit artikel wordt een voorbeeld weergegeven van het doorgeven van functiewaarden.

Geldig gebruik

De list functies kunnen worden gebruikt in de eigenschappen van een resourcedefinitie. Gebruik geen list functie die gevoelige informatie beschikbaar maakt in de uitvoersectie van een Bicep-bestand. Uitvoerwaarden worden opgeslagen in de implementatiegeschiedenis en kunnen worden opgehaald door een kwaadwillende gebruiker.

Wanneer u deze gebruikt met een iteratieve lus, kunt u de list functies input gebruiken omdat de expressie is toegewezen aan de resource-eigenschap. U kunt ze niet gebruiken omdat count het aantal moet worden bepaald voordat de list functie wordt omgezet.

Als u een list functie gebruikt in een resource die voorwaardelijk is geïmplementeerd, wordt de functie geëvalueerd, zelfs als de resource niet is geïmplementeerd. Er wordt een fout weergegeven als de list functie verwijst naar een resource die niet bestaat. Gebruik de voorwaardelijke expressie ?: operator om ervoor te zorgen dat de functie alleen wordt geëvalueerd wanneer de resource wordt geïmplementeerd.

Retourwaarde

Het geretourneerde object verschilt per lijstfunctie die u gebruikt. Het voor een opslagaccount retourneert bijvoorbeeld listKeys de volgende indeling:

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

Andere list functies hebben verschillende retourindelingen. Als u de indeling van een functie wilt zien, neemt u deze op in de uitvoersectie, zoals wordt weergegeven in het bicep-voorbeeldbestand.

Lijstvoorbeeld

In het volgende voorbeeld wordt een opslagaccount geïmplementeerd en vervolgens dat opslagaccount aanroepen listKeys . De sleutel wordt gebruikt bij het instellen van een waarde voor implementatiescripts.

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

In het volgende voorbeeld ziet u een list functie die een parameter gebruikt. In dit geval is listAccountSasde functie . Geef een object door voor de verlooptijd. De verlooptijd moet in de toekomst zijn.

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

Implementaties

De mogelijke toepassingen worden list* weergegeven in de volgende tabel.

Brontype Functienaam
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 Verbinding maken 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/experiments/jobs listoutputfiles
Microsoft.BotService/botServices/channels listChannelWithKeys
Microsoft.Cache/redis listKeys
Microsoft.CognitiveServices/accounts listKeys
Microsoft.ContainerRegistry/registers listCredentials
Microsoft.ContainerRegistry/registers 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 listCluster Beheer Credential
Microsoft.ContainerService/managedClusters listClusterMonitoringUserCredential
Microsoft.ContainerService/managedClusters listClusterUserCredential
Microsoft.ContainerService/managedClusters/accessProfiles listCredential
Microsoft.DataBox/jobs listCredentials
Microsoft.DataFactory/datafactories/gateways listauthkeys
Microsoft.DataFactory/factory's/integrationruntimes listauthkeys
Microsoft.DataLakeAnalytics/accounts/storageAccounts/Containers listSasTokens
Microsoft.DataShare/accounts/shares listSynchronizations
Microsoft.DataShare/accounts/shareSubscriptions listSourceShareSynchronization Instellingen
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 list Verbinding maken ionInfo
Microsoft.DomainRegistration listDomain Aanbevelingen
Microsoft.DomainRegistration/topLevelDomains listAgreements
Microsoft.EventGrid/domains listKeys
Microsoft.EventGrid/topics listKeys
Microsoft.EventHub/naamruimten/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/gebruikers lijst
Microsoft.LabServices/labs/virtualMachines lijst
Microsoft.Logic/integrationAccounts/agreements listContentCallbackUrl
Microsoft.Logic/integrationAccounts/assembly's listContentCallbackUrl
Microsoft.Logic/integrationAccounts listCallbackUrl
Microsoft.Logic/integrationAccounts listKeyVaultKeys
Microsoft.Logic/integrationAccounts/maps listContentCallbackUrl
Microsoft.Logic/integrationAccounts/partners listContentCallbackUrl
Microsoft.Logic/integrationAccounts/schema's listContentCallbackUrl
Microsoft.Logic/workflows listCallbackUrl
Microsoft.Logic/workflows listSwagger
Microsoft.Logic/workflows/runs/actions listExpressionTraces
Microsoft.Logic/workflows/runs/actions/herhalingen 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/werkruimten listKeys
Microsoft. Kaarten/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/Naamruimten/authorizationRules listkeys
Microsoft.NotificationHubs/Namespaces/NotificationHubs/authorizationRules listkeys
Microsoft.OperationalInsights/workspaces lijst
Microsoft.OperationalInsights/workspaces listKeys
Microsoft.PolicyInsights/herstelbewerkingen listDeployments
Microsoft.RedHatOpenShift/openShiftClusters listCredentials
Microsoft.Relay/namespaces/disasterRecoveryConfigs/authorizationRules listkeys
Microsoft.Search/searchServices list Beheer Keys
Microsoft.Search/searchServices listQueryKeys
Microsoft.SignalRService/SignalR listkeys
Microsoft.Storage/storageAccounts listAccountSas
Microsoft.Storage/storageAccounts listkeys
Microsoft.Storage/storageAccounts listServiceSas
Microsoft.StorSimple/managers/apparaten listFailoverSets
Microsoft.StorSimple/managers/apparaten 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 lijst
Microsoft.Web/sites/config lijst
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 lijst
Microsoft.Web/sites/slots/config lijst
microsoft.web/sites/slots/functions listsecrets

Als u wilt bepalen welke resourcetypen een lijstbewerking hebben, hebt u de volgende opties:

  • Bekijk de REST API-bewerkingen voor een resourceprovider en zoek naar lijstbewerkingen. Opslagaccounts hebben bijvoorbeeld de bewerking listKeys.

  • Gebruik de Cmdlet Get-AzProviderOperation PowerShell. In het volgende voorbeeld worden alle lijstbewerkingen voor opslagaccounts opgeslagen:

    Get-AzProviderOperation -OperationSearchString "Microsoft.Storage/*" | where {$_.Operation -like "*list*"} | FT Operation
    
  • Gebruik de volgende Azure CLI-opdracht om alleen de lijstbewerkingen te filteren:

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

managementGroupResourceId

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

Retourneert de unieke id voor een resource die is geïmplementeerd op het niveau van de beheergroep.

Naamruimte: az.

De managementGroupResourceId functie is beschikbaar in Bicep-bestanden, maar meestal hebt u deze niet nodig. Gebruik in plaats daarvan de symbolische naam voor de resource en open de id eigenschap.

De id wordt geretourneerd in de volgende indeling:

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

Opmerkingen

U gebruikt deze functie om de resource-id op te halen voor resources die zijn geïmplementeerd in de beheergroep in plaats van een resourcegroep. De geretourneerde id verschilt van de waarde die wordt geretourneerd door de resourceId-functie door geen abonnements-id en een resourcegroepwaarde op te geven.

voorbeeld managementGroupResourceID

Met de volgende sjabloon wordt een beleidsdefinitie gemaakt en toegewezen. De functie gebruikt de managementGroupResourceId functie om de resource-id voor beleidsdefinitie op te halen.

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

Bepaalt of een resourcetype zones voor een regio ondersteunt. Deze functie ondersteunt alleen zonegebonden resources. Zoneredundante services retourneren een lege matrix. Zie Azure-services die ondersteuning bieden voor Beschikbaarheidszones voor meer informatie.

Naamruimte: az.

Parameters

Parameter Vereist Type Description
providerNamespace Ja tekenreeks De naamruimte van de resourceprovider voor het resourcetype om te controleren op zoneondersteuning.
resourceType Ja tekenreeks Het resourcetype om te controleren op zoneondersteuning.
locatie Ja tekenreeks De regio om te controleren op zoneondersteuning.
numberOfZones Nee geheel getal Het aantal logische zones dat moet worden geretourneerd. De standaardwaarde is 1. Het getal moet een positief geheel getal tussen 1 en 3 zijn. Gebruik 1 voor resources met één zone. Voor resources met meerdere zones moet de waarde kleiner zijn dan of gelijk zijn aan het aantal ondersteunde zones.
offset Nee geheel getal De verschuiving van de logische beginzone. De functie retourneert een fout als offset plus numberOfZones het aantal ondersteunde zones overschrijdt.

Retourwaarde

Een matrix met de ondersteunde zones. Wanneer u de standaardwaarden gebruikt voor offset en numberOfZones, retourneert een resourcetype en regio die zones ondersteunt de volgende matrix:

[
    "1"
]

Wanneer de numberOfZones parameter is ingesteld op 3, wordt het volgende geretourneerd:

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

Wanneer het resourcetype of de resourceregio geen zones ondersteunt, wordt er een lege matrix geretourneerd.

[
]

Opmerkingen

Er zijn verschillende categorieën voor Azure Beschikbaarheidszones : zone-redundant en zone-redundant. De pickZones functie kan worden gebruikt om een beschikbaarheidszone voor een zonegebonden resource te retourneren. Voor zone-redundante services (ZRS) retourneert de functie een lege matrix. Zonegebonden resources hebben doorgaans een zones eigenschap op het hoogste niveau van de resourcedefinitie. Zie Azure-services die ondersteuning bieden voor Beschikbaarheidszones om de categorie van ondersteuning voor beschikbaarheidszones te bepalen.

Als u wilt bepalen of een bepaalde Azure-regio of -locatie beschikbaarheidszones ondersteunt, roept u de pickZones functie aan met een zonegebonden resourcetype, zoals Microsoft.Network/publicIPAddresses. Als het antwoord niet leeg is, ondersteunt de regio beschikbaarheidszones.

pickZones-voorbeeld

In het volgende Bicep-bestand ziet u drie resultaten voor het gebruik van de pickZones functie.

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

De uitvoer van de voorgaande voorbeelden retourneert drie matrices.

Name Type Weergegeven als
ondersteund matrix [ "1" ]
notSupportedRegion matrix []
notSupportedType matrix []

U kunt het antwoord van waaruit pickZones u kunt gebruiken om te bepalen of null moet worden opgegeven voor zones of om virtuele machines toe te wijzen aan verschillende zones.

providers

De functie providers is afgeschaft in Bicep. We raden u niet meer aan om het te gebruiken. Als u deze functie hebt gebruikt om een API-versie voor de resourceprovider op te halen, raden we u aan een specifieke API-versie op te geven in uw Bicep-bestand. Als u een dynamisch geretourneerde API-versie gebruikt, kan uw sjabloon worden verbroken als de eigenschappen tussen versies veranderen.

De providerbewerking is nog steeds beschikbaar via de REST API. Het kan buiten een Bicep-bestand worden gebruikt om informatie over een resourceprovider op te halen.

Naamruimte: az.

Verwijzing

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

Retourneert een object dat de runtimestatus van een resource vertegenwoordigt. De uitvoer en het gedrag van de reference functie zijn sterk afhankelijk van de manier waarop elke resourceprovider (RP) de PUT- en GET-antwoorden implementeert.

Naamruimte: az.

De Bicep-bestanden bieden toegang tot de referentiefunctie, hoewel dit meestal niet nodig is. In plaats daarvan is het raadzaam om de symbolische naam van de resource te gebruiken. De verwijzingsfunctie kan alleen worden gebruikt binnen het properties object van een resource en kan niet worden gebruikt voor eigenschappen op het hoogste niveau, zoals name of location. Hetzelfde geldt doorgaans voor verwijzingen met behulp van de symbolische naam. Voor eigenschappen zoals name, is het echter mogelijk om een sjabloon te genereren zonder de verwijzingsfunctie te gebruiken. Er is voldoende informatie over de resourcenaam bekend om de naam rechtstreeks te verzenden. Dit wordt gecompileerde eigenschappen genoemd. Bicep-validatie kan elk onjuist gebruik van de symbolische naam identificeren.

In het volgende voorbeeld wordt een opslagaccount geïmplementeerd. De eerste twee uitvoer geeft u dezelfde resultaten.

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

Als u een eigenschap wilt ophalen van een bestaande resource die niet in de sjabloon is geïmplementeerd, gebruikt u het existing trefwoord:

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

Als u wilt verwijzen naar een resource die is genest in een bovenliggende resource, gebruikt u de geneste toegangsprovider (::). U gebruikt deze syntaxis alleen wanneer u toegang hebt tot de geneste resource van buiten de bovenliggende resource.

vNet1::subnet1.properties.addressPrefix

Als u probeert te verwijzen naar een resource die niet bestaat, krijgt u de NotFound fout en mislukt de implementatie.

resourceId

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

Retourneert de unieke id van een resource.

Naamruimte: az.

De resourceId functie is beschikbaar in Bicep-bestanden, maar meestal hebt u deze niet nodig. Gebruik in plaats daarvan de symbolische naam voor de resource en open de id eigenschap.

U gebruikt deze functie wanneer de resourcenaam niet eenduidig is of niet is ingericht in hetzelfde Bicep-bestand. De indeling van de geretourneerde id is afhankelijk van of de implementatie plaatsvindt binnen het bereik van een resourcegroep, abonnement, beheergroep of tenant.

Voorbeeld:

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

Gebruik het bestaande trefwoord om de resource-id op te halen voor een resource die niet is geïmplementeerd in het Bicep-bestand.

param storageAccountName string

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

output storageID string = storageAccount.id

Zie de resourceId-functie van de JSON-sjabloon voor meer informatie.

subscriptionResourceId

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

Retourneert de unieke id voor een resource die is geïmplementeerd op abonnementsniveau.

Naamruimte: az.

De subscriptionResourceId functie is beschikbaar in Bicep-bestanden, maar meestal hebt u deze niet nodig. Gebruik in plaats daarvan de symbolische naam voor de resource en open de id eigenschap.

De id wordt geretourneerd in de volgende indeling:

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

Opmerkingen

U gebruikt deze functie om de resource-id op te halen voor resources die zijn geïmplementeerd in het abonnement in plaats van een resourcegroep. De geretourneerde id verschilt van de waarde die door de resourceId-functie wordt geretourneerd door het niet opnemen van een resourcegroepwaarde.

voorbeeld subscriptionResourceID

Het volgende Bicep-bestand wijst een ingebouwde rol toe. U kunt deze implementeren in een resourcegroep of abonnement. De functie gebruikt de subscriptionResourceId functie om de resource-id op te halen voor ingebouwde rollen.

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

Retourneert de unieke id voor een resource die is geïmplementeerd op tenantniveau.

Naamruimte: az.

De tenantResourceId functie is beschikbaar in Bicep-bestanden, maar meestal hebt u deze niet nodig. Gebruik in plaats daarvan de symbolische naam voor de resource en open de id eigenschap.

De id wordt geretourneerd in de volgende indeling:

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

Ingebouwde beleidsdefinities zijn resources op tenantniveau. Als u een beleidstoewijzing wilt implementeren die verwijst naar een ingebouwde beleidsdefinitie, gebruikt u de tenantResourceId functie.

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

Volgende stappen