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

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 Operation
    
  • Anvä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