Resursfunktioner för ARM-mallar
Resource Manager innehåller följande funktioner för att hämta resursvärden i din Azure Resource Manager mall (ARM-mall):
- extensionResourceId
- lista*
- pickZones
- providers (inaktuell)
- Referens
- resourceId
- subscriptionResourceId
- tenantResourceId
Information om hur du hämtar värden från parametrar, variabler eller den aktuella distributionen finns i Funktioner för distributionsvärde.
Information om hur du hämtar värden för distributionsomfång finns i Omfångsfunktioner.
extensionResourceId
extensionResourceId(baseResourceId, resourceType, resourceName1, [resourceName2], ...)
Returnerar resurs-ID:t för en tilläggsresurs, som är en resurstyp som tillämpas på en annan resurs som ska läggas till i dess funktioner.
Parametrar
| Parameter | Krävs | Typ | Beskrivning |
|---|---|---|---|
| baseResourceId | Ja | sträng | Resurs-ID:t för resursen som tilläggsresursen tillämpas på. |
| resourceType | Ja | sträng | Typ av tilläggsresurs, inklusive resursproviderns namnområde. |
| resourceName1 | Ja | sträng | Namnet på tilläggsresursen. |
| resourceName2 | Inga | sträng | Nästa resursnamnssegment, om det behövs. |
Fortsätt att lägga till resursnamn som parametrar när resurstypen innehåller fler segment.
Returvärde
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 basresurs som utökas. ID:t för en prenumeration har till exempel andra segment än ID:t för en resursgrupp.
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 det returnerade formatet:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}
Ett exempel på hur du använder den här funktionen med en resursgrupp visas i nästa avsnitt.
När tilläggsresursen tillämpas på en prenumeration är det returnerade formatet:
/subscriptions/{subscriptionId}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}
När tilläggsresursen tillämpas på en hanteringsgrupp är det returnerade formatet:
/providers/Microsoft.Management/managementGroups/{managementGroupName}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}
Ett exempel på hur du använder den här funktionen med en hanteringsgrupp visas i nästa avsnitt.
extensionResourceId-exempel
I följande exempel returneras resurs-ID:t för ett resursgruppslås.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"lockName": {
"type": "string"
}
},
"variables": {},
"resources": [],
"outputs": {
"lockResourceId": {
"type": "string",
"value": "[extensionResourceId(resourceGroup().Id , 'Microsoft.Authorization/locks', parameters('lockName'))]"
}
}
}
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 mall till en hanteringsgrupp.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.4.1.14562",
"templateHash": "2350252618174097128"
}
},
"parameters": {
"targetMG": {
"type": "string",
"metadata": {
"description": "Target Management Group"
}
},
"allowedLocations": {
"type": "array",
"defaultValue": [
"australiaeast",
"australiasoutheast",
"australiacentral"
],
"metadata": {
"description": "An array of the allowed locations, all other locations will be denied by the created policy."
}
}
},
"functions": [],
"variables": {
"mgScope": "[tenantResourceId('Microsoft.Management/managementGroups', parameters('targetMG'))]",
"policyDefinitionName": "LocationRestriction"
},
"resources": [
{
"type": "Microsoft.Authorization/policyDefinitions",
"apiVersion": "2020-03-01",
"name": "[variables('policyDefinitionName')]",
"properties": {
"policyType": "Custom",
"mode": "All",
"parameters": {},
"policyRule": {
"if": {
"not": {
"field": "location",
"in": "[parameters('allowedLocations')]"
}
},
"then": {
"effect": "deny"
}
}
}
},
{
"type": "Microsoft.Authorization/policyAssignments",
"apiVersion": "2020-03-01",
"name": "location-lock",
"properties": {
"scope": "[variables('mgScope')]",
"policyDefinitionId": "[extensionResourceId(variables('mgScope'), 'Microsoft.Authorization/policyDefinitions', variables('policyDefinitionName'))]"
},
"dependsOn": [
"[format('Microsoft.Authorization/policyDefinitions/{0}', variables('policyDefinitionName'))]"
]
}
]
}
Inbyggda principdefinitioner är resurser på klientorganisationsnivå. Ett exempel på hur du distribuerar en inbyggd principdefinition finns i tenantResourceId.
lista*
list{Value}(resourceName or resourceIdentifier, apiVersion, functionValues)
Syntaxen för den här funktionen varierar beroende på namnet på liståtgärderna. Varje implementering returnerar värden för den resurstyp som stöder en liståtgärd. Åtgärdsnamnet måste börja med list och kan ha ett suffix. Några vanliga användningsområden list är , , och listKeys listKeyValue listSecrets .
Parametrar
| Parameter | Krävs | Typ | Beskrivning |
|---|---|---|---|
| resourceName eller resourceIdentifier | Ja | sträng | Unik identifierare för resursen. |
| apiVersion | Ja | sträng | API-version av resurskörningstillståndet. I formatet yyyy-mm-dd. |
| functionValues | Inga | objekt | Ett -objekt som har värden för funktionen. Ange endast det här objektet för funktioner som har stöd för att ta emot 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
Listfunktionerna kan användas i egenskaperna för en resursdefinition. Använd inte en listfunktion som exponerar känslig information i utdataavsnittet i en mall. Utdatavärden lagras i distributionshistoriken och kan hämtas av en obehörig användare.
När det används med egenskapens iterationkan du använda listfunktionerna för input eftersom uttrycket har tilldelats till resursegenskapen. Du kan inte använda dem med count eftersom antalet måste fastställas innan listfunktionen matchas.
Implementeringar
Möjliga användningsområden för lista* 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/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.Blockchain/blockchainMembers | listApiKeys |
| Microsoft.Blockchain/blockchainMembers/transactionNodes | listApiKeys |
| Microsoft.BotService/botServices/channels | listChannelWithKeys |
| Microsoft.Cache/redis | listKeys |
| Microsoft.CognitiveServices/accounts | listKeys |
| Microsoft.ContainerRegistry/registries | listBuildSourceUploadUrl |
| 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 | listConnectionStrings |
| Microsoft.DocumentDB/databaseAccounts | listKeys |
| Microsoft.DocumentDB/databaseAccounts/notebookWorkspaces | listConnectionInfo |
| Microsoft.DomainRegistration | listDomainRecommendations |
| Microsoft.DomainRegistration/topLevelDomains | listAgreements |
| Microsoft.EventGrid/domäner | listKeys |
| Microsoft.EventGrid/ämnen | 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/users | ListEnvironments |
| Microsoft.LabServices/users | ListLabs |
| 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/scheman | listContentCallbackUrl |
| Microsoft.Logic/arbetsflöden | listCallbackUrl |
| Microsoft.Logic/arbetsflöden | 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. 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/reparation | listDeployments |
| Microsoft.RedHatOpenShift/openShiftClusters | listCredentials |
| Microsoft.Relay/namespaces/authorizationRules | listkeys |
| Microsoft.Relay/namespaces/disasterRecoveryConfigs/authorizationRules | listkeys |
| Microsoft.Relay/namespaces/HybridConnections/authorizationRules | listkeys |
| Microsoft.Relay/namespaces/WcfRelays/authorizationRules | listkeys |
| Microsoft.Search/searchServices | listAdminKeys |
| Microsoft.Search/searchServices | listQueryKeys |
| Microsoft.ServiceBus/namespaces/authorizationRules | listkeys |
| Microsoft.ServiceBus/namespaces/disasterRecoveryConfigs/authorizationRules | listkeys |
| Microsoft.ServiceBus/namespaces/queues/authorizationRules | listkeys |
| Microsoft.ServiceBus/namespaces/topics/authorizationRules | listkeys |
| Microsoft.SignalRService/SignalR | listkeys |
| Microsoft. Storage/storageAccounts | listAccountSas |
| Microsoft. Storage/storageAccounts | listkeys |
| Microsoft. Storage/storageAccounts | listServiceSas |
| Microsoft.StorSimple/managers/devices | listFailoverSets |
| Microsoft.StorSimple/managers/devices | listFailoverTargets |
| Microsoft.StorSimple/managers | listActivationKey |
| Microsoft.StorSimple/managers | listPublicEncryptionKey |
| Microsoft.Synapse/workspaces/integrationRuntimes | listAuthKeys |
| Microsoft.Web/connectionGateways | ListStatus |
| microsoft.web/connections | listconsentlinks |
| Microsoft.Web/customApis | listWsdlInterfaces |
| microsoft.web/locations | listwsdlinterfaces |
| microsoft.web/apimanagementaccounts/apis/connections | listconnectionkeys |
| microsoft.web/apimanagementaccounts/apis/connections | listSecrets |
| microsoft.web/sites/backups | Lista |
| Microsoft.Web/sites/config | Lista |
| microsoft.web/sites/functions | listkeys |
| microsoft.web/sites/functions | listSecrets |
| microsoft.web/sites/hybridconnectionnamespaces/relays | listkeys |
| microsoft.web/sites | listsyncfunctiontriggerstatus |
| microsoft.web/sites/slots/functions | listSecrets |
| microsoft.web/sites/slots/backups | Lista |
| Microsoft.Web/sites/slots/config | Lista |
| microsoft.web/sites/slots/functions | listSecrets |
För att avgöra vilka resurstyper som har en liståtgärd har du följande alternativ:
Visa REST API åtgärder för en resursprovider och leta efter liståtgärder. Lagringskonton har till exempel åtgärden listKeys.
Använd PowerShell-cmdleten Get-AzProviderOperation. I följande exempel hämtar alla liståtgärder för lagringskonton:
Get-AzProviderOperation -OperationSearchString "Microsoft.Storage/*" | where {$_.Operation -like "*list*"} | FT OperationAnvänd följande Azure CLI-kommando för att filtrera endast liståtgärderna:
az provider operation show --namespace Microsoft.Storage --query "resourceTypes[?name=='storageAccounts'].operations[].name | [?contains(@, 'list')]"
Returvärde
Det returnerade objektet varierar beroende på vilken listfunktion du använder. Till exempel returnerar listKeys för ett lagringskonto följande format:
{
"keys": [
{
"keyName": "key1",
"permissions": "Full",
"value": "{value}"
},
{
"keyName": "key2",
"permissions": "Full",
"value": "{value}"
}
]
}
Andra listfunktioner har olika returformat. Om du vill se formatet för en funktion inkluderar du det i avsnittet outputs (utdata) som du ser i exempelmallen.
Kommentarer
Ange resursen med hjälp av antingen resursnamnet eller resourceId-funktionen. När du använder en listfunktion i samma mall som distribuerar den refererade resursen använder du resursnamnet.
Om du använder en funktion i en resurs som är villkorligt distribuerad utvärderas funktionen även list om resursen inte distribueras. Du får ett felmeddelande list om funktionen refererar till en resurs som inte finns. Använd if funktionen för att se till att funktionen endast utvärderas när resursen distribueras. Se if-funktionen för en exempelmall som använder if och list med en villkorligt distribuerad resurs.
Listexempel
I följande exempel används listKeys när du anger ett värde för distributionsskript .
"storageAccountSettings": {
"storageAccountName": "[variables('storageAccountName')]",
"storageAccountKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), '2019-06-01').keys[0].value]"
}
I nästa exempel visas en listfunktion som tar en parameter. I det här fallet är funktionen listAccountSas. Skicka ett -objekt för förfallotiden. Förfallotiden måste vara i framtiden.
"parameters": {
"accountSasProperties": {
"type": "object",
"defaultValue": {
"signedServices": "b",
"signedPermission": "r",
"signedExpiry": "2020-08-20T11:00:00Z",
"signedResourceTypes": "s"
}
}
},
...
"sasToken": "[listAccountSas(parameters('storagename'), '2018-02-01', parameters('accountSasProperties')).accountSasToken]"
pickZones
pickZones(providerNamespace, resourceType, location, [numberOfZones], [offset])
Anger om en resurstyp stöder zoner för den angivna platsen eller regionen. Den här funktionen stöder endast zonindeade resurser. Zonredundanta tjänster returnerar en tom matris. Mer information finns i Azure-tjänster som stöder Tillgänglighetszoner. Om du vill använda funktionen pickZones med zonredundanta tjänster kan du se exemplen nedan.
Parametrar
| Parameter | Krävs | Typ | Beskrivning |
|---|---|---|---|
| providerNamespace | Ja | sträng | Resursproviderns namnområde för den resurstyp som ska söka efter zonstöd. |
| resourceType | Ja | sträng | Den resurstyp som ska söka efter zonstöd. |
| location | Ja | sträng | Den region som ska söka efter zonstöd. |
| numberOfZones | Inga | heltal | Antalet logiska zoner som ska returneras. Standard ä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 i flera zoner måste värdet vara mindre än eller lika med antalet zoner som stöds. |
| offset | Inga | heltal | 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 numberOfZones returnerar en resurstyp och region som stöder zoner följande matris:
[
"1"
]
När numberOfZones parametern är inställd på 3 returneras:
[
"1",
"2",
"3"
]
När resurstypen eller regionen inte stöder zoner returneras en tom matris. En tom matris returneras också för zonredundant tjänster.
[
]
Kommentarer
Det finns olika kategorier för Azure-tillgänglighetszoner – zonindetal och zonredundant. Funktionen pickZones kan användas för att returnera ett tillgänglighetszonnummer eller nummer för en zonindead resurs. För zonredundant tjänst (ZRS) returnerar funktionen en tom matris. Zonindeade resurser kan vanligtvis identifieras med hjälp av en zones egenskap i resurshuvudet. Zonredundant tjänster har olika sätt att identifiera och använda tillgänglighetszoner per resurs. Använd dokumentationen för en specifik tjänst för att fastställa kategorin för stöd för tillgänglighetszoner. Mer information 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 du funktionen pickZones() med en zonindead resurstyp, till exempel Microsoft.Storage/storageAccounts . Om svaret inte är tomt stöder regionen tillgänglighetszoner.
pickZones-exempel
Följande mall visar tre resultat för att använda funktionen pickZones.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"functions": [],
"variables": {},
"resources": [],
"outputs": {
"supported": {
"type": "array",
"value": "[pickZones('Microsoft.Compute', 'virtualMachines', 'westus2')]"
},
"notSupportedRegion": {
"type": "array",
"value": "[pickZones('Microsoft.Compute', 'virtualMachines', 'northcentralus')]"
},
"notSupportedType": {
"type": "array",
"value": "[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. I följande exempel anges ett värde för zonen baserat på tillgängligheten för zoner.
"zones": {
"value": "[if(not(empty(pickZones('Microsoft.Compute', 'virtualMachines', 'westus2'))), string(add(mod(copyIndex(),3),1)), json('null'))]"
},
I följande exempel visas hur du använder funktionen pickZones för att aktivera zonredundans för Cosmos DB.
"resources": [
{
"type": "Microsoft.DocumentDB/databaseAccounts",
"apiVersion": "2021-04-15",
"name": "[variables('accountName_var')]",
"location": "[parameters('location')]",
"kind": "GlobalDocumentDB",
"properties": {
"consistencyPolicy": "[variables('consistencyPolicy')[parameters('defaultConsistencyLevel')]]",
"locations": [
{
"locationName": "[parameters('primaryRegion')]",
"failoverPriority": 0,
"isZoneRedundant": "[if(empty(pickZones('Microsoft.Storage', 'storageAccounts', parameters('primaryRegion'))), bool('false'), bool('true'))]",
},
{
"locationName": "[parameters('secondaryRegion')]",
"failoverPriority": 1,
"isZoneRedundant": "[if(empty(pickZones('Microsoft.Storage', 'storageAccounts', parameters('secondaryRegion'))), bool('false'), bool('true'))]",
}
],
"databaseAccountOfferType": "Standard",
"enableAutomaticFailover": "[parameters('automaticFailover')]"
}
}
]
Leverantörer
Providers-funktionen är inaktuell. 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 mallen. Om du använder en dynamiskt returnerad API-version kan mallen brytas om egenskaperna ändras mellan olika versioner.
Referens
reference(resourceName or resourceIdentifier, [apiVersion], ['Full'])
Returnerar ett objekt som representerar en resurs körningstillstånd.
Parametrar
| Parameter | Krävs | Typ | Beskrivning |
|---|---|---|---|
| resourceName eller resourceIdentifier | Ja | sträng | Namn eller unik identifierare för en resurs. När du refererar till en resurs i den aktuella mallen anger du bara resursnamnet som en parameter. När du refererar till en tidigare distribuerad resurs eller när namnet på resursen är tvetydigt anger du resurs-ID:t. |
| apiVersion | Inga | sträng | API-version för den angivna resursen. Den här parametern krävs när resursen inte har etablerats i samma mall. I formatet yyyy-mm-dd. Giltiga API-versioner för din resurs finns i mallreferensen. |
| Fullständig | Inga | sträng | Värde som anger om det fullständiga resursobjektet ska returneras. Om du inte anger 'Full' returneras endast resursens egenskapsobjekt. Det fullständiga objektet innehåller värden som resurs-ID och plats. |
Returvärde
Varje resurstyp returnerar olika egenskaper för referensfunktionen. Funktionen returnerar inte ett enskilt, fördefinierat format. Dessutom skiljer sig det returnerade värdet baserat på värdet för 'Full' argumentet. Om du vill se egenskaperna för en resurstyp returnerar du objektet i avsnittet outputs (utdata) som i exemplet.
Kommentarer
Referensfunktionen hämtar körningstillståndet för antingen en tidigare distribuerad resurs eller en resurs som distribuerats i den aktuella mallen. Den här artikeln visar exempel för båda scenarierna.
Normalt använder du funktionen för att returnera ett visst värde från ett objekt, till exempel blobslutpunktens reference URI eller det fullständigt kvalificerade domännamnet.
"outputs": {
"BlobUri": {
"type": "string",
"value": "[reference(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))).primaryEndpoints.blob]"
},
"FQDN": {
"type": "string",
"value": "[reference(resourceId('Microsoft.Network/publicIPAddresses', parameters('ipAddressName'))).dnsSettings.fqdn]"
}
}
Använd 'Full' när du behöver resursvärden som inte ingår i egenskapsschemat. Om du till exempel vill ange åtkomstprinciper för nyckelvalvet hämtar du identitetsegenskaperna för en virtuell dator.
{
"type": "Microsoft.KeyVault/vaults",
"apiVersion": "2019-09-01",
"name": "vaultName",
"properties": {
"tenantId": "[subscription().tenantId]",
"accessPolicies": [
{
"tenantId": "[reference(resourceId('Microsoft.Compute/virtualMachines', variables('vmName')), '2019-03-01', 'Full').identity.tenantId]",
"objectId": "[reference(resourceId('Microsoft.Compute/virtualMachines', variables('vmName')), '2019-03-01', 'Full').identity.principalId]",
"permissions": {
"keys": [
"all"
],
"secrets": [
"all"
]
}
}
],
...
Giltiga användningsområden
Referensfunktionen kan bara användas i egenskaperna för en resursdefinition och utdataavsnittet i en mall eller distribution. När det används med egenskapens iterationkan du använda referensfunktionen för input eftersom uttrycket har tilldelats till resursegenskapen.
Du kan inte använda referensfunktionen för att ange värdet för egenskapen i count en kopieringsloop. Du kan använda för att ange andra egenskaper i loopen. Referensen blockeras för egenskapen count eftersom egenskapen måste fastställas innan referensfunktionen matchas.
Om du vill använda funktionen eller en funktion i utdataavsnittet i en kapslad mall måste du ange för att använda en inre omfångsutvärdering eller använda en länkad i stället för en reference list* expressionEvaluationOptions kapslad mall.
Om du använder funktionen i en resurs som har distribuerats villkorligt utvärderas funktionen även reference om resursen inte distribueras. Du får ett felmeddelande om reference funktionen refererar till en resurs som inte finns. Använd if funktionen för att se till att funktionen endast utvärderas när resursen distribueras. Se if-funktionen för en exempelmall som använder if och refererar till med en villkorligt distribuerad resurs.
Implicit beroende
Med hjälp av referensfunktionen deklarerar du implicit att en resurs är beroende av en annan resurs om den refererade resursen etableras inom samma mall och du refererar till resursen med dess namn (inte resurs-ID). Du behöver inte heller använda egenskapen dependsOn. Funktionen utvärderas inte förrän den refererade resursen har slutfört distributionen.
Resursnamn eller identifierare
När du refererar till en resurs som har distribuerats i samma mall anger du namnet på resursen.
"value": "[reference(parameters('storageAccountName'))]"
När du refererar till en resurs som inte har distribuerats i samma mall anger du resurs-ID:t och apiVersion .
"value": "[reference(resourceId(parameters('storageResourceGroup'), 'Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2018-07-01')]"
För att undvika tvetydighet om vilken resurs du refererar till kan du ange en fullständigt kvalificerad resursidentifierare.
"value": "[reference(resourceId('Microsoft.Network/publicIPAddresses', parameters('ipAddressName')))]"
När du skapar en fullständigt kvalificerad referens till en resurs är ordningen för att kombinera segment från typen och namnet inte bara en sammanfogning av de två. Efter namnområdet använder du i stället en sekvens av typ/namn-par från minst specifika till mest specifika:
{resource-provider-namespace}/{parent-resource-type}/{parent-resource-name}[/{child-resource-type}/{child-resource-name}]
Exempel:
Microsoft.Compute/virtualMachines/myVM/extensions/myExt är korrekt Microsoft.Compute/virtualMachines/extensions/myVM/myExt är inte korrekt
Använd funktionerna som beskrivs i det här dokumentet i stället för funktionen för att förenkla skapandet resourceId() av ett concat() resurs-ID.
Hämta hanterad identitet
Hanterade identiteter för Azure-resurser är tilläggsresurstyper som skapas implicit för vissa resurser. Eftersom den hanterade identiteten inte uttryckligen definieras i mallen måste du referera till resursen som identiteten tillämpas på. Använd Full för att hämta alla egenskaper, inklusive den implicit skapade identiteten.
Mönstret är:
"[reference(resourceId(<resource-provider-namespace>, <resource-name>), <API-version>, 'Full').Identity.propertyName]"
Om du till exempel vill hämta huvudnamns-ID:t för en hanterad identitet som tillämpas på en virtuell dator använder du:
"[reference(resourceId('Microsoft.Compute/virtualMachines', variables('vmName')),'2019-12-01', 'Full').identity.principalId]",
Om du vill hämta klient-ID:t för en hanterad identitet som tillämpas på en VM-skalningsuppsättning använder du:
"[reference(resourceId('Microsoft.Compute/virtualMachineScaleSets', variables('vmNodeType0Name')), 2019-12-01, 'Full').Identity.tenantId]"
Referensexempel
I följande exempel distribueras en resurs och den resursen refereras till.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountName": {
"type": "string"
}
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-04-01",
"name": "[parameters('storageAccountName')]",
"location": "[resourceGroup().location]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"tags": {},
"properties": {
}
}
],
"outputs": {
"referenceOutput": {
"type": "object",
"value": "[reference(parameters('storageAccountName'))]"
},
"fullReferenceOutput": {
"type": "object",
"value": "[reference(parameters('storageAccountName'), '2021-04-01', 'Full')]"
}
}
}
I föregående exempel returneras de två objekten. Egenskapsobjektet har följande format:
{
"creationTime": "2017-10-09T18:55:40.5863736Z",
"primaryEndpoints": {
"blob": "https://examplestorage.blob.core.windows.net/",
"file": "https://examplestorage.file.core.windows.net/",
"queue": "https://examplestorage.queue.core.windows.net/",
"table": "https://examplestorage.table.core.windows.net/"
},
"primaryLocation": "southcentralus",
"provisioningState": "Succeeded",
"statusOfPrimary": "available",
"supportsHttpsTrafficOnly": false
}
Det fullständiga objektet har följande format:
{
"apiVersion":"2021-04-01",
"location":"southcentralus",
"sku": {
"name":"Standard_LRS",
"tier":"Standard"
},
"tags":{},
"kind":"Storage",
"properties": {
"creationTime":"2017-10-09T18:55:40.5863736Z",
"primaryEndpoints": {
"blob":"https://examplestorage.blob.core.windows.net/",
"file":"https://examplestorage.file.core.windows.net/",
"queue":"https://examplestorage.queue.core.windows.net/",
"table":"https://examplestorage.table.core.windows.net/"
},
"primaryLocation":"southcentralus",
"provisioningState":"Succeeded",
"statusOfPrimary":"available",
"supportsHttpsTrafficOnly":false
},
"subscriptionId":"<subscription-id>",
"resourceGroupName":"functionexamplegroup",
"resourceId":"Microsoft.Storage/storageAccounts/examplestorage",
"referenceApiVersion":"2021-04-01",
"condition":true,
"isConditionTrue":true,
"isTemplateResource":false,
"isAction":false,
"provisioningOperation":"Read"
}
Följande exempelmall refererar till ett lagringskonto som inte har distribuerats i den här mallen. Lagringskontot finns redan i samma prenumeration.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageResourceGroup": {
"type": "string"
},
"storageAccountName": {
"type": "string"
}
},
"resources": [],
"outputs": {
"ExistingStorage": {
"type": "object",
"value": "[reference(resourceId(parameters('storageResourceGroup'), 'Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2021-04-01')]"
}
}
}
resourceGroup
Se omfångsfunktionen resourceGroup.
resourceId
resourceId([subscriptionId], [resourceGroupName], resourceType, resourceName1, [resourceName2], ...)
Returnerar den unika identifieraren för en resurs. Du använder den här funktionen när resursnamnet är tvetydigt eller inte har etablerats i samma mall. Formatet för den returnerade identifieraren varierar beroende på om distributionen sker i omfånget för en resursgrupp, prenumeration, hanteringsgrupp eller klientorganisation.
Parametrar
| Parameter | Krävs | Typ | Beskrivning |
|---|---|---|---|
| subscriptionId | Inga | sträng (i GUID-format) | Standardvärdet är den aktuella prenumerationen. Ange det här värdet när du behöver hämta en resurs i en annan prenumeration. Ange bara det här värdet när du distribuerar i omfånget för en resursgrupp eller prenumeration. |
| resourceGroupName | Inga | sträng | Standardvärdet är den aktuella resursgruppen. Ange det här värdet när du behöver hämta en resurs i en annan resursgrupp. Ange bara det här värdet när du distribuerar i omfånget för en resursgrupp. |
| resourceType | Ja | sträng | Typ av resurs, inklusive namnområdet för resursprovidern. |
| resourceName1 | Ja | sträng | Namnet på resursen. |
| resourceName2 | Inga | sträng | Nästa resursnamnssegment, om det behövs. |
Fortsätt att lägga till resursnamn som parametrar när resurstypen innehåller fler segment.
Returvärde
När mallen distribueras i omfånget för en resursgrupp returneras resurs-ID:t i följande format:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
Du kan använda funktionen resourceId för andra distributionsomfång, men formatet för ID:t ändras.
Om du använder resourceId när du distribuerar till en prenumeration returneras resurs-ID:t i följande format:
/subscriptions/{subscriptionId}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
Om du använder resourceId när du distribuerar till en hanteringsgrupp eller klientorganisation returneras resurs-ID:t i följande format:
/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
För att undvika förvirring rekommenderar vi att du inte använder när du arbetar med resurser som distribuerats till resourceId prenumerationen, hanteringsgruppen eller klientorganisationen. Använd i stället den ID-funktion som är utformad för omfånget.
För resurser på prenumerationsnivåanvänder du funktionen subscriptionResourceId.
För resurser på hanteringsgruppsnivåanvänder du funktionen extensionResourceId för att referera till en resurs som implementeras som ett tillägg till en hanteringsgrupp. Anpassade principdefinitioner som distribueras till en hanteringsgrupp är till exempel tillägg av hanteringsgruppen. Använd funktionen tenantResourceId för att referera till resurser som distribueras till klientorganisationen men som är tillgängliga i hanteringsgruppen. Till exempel implementeras inbyggda principdefinitioner som resurser på klientorganisationsnivå.
För resurser på klientorganisationsnivåanvänder du funktionen tenantResourceId. Använd tenantResourceId för inbyggda principdefinitioner eftersom de implementeras på klientorganisationsnivå.
Kommentarer
Antalet parametrar som du anger varierar beroende på om resursen är en överordnad eller underordnad resurs och om resursen finns i samma prenumeration eller resursgrupp.
Om du vill hämta resurs-ID:t för en överordnad resurs i samma prenumeration och resursgrupp anger du typen och namnet på resursen.
"[resourceId('Microsoft.ServiceBus/namespaces', 'namespace1')]"
Var uppmärksam på antalet segment i resurstypen för att hämta resurs-ID:t för en underordnad resurs. Ange ett resursnamn för varje segment av resurstypen. Namnet på segmentet motsvarar den resurs som finns för den delen av hierarkin.
"[resourceId('Microsoft.ServiceBus/namespaces/queues/authorizationRules', 'namespace1', 'queue1', 'auth1')]"
Om du vill hämta resurs-ID:t för en resurs i samma prenumeration men i en annan resursgrupp anger du resursgruppens namn.
"[resourceId('otherResourceGroup', 'Microsoft.Storage/storageAccounts', 'examplestorage')]"
Om du vill hämta resurs-ID:t för en resurs i en annan prenumeration och resursgrupp anger du prenumerations-ID:t och resursgruppens namn.
"[resourceId('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', 'otherResourceGroup', 'Microsoft.Storage/storageAccounts','examplestorage')]"
Ofta behöver du använda den här funktionen när du använder ett lagringskonto eller ett virtuellt nätverk i en alternativ resursgrupp. I följande exempel visas hur en resurs från en extern resursgrupp enkelt kan användas:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string"
},
"virtualNetworkName": {
"type": "string"
},
"virtualNetworkResourceGroup": {
"type": "string"
},
"subnet1Name": {
"type": "string"
},
"nicName": {
"type": "string"
}
},
"variables": {
"subnet1Ref": "[resourceId(parameters('virtualNetworkResourceGroup'), 'Microsoft.Network/virtualNetworks/subnets', parameters('virtualNetworkName'), parameters('subnet1Name'))]"
},
"resources": [
{
"type": "Microsoft.Network/networkInterfaces",
"apiVersion": "2021-02-01",
"name": "[parameters('nicName')]",
"location": "[parameters('location')]",
"properties": {
"ipConfigurations": [
{
"name": "ipconfig1",
"properties": {
"privateIPAllocationMethod": "Dynamic",
"subnet": {
"id": "[variables('subnet1Ref')]"
}
}
}
]
}
}
]
}
Exempel på resurs-ID
I följande exempel returneras resurs-ID:t för ett lagringskonto i resursgruppen:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [],
"outputs": {
"sameRGOutput": {
"type": "string",
"value": "[resourceId('Microsoft.Storage/storageAccounts','examplestorage')]"
},
"differentRGOutput": {
"type": "string",
"value": "[resourceId('otherResourceGroup', 'Microsoft.Storage/storageAccounts','examplestorage')]"
},
"differentSubOutput": {
"type": "string",
"value": "[resourceId('11111111-1111-1111-1111-111111111111', 'otherResourceGroup', 'Microsoft.Storage/storageAccounts','examplestorage')]"
},
"nestedResourceOutput": {
"type": "string",
"value": "[resourceId('Microsoft.SQL/servers/databases', 'serverName', 'databaseName')]"
}
}
}
Utdata från föregående exempel med standardvärdena är:
| Namn | Typ | Värde |
|---|---|---|
| sameRGOutput | Sträng | /subscriptions/{current-sub-id}/resourceGroups/examplegroup/providers/Microsoft. Storage/storageAccounts/examplestorage |
| differentRGOutput | Sträng | /subscriptions/{current-sub-id}/resourceGroups/otherResourceGroup/providers/Microsoft. Storage/storageAccounts/examplestorage |
| differentSubOutput | Sträng | /subscriptions/11111111-1111-1111-1111-11111111111/resourceGroups/otherResourceGroup/providers/Microsoft. Storage/storageAccounts/examplestorage |
| nestedResourceOutput | Sträng | /subscriptions/{current-sub-id}/resourceGroups/examplegroup/providers/Microsoft. SQL/servers/serverName/databases/databaseName |
prenumeration
Se prenumerationsomfångsfunktionen.
subscriptionResourceId
subscriptionResourceId([subscriptionId], resourceType, resourceName1, [resourceName2], ...)
Returnerar den unika identifieraren för en resurs som distribueras på prenumerationsnivå.
Parametrar
| Parameter | Krävs | Typ | Beskrivning |
|---|---|---|---|
| subscriptionId | Inga | sträng (i GUID-format) | Standardvärdet är den aktuella prenumerationen. Ange det här värdet när du behöver hämta en resurs i en annan prenumeration. |
| resourceType | Ja | sträng | Typ av resurs, inklusive namnområdet för resursprovidern. |
| resourceName1 | Ja | sträng | Namnet på resursen. |
| resourceName2 | Inga | sträng | Nästa resursnamnssegment, om det behövs. |
Fortsätt att lägga till resursnamn som parametrar när resurstypen innehåller fler segment.
Returvärde
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:t för resurser som distribueras till prenumerationen 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 resursgruppsvärde.
subscriptionResourceID-exempel
Följande mall tilldelar en inbyggd roll. Du kan distribuera den till antingen en resursgrupp eller prenumeration. Den använder funktionen subscriptionResourceId för att hämta resurs-ID:t för inbyggda roller.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"principalId": {
"type": "string",
"metadata": {
"description": "The principal to assign the role to"
}
},
"builtInRoleType": {
"type": "string",
"allowedValues": [
"Owner",
"Contributor",
"Reader"
],
"metadata": {
"description": "Built-in role to assign"
}
},
"roleNameGuid": {
"type": "string",
"defaultValue": "[newGuid()]",
"metadata": {
"description": "A new GUID used to identify the role assignment"
}
}
},
"variables": {
"Owner": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '8e3af657-a8ff-443c-a75c-2fe8c4bcb635')]",
"Contributor": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')]",
"Reader": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'acdd72a7-3385-48ef-bd42-f606fba81ae7')]"
},
"resources": [
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2020-10-01-preview",
"name": "[parameters('roleNameGuid')]",
"properties": {
"roleDefinitionId": "[variables(parameters('builtInRoleType'))]",
"principalId": "[parameters('principalId')]"
}
}
]
}
tenantResourceId
tenantResourceId(resourceType, resourceName1, [resourceName2], ...)
Returnerar den unika identifieraren för en resurs som distribueras på klientorganisationsnivå.
Parametrar
| Parameter | Krävs | Typ | Beskrivning |
|---|---|---|---|
| resourceType | Ja | sträng | Typ av resurs, inklusive namnområdet för resursprovidern. |
| resourceName1 | Ja | sträng | Namnet på resursen. |
| resourceName2 | Inga | sträng | Nästa resursnamnssegment, om det behövs. |
Fortsätt att lägga till resursnamn som parametrar när resurstypen innehåller fler segment.
Returvärde
Identifieraren returneras i följande format:
/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
Kommentarer
Du använder den här funktionen för att hämta resurs-ID:t för en resurs som distribueras till klientorganisationen. Det returnerade ID:t skiljer sig från de värden som returneras av andra resurs-ID-funktioner genom att inte inkludera resursgrupps- eller prenumerationsvärden.
tenantResourceId-exempel
Inbyggda principdefinitioner är resurser på klientorganisationsnivå. Om du vill distribuera en principtilldelning som refererar till en inbyggd principdefinition använder du tenantResourceId funktionen .
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"policyDefinitionID": {
"type": "string",
"defaultValue": "0a914e76-4921-4c19-b460-a2d36003525a",
"metadata": {
"description": "Specifies the ID of the policy definition or policy set definition being assigned."
}
},
"policyAssignmentName": {
"type": "string",
"defaultValue": "[guid(parameters('policyDefinitionID'), resourceGroup().name)]",
"metadata": {
"description": "Specifies the name of the policy assignment, can be used defined or an idempotent name as the defaultValue provides."
}
}
},
"resources": [
{
"type": "Microsoft.Authorization/policyAssignments",
"name": "[parameters('policyAssignmentName')]",
"apiVersion": "2020-09-01",
"properties": {
"scope": "[subscriptionResourceId('Microsoft.Resources/resourceGroups', resourceGroup().name)]",
"policyDefinitionId": "[tenantResourceId('Microsoft.Authorization/policyDefinitions', parameters('policyDefinitionID'))]"
}
}
]
}
Nästa steg
- En beskrivning av avsnitten i en ARM-mall finns i Förstå strukturen och syntaxen för ARM-mallar.
- Information om hur du sammanfogar flera mallar finns i Använda länkade och kapslade mallar när du distribuerar Azure-resurser.
- Information om hur du itererar ett angivet antal gånger när du skapar en typ av resurs finns i Resurs-iteration i ARM-mallar.
- Information om hur du distribuerar mallen som du har skapat finns i Distribuera resurser med ARM-mallar och Azure PowerShell.