Funkce prostředků pro šablony ARM

Správce prostředků poskytuje následující funkce pro získání hodnot prostředků ve vaší šabloně Azure Resource Manager (šablona ARM):

Chcete-li získat hodnoty z parametrů, proměnných nebo aktuálního nasazení, přečtěte si téma funkce hodnot nasazení.

Pokud chcete získat hodnoty rozsahu nasazení, přečtěte si téma funkce oboru.

extensionResourceId

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

Vrátí ID prostředku pro prostředek rozšíření, což je typ prostředku, který se použije na jiný prostředek, aby se mohl přidat k jeho funkcím.

Parametry

Parametr Povinné Typ Popis
baseResourceId Ano řetězec ID prostředku prostředku, na který se prostředek rozšíření používá
resourceType Ano řetězec Typ prostředku rozšíření včetně oboru názvů poskytovatele prostředků
resourceName1 Ano řetězec Název prostředku rozšíření.
resourceName2 Ne řetězec Další segment názvu prostředku (v případě potřeby).

Pokračujte v přidávání názvů prostředků jako parametrů, pokud typ prostředku obsahuje více segmentů.

Vrácená hodnota

Základní formát ID prostředku vrácený touto funkcí je:

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

Segment oboru se liší podle rozšiřujícího základního prostředku. ID předplatného má například různé segmenty, než je ID pro skupinu prostředků.

Pokud se prostředek rozšíření použije u prostředku, ID prostředku se vrátí v následujícím formátu:

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

Pokud se prostředek rozšíření aplikuje na skupinu prostředků, vrácený formát:

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

Příklad použití této funkce se skupinou prostředků je uveden v následující části.

Pokud se prostředek rozšíření použije u předplatného, vrácený formát:

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

Pokud je prostředek rozšíření použit pro skupinu pro správu, vrácený formát:

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

Příklad použití této funkce se skupinou pro správu je uveden v následující části.

Příklad extensionResourceId

Následující příklad vrátí ID prostředku pro zámek skupiny prostředků.

{
  "$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'))]"
    }
  }
}

Vlastní definice zásad nasazená do skupiny pro správu je implementována jako prostředek rozšíření. Chcete-li vytvořit a přiřadit zásadu, nasaďte následující šablonu do skupiny pro správu.

{
  "$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'))]"
      ]
    }
  ]
}

Předdefinované definice zásad jsou prostředky na úrovni tenanta. Příklad nasazení předdefinované definice zásad najdete v tématu tenantResourceId.

seznamu

list{Value}(resourceName or resourceIdentifier, apiVersion, functionValues)

Syntaxe této funkce se liší podle názvu operací seznamu. Každá implementace vrací hodnoty pro typ prostředku, který podporuje operaci list. Název operace musí začínat řetězcem list a může mít příponu. Některé běžné použití jsou list , listKeys , listKeyValue a listSecrets .

Parametry

Parametr Povinné Typ Popis
resourceName nebo resourceIdentifier Ano řetězec Jedinečný identifikátor prostředku
apiVersion Ano řetězec Verze rozhraní API stavu modulu runtime prostředku Obvykle ve formátu yyyy-MM-DD.
functionValues Ne object Objekt, který má hodnoty pro funkci. Tento objekt Poskytněte jenom pro funkce, které podporují příjem objektu s hodnotami parametrů, jako je například listAccountSas v účtu úložiště. Příklad předávání hodnot funkcí je uveden v tomto článku.

Platná použití

Funkce seznamu se dá použít ve vlastnostech definice prostředků. Nepoužívejte funkci seznamu, která zveřejňuje citlivé informace v části výstupy šablony. Výstupní hodnoty jsou uložené v historii nasazení a můžou je načíst uživatel se zlými úmysly.

Při použití s iterací vlastnostimůžete použít funkce seznamu, input protože výraz je přiřazen vlastnosti prostředku. Nelze je použít s, count protože počet musí být určen před vyřešením funkce seznamu.

Implementace

Možná použití seznamu * jsou uvedena v následující tabulce.

Typ prostředku Název funkce
Microsoft. addons/supportProviders listsupportplaninfo
Microsoft. AnalysisServices/servery listGatewayStatus
Microsoft. ApiManagement/Service/authorizationServers listSecrets
Microsoft. ApiManagement/Service/gateways Klíče listkey
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 (klíče seznamu)
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/registry listBuildSourceUploadUrl
Microsoft.ContainerRegistry/registry listCredentials
Microsoft.ContainerRegistry/registry seznam položek
Microsoft.ContainerRegistry/registries/agentpools listQueueStatus
Microsoft.ContainerRegistry/registries/buildTasks listSourceRepositoryProperties
Microsoft.ContainerRegistry/registries/buildTasks/steps listBuildArguments
Microsoft.ContainerRegistry/registries/taskruns listDetails
Microsoft.ContainerRegistry/registry/webhooks listEvents
Microsoft.ContainerRegistry/registries/runs listLogSasUrl
Microsoft.ContainerRegistry/registry/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 (klíče seznamu)
Microsoft.Devices/iotHubs/iotHubKeys listkeys (klíče seznamu)
Microsoft.Devices/provisioningServices/keys listkeys (klíče seznamu)
Microsoft.Devices/provisioningServices listkeys (klíče seznamu)
Microsoft.DevTestLab/labs Soubory ListVhds
Microsoft.DevTestLab/labs/schedules ListApplicable
Microsoft.DevTestLab/labs/users/serviceFabrics SeznamApplicableSchedules
Microsoft.DevTestLab/labs/virtualMachines SeznamApplicableSchedules
Microsoft.DocumentDB/databaseAccounts listConnectionStrings
Microsoft.DocumentDB/databaseAccounts listKeys
Microsoft.DocumentDB/databaseAccounts/notebookWorkspaces listConnectionInfo
Microsoft.DomainRegistration listDomainRecommendations (doporučení k doméně seznamu)
Microsoft.DomainRegistration/topLevelDomains listAgreements (seznam prostředků)
Microsoft.EventGrid/domains listKeys
Microsoft.EventGrid/topics listKeys
Microsoft.EventHub/namespaces/authorizationRules klíče listkey
Microsoft. EventHub/obory názvů/disasterRecoveryConfigs/autorizačních pravidel klíče listkey
Microsoft. EventHub/obory názvů/eventhubs/autorizačních pravidel klíče listkey
Microsoft. ImportExport/Jobs listBitLockerKeys
Microsoft. Kusto/clustery/databáze ListPrincipals
Microsoft. LabServices/uživatelé ListEnvironments
Microsoft. LabServices/uživatelé 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/partneři listContentCallbackUrl
Microsoft. Logic/integrationAccounts/schemas listContentCallbackUrl
Microsoft. Logic/Workflows listCallbackUrl
Microsoft. Logic/Workflows listSwagger
Microsoft. Logic/Workflows/běhy/Actions listExpressionTraces
Microsoft. Logic/Workflows/běhy/Actions/opakování listExpressionTraces
Microsoft. Logic/Workflows/Triggers listCallbackUrl
Microsoft. Logic/Workflows/Versions/Triggers listCallbackUrl
Microsoft. MachineLearning/WebServices klíče listkey
Microsoft. MachineLearning/pracovní prostory listworkspacekeys
Microsoft. MachineLearningServices/pracovní prostory/výpočetní služby Klíče listkey
Microsoft. MachineLearningServices/pracovní prostory/výpočetní služby listNodes
Microsoft. MachineLearningServices/pracovní prostory Klíče listkey
Microsoft. Mapy/accounts Klíče listkey
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/obory názvů/autorizačních pravidel klíče listkey
Microsoft. NotificationHubs/obory názvů/NotificationHubs/autorizačních pravidel klíče listkey
Microsoft. OperationalInsights/pracovní prostory list
Microsoft. OperationalInsights/pracovní prostory Klíče listkey
Microsoft. PolicyInsights/nápravy listDeployments
Microsoft. RedHatOpenShift/openShiftClusters listCredentials
Microsoft. Relay/obory názvů/autorizačních pravidel klíče listkey
Microsoft. Relay/obory názvů/disasterRecoveryConfigs/autorizačních pravidel klíče listkey
Microsoft. Relay/obory názvů/HybridConnections/autorizačních pravidel klíče listkey
Microsoft. Relay/obory názvů/WcfRelays/autorizačních pravidel klíče listkey
Microsoft. Search/searchServices listAdminKeys
Microsoft. Search/searchServices listQueryKeys
Microsoft. ServiceBus/obory názvů/autorizačních pravidel klíče listkey
Microsoft. ServiceBus/obory názvů/disasterRecoveryConfigs/autorizačních pravidel klíče listkey
Microsoft. ServiceBus/obory názvů/Queues/autorizačních pravidel klíče listkey
Microsoft. ServiceBus/obory názvů/témata/autorizačních pravidel klíče listkey
Microsoft. SignalRService/Signaler klíče listkey
Microsoft. Storage/storageAccounts listAccountSas
Microsoft. Storage/storageAccounts klíče listkey
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 Stav seznamu
microsoft.web/connections listconsentlinks
Microsoft.Web/customApis listWsdlInterfaces
microsoft.web/locations listwsdlinterfaces
microsoft.web/apimanagementaccounts/apis/connections listconnectionkeys
microsoft.web/apimanagementaccounts/apis/connections listSecrets
microsoft.web/sites/backups list
Microsoft.Web/sites/config list
microsoft.web/sites/functions listkeys (klíče seznamu)
microsoft.web/sites/functions listSecrets
microsoft.web/sites/hybridconnectionnamespaces/relays listkeys (klíče seznamu)
microsoft.web/sites listsyncfunctiontriggerstatus
microsoft.web/sites/slots/functions listSecrets
microsoft.web/sites/slots/backups list
Microsoft.Web/sites/slots/config list
microsoft.web/sites/slots/functions listSecrets

Pokud chcete zjistit, které typy prostředků mají operaci list, máte následující možnosti:

  • Podívejte se REST API operací poskytovatele prostředků a vyhledejte operace seznamu. Například účty úložiště mají operaci listKeys.

  • Použijte rutinu PowerShellu Get-AzProviderOperation. Následující příklad načte všechny operace se seznamem pro účty úložiště:

    Get-AzProviderOperation -OperationSearchString "Microsoft.Storage/*" | where {$_.Operation -like "*list*"} | FT Operation
    
  • Pomocí následujícího příkazu Azure CLI můžete filtrovat pouze operace seznamu:

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

Vrácená hodnota

Vrácený objekt se liší podle funkce list, kterou používáte. Například listKeys pro účet úložiště vrátí následující formát:

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

Jiné funkce seznamu mají různé návratové formáty. Pokud chcete zobrazit formát funkce, zahrnovat ji do části výstupů, jak je znázorněno v příkladu šablony.

Poznámky

Prostředek můžete zadat pomocí názvu prostředku nebo funkce resourceId. Při použití funkce list ve stejné šabloně, která nasazuje odkazovaný prostředek, použijte název prostředku.

Pokud použijete funkci v prostředku, který je nasazený podmíněně, funkce se vyhodnotí i v případě, že prostředek list není nasazený. Pokud funkce odkazuje na list prostředek, který neexistuje, zobrazí se chyba. Pomocí funkce if se ujistěte, že se funkce vyhodnocuje pouze při nasazování prostředku. Ukázkovou šablonu, která používá if a se seznamem podmíněně nasazených prostředků, najdete ve funkci if.

Příklad seznamu

Následující příklad používá listKeys při nastavování hodnoty pro skripty nasazení.

"storageAccountSettings": {
  "storageAccountName": "[variables('storageAccountName')]",
  "storageAccountKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), '2019-06-01').keys[0].value]"
}

Další příklad ukazuje funkci list, která přebírá parametr . V tomto případě je funkce listAccountSas. Předejte objekt po dobu vypršení platnosti. Doba vypršení platnosti musí být v budoucnu.

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

Určuje, jestli typ prostředku podporuje zóny pro zadané umístění nebo oblast. Tato funkce podporuje pouze zónové prostředky, zónově redundantní služby vrátí prázdné pole. Další informace najdete v tématu Služby Azure, které podporují Zóny dostupnosti. Pokud chcete použít funkci pickZones se zónově redundantními službami, podívejte se na následující příklady.

Parametry

Parametr Povinné Typ Popis
providerNamespace Ano řetězec Obor názvů poskytovatele prostředků pro typ prostředku, ve které se má zkontrolovat podpora zón.
resourceType Ano řetězec Typ prostředku, který se má zkontrolovat pro podporu zón.
location Ano řetězec Oblast, ve které se má zkontrolovat podpora zón.
numberOfZones Ne integer Počet logických zón, které se má vrátit Výchozí hodnota je 1. Číslo musí být kladné celé číslo od 1 do 3. Pro prostředky s jednou zónou použijte 1. U prostředků s více zónami musí být hodnota menší nebo rovna počtu podporovaných zón.
posun Ne integer Posun od počáteční logické zóny. Funkce vrátí chybu, pokud posun plus numberOfZones překračuje počet podporovaných zón.

Vrácená hodnota

Pole s podporovanými zónami. Při použití výchozích hodnot pro posun a numberOfZones typ prostředku a oblast, která podporuje zóny, vrátí následující pole:

[
    "1"
]

Pokud numberOfZones je parametr nastaven na hodnotu 3, vrátí:

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

Pokud typ prostředku nebo oblast nepodporuje zóny, bude vráceno prázdné pole. Pro redundantní služby zóny se vrátí také prázdné pole.

[
]

Poznámky

Existují různé kategorie pro Zóny dostupnosti Azure-Zona a redundantní v zóně. Funkci pickZones lze použít k vrácení čísla nebo čísel zóny dostupnosti pro prostředek Zona. Pro zónu redundantní služby (ZRS) vrátí funkce prázdné pole. Prostředky oblast lze obvykle identifikovat pomocí zones vlastnosti v hlavičce prostředku. Redundantní služby zóny mají různé možnosti pro identifikaci a používání zón dostupnosti na prostředek. k určení kategorie podpory zón dostupnosti použijte dokumentaci ke konkrétní službě. Další informace najdete v tématu služby Azure, které podporují zóny dostupnosti.

Chcete-li zjistit, zda daná oblast nebo umístění Azure podporuje zóny dostupnosti, zavolejte funkci pickZones () s typem prostředku Zona, například Microsoft.Storage/storageAccounts . Pokud je odpověď neprázdná, oblast podporuje zóny dostupnosti.

Příklad pickZones

Následující šablona ukazuje tři výsledky pro použití funkce 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')]"
    }
  }
}

Výstup z předchozích příkladů vrátí tři pole.

Název Typ Hodnota
Podporuje se array ["1"]
notSupportedRegion array []
notSupportedType array []

Pomocí odpovědi z pickZones můžete určit, jestli se má pro zóny zadat hodnota null, nebo přiřadit virtuální počítače k různým zónám. Následující příklad nastaví hodnotu pro zónu na základě dostupnosti zón.

"zones": {
  "value": "[if(not(empty(pickZones('Microsoft.Compute', 'virtualMachines', 'westus2'))), string(add(mod(copyIndex(),3),1)), json('null'))]"
},

následující příklad ukazuje, jak pomocí funkce pickZones povolit redundanci zóny pro 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')]"
    }
  }
]

dodavateli

Funkce Providers je zastaralá. Už ho nedoporučujeme používat. Pokud jste tuto funkci použili k získání verze rozhraní API pro poskytovatele prostředků, doporučujeme v šabloně zadat konkrétní verzi rozhraní API. Když použijete dynamicky vrácenou verzi rozhraní API, může se vaše šablona přerušit, pokud se změní vlastnosti mezi verzemi.

reference

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

Vrátí objekt představující běhový stav prostředku.

Parametry

Parametr Povinné Typ Popis
resourceName nebo resourceIdentifier Ano řetězec Název nebo jedinečný identifikátor prostředku Při odkazování na prostředek v aktuální šabloně zadejte jako parametr jenom název prostředku. Když odkazujete na dříve nasazený prostředek nebo pokud je název prostředku dvojznačný, zadejte ID prostředku.
apiVersion Ne řetězec Verze rozhraní API zadaného prostředku Tento parametr je vyžadován, pokud prostředek není zřízen v rámci stejné šablony. Obvykle ve formátu yyyy-MM-DD. Platné verze rozhraní API pro váš prostředek naleznete v tématu Reference k šabloně.
Kompletní Ne řetězec Hodnota, která určuje, zda má být vrácen úplný objekt prostředku. Pokud nezadáte 'Full' , vrátí se pouze objekt vlastnosti prostředku. Úplný objekt obsahuje hodnoty, jako je ID a umístění prostředku.

Vrácená hodnota

Každý typ prostředku vrátí různé vlastnosti referenční funkce. Funkce nevrací jeden, předdefinovaný formát. Vrácená hodnota se také liší v závislosti na hodnotě 'Full' argumentu. Chcete-li zobrazit vlastnosti pro typ prostředku, vraťte objekt v části výstupy, jak je znázorněno v příkladu.

Poznámky

Odkazovaná funkce načte běhový stav buď dříve nasazeného prostředku, nebo prostředku nasazeného v aktuální šabloně. Tento článek ukazuje příklady pro oba scénáře.

Obvykle použijete reference funkci k vrácení konkrétní hodnoty z objektu, jako je například identifikátor URI koncového bodu objektu BLOB nebo plně kvalifikovaný název domény.

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

Použijte 'Full' v případě, že potřebujete hodnoty prostředků, které nejsou součástí schématu vlastností. Pokud třeba chcete nastavit zásady přístupu trezoru klíčů, Získejte vlastnosti identity pro virtuální počítač.

{
  "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"
          ]
        }
      }
    ],
    ...

Platná použití

Odkazovaná funkce se dá použít jenom ve vlastnostech definice prostředků a v části výstupy šablony nebo nasazení. Při použití s iterací vlastnostimůžete použít referenční funkci pro, input protože výraz je přiřazen vlastnosti prostředku.

Pomocí referenční funkce nelze nastavit hodnotu count vlastnosti ve smyčce kopírování. Můžete použít k nastavení dalších vlastností ve smyčce. Odkaz je blokován pro vlastnost Count, protože tato vlastnost musí být určena před vyřešením Referenční funkce.

Chcete-li použít reference funkci nebo jakoukoliv list* funkci v sekci výstupy vnořené šablony, je nutné nastavit, expressionEvaluationOptions aby používalo vnitřní vyhodnocení oboru , nebo použít odkaz namísto vnořené šablony.

Použijete-li reference funkci v prostředku, který je podmíněně nasazen, je funkce vyhodnocena i v případě, že prostředek není nasazen. Pokud reference funkce odkazuje na prostředek, který neexistuje, zobrazí se chyba. Pomocí funkce se ujistěte if , že je funkce vyhodnocena pouze při nasazení prostředku. Podívejte se na funkci IF pro ukázkovou šablonu, která používá if a odkaz s podmíněně nasazeným prostředkem.

Implicitní závislost

Pomocí referenční funkce implicitně deklarujete, že jeden prostředek závisí na jiném prostředku, je-li odkazovaný prostředek zřízen ve stejné šabloně a odkazujete na prostředek podle jeho názvu (nikoli ID prostředku). Nemusíte také používat vlastnost dependsOn. Funkce není vyhodnocena, dokud není dokončeno nasazení odkazovaného prostředku.

Název nebo identifikátor prostředku

Když odkazujete na prostředek, který je nasazený ve stejné šabloně, zadejte název prostředku.

"value": "[reference(parameters('storageAccountName'))]"

Když odkazujete na prostředek, který není nasazený ve stejné šabloně, zadejte ID prostředku a apiVersion .

"value": "[reference(resourceId(parameters('storageResourceGroup'), 'Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2018-07-01')]"

Aby nedocházelo k nejednoznačnosti prostředků, na které odkazujete, můžete zadat plně kvalifikovaný identifikátor prostředku.

"value": "[reference(resourceId('Microsoft.Network/publicIPAddresses', parameters('ipAddressName')))]"

Při sestavování plně kvalifikovaného odkazu na prostředek, pořadí pro kombinování segmentů z typu a název není pouhým zřetězením obou. Místo toho je nutné po oboru názvů použít sekvenci dvojic typů a názvů z nejméně specifických na nejvíc:

{resource-provider-namespace}/{parent-resource-type}/{parent-resource-name}[/{child-resource-type}/{child-resource-name}]

Například:

Microsoft.Compute/virtualMachines/myVM/extensions/myExt je správné, není Microsoft.Compute/virtualMachines/extensions/myVM/myExt správné.

Pro zjednodušení vytváření ID prostředku použijte resourceId() funkce popsané v tomto dokumentu namísto concat() funkce.

Získat spravovanou identitu

Spravované identity pro prostředky Azure jsou typy prostředků rozšíření , které se pro některé prostředky vytvoří implicitně. Vzhledem k tomu, že spravovaná identita není v šabloně explicitně definovaná, musíte odkazovat na prostředek, na který se identita použije. Pomocí Full získáte všechny vlastnosti, včetně implicitně vytvořené identity.

Vzor je následující:

"[reference(resourceId(<resource-provider-namespace>, <resource-name>), <API-version>, 'Full').Identity.propertyName]"

Pokud například chcete získat ID objektu zabezpečení pro spravovanou identitu použitou na virtuální počítač, použijte:

"[reference(resourceId('Microsoft.Compute/virtualMachines', variables('vmName')),'2019-12-01', 'Full').identity.principalId]",

Nebo pokud chcete získat ID tenanta pro spravovanou identitu, která se použije na škálovací sadu virtuálních počítačů, použijte:

"[reference(resourceId('Microsoft.Compute/virtualMachineScaleSets',  variables('vmNodeType0Name')), 2019-12-01, 'Full').Identity.tenantId]"

Příklad odkazu

Následující příklad nasadí prostředek a odkazuje na tento prostředek.

{
  "$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')]"
    }
  }
}

Předchozí příklad vrátí dva objekty. Objekt properties má následující formát:

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

Celý objekt je v následujícím formátu:

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

Následující příklad šablony odkazuje na účet úložiště, který není v této šabloně nasazený. Účet úložiště již existuje ve stejném předplatném.

{
  "$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

Viz funkce oboru resourceGroup.

resourceId

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

Vrátí jedinečný identifikátor prostředku. Tuto funkci použijete, pokud je název prostředku nejednoznačný nebo není v rámci stejné šablony zřízen. Formát vráceného identifikátoru se liší v závislosti na tom, jestli nasazení probíhá v oboru skupiny prostředků, předplatného, skupiny pro správu nebo tenanta.

Parametry

Parametr Povinné Typ Popis
subscriptionId Ne string (ve formátu GUID) Výchozí hodnota je aktuální předplatné. Tuto hodnotu zadejte, když potřebujete načíst prostředek v jiném předplatném. Tuto hodnotu zadejte pouze při nasazování v oboru skupiny prostředků nebo předplatného.
resourceGroupName Ne řetězec Výchozí hodnota je aktuální skupina prostředků. Tuto hodnotu zadejte, když potřebujete načíst prostředek v jiné skupině prostředků. Tuto hodnotu zadejte pouze při nasazování v oboru skupiny prostředků.
resourceType Ano řetězec Typ prostředku, včetně oboru názvů poskytovatele prostředků.
název_prostředku1 Ano řetězec Název prostředku.
název_prostředku2 Ne řetězec V případě potřeby další segment názvu prostředku.

Pokud typ prostředku obsahuje více segmentů, pokračujte v přidávání názvů prostředků jako parametrů.

Vrácená hodnota

Při nasazení šablony v oboru skupiny prostředků se ID prostředku vrátí v následujícím formátu:

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

Funkci resourceId můžete použít pro jiné obory nasazení, ale formát ID se změní.

Pokud při nasazování do předplatného použijete resourceId, vrátí se ID prostředku v následujícím formátu:

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

Pokud při nasazování do skupiny pro správu nebo tenanta použijete resourceId, vrátí se ID prostředku v následujícím formátu:

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

Abyste se vyhnuli nejasnostem, doporučujeme, abyste při práci s prostředky nasazenmi v předplatném, skupině pro správu nebo resourceId tenantovi nepoučovali . Místo toho použijte funkci ID, která je určená pro obor.

Pro prostředky na úrovni předplatnéhopoužijte funkci subscriptionResourceId.

Pro prostředky na úrovni skupiny pro správupoužijte funkci extensionResourceId k odkazování na prostředek, který je implementován jako rozšíření skupiny pro správu. Například vlastní definice zásad, které jsou nasazené do skupiny pro správu, jsou rozšíření skupiny pro správu. Pomocí funkce tenantResourceId můžete odkazovat na prostředky, které jsou nasazené do tenanta, ale jsou k dispozici ve vaší skupině pro správu. Například předdefinované definice zásad jsou implementované jako prostředky na úrovni tenanta.

Pro prostředky na úrovni tenantapoužijte funkci tenantResourceId. Pro předdefinované definice zásad použijte tenantResourceId, protože jsou implementované na úrovni tenanta.

Poznámky

Počet parametrů, které poskytnete, se liší v závislosti na tom, jestli je prostředek nadřazený nebo podřízený a jestli se prostředek nachází ve stejném předplatném nebo skupině prostředků.

Pokud chcete získat ID prostředku pro nadřazený prostředek ve stejném předplatném a skupině prostředků, zadejte typ a název prostředku.

"[resourceId('Microsoft.ServiceBus/namespaces', 'namespace1')]"

Pokud chcete získat ID prostředku pro podřízený prostředek, věnujte pozornost počtu segmentů v typu prostředku. Zadejte název prostředku pro každý segment typu prostředku. Název segmentu odpovídá prostředku, který existuje pro tu část hierarchie.

"[resourceId('Microsoft.ServiceBus/namespaces/queues/authorizationRules', 'namespace1', 'queue1', 'auth1')]"

Pokud chcete získat ID prostředku pro prostředek ve stejném předplatném, ale v jiné skupině prostředků, zadejte název skupiny prostředků.

"[resourceId('otherResourceGroup', 'Microsoft.Storage/storageAccounts', 'examplestorage')]"

Pokud chcete získat ID prostředku v jiném předplatném a skupině prostředků, zadejte ID předplatného a název skupiny prostředků.

"[resourceId('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', 'otherResourceGroup', 'Microsoft.Storage/storageAccounts','examplestorage')]"

Tuto funkci často potřebujete použít při použití účtu úložiště nebo virtuální sítě v alternativní skupině prostředků. Následující příklad ukazuje, jak lze snadno použít prostředek z externí skupiny prostředků:

{
  "$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')]"
              }
            }
          }
        ]
      }
    }
  ]
}

Příklad ID prostředku

Následující příklad vrátí ID prostředku pro účet úložiště ve skupině prostředků:

{
  "$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')]"
    }
  }
}

Výstup z předchozího příkladu s výchozími hodnotami je:

Název Typ Hodnota
sameRGOutput Řetězec /subscriptions/{current-sub-id}/resourceGroups/examplegroup/providers/Microsoft. Storage/storageAccounts/examplestorage
differentRGOutput Řetězec /subscriptions/{current-sub-id}/resourceGroups/otherResourceGroup/providers/Microsoft. Storage/storageAccounts/examplestorage
differentSubOutput Řetězec /subscriptions/11111111-1111-1111-11111111111111/resourceGroups/otherResourceGroup/providers/Microsoft. Storage/storageAccounts/examplestorage
nestedResourceOutput Řetězec /subscriptions/{current-sub-id}/resourceGroups/examplegroup/providers/Microsoft. SQL/servery/název_serveru/databáze/název_databáze

předplatné

Viz funkce oboru předplatného.

ID prostředku předplatného

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

Vrátí jedinečný identifikátor prostředku nasazeného na úrovni předplatného.

Parametry

Parametr Povinné Typ Popis
subscriptionId No string (ve formátu GUID) Výchozí hodnota je aktuální předplatné. Tuto hodnotu zadejte, když potřebujete načíst prostředek v jiném předplatném.
resourceType Ano řetězec Typ prostředku, včetně oboru názvů poskytovatele prostředků.
název_prostředku1 Ano řetězec Název prostředku.
název_prostředku2 No řetězec V případě potřeby další segment názvu prostředku.

Pokud typ prostředku obsahuje více segmentů, pokračujte v přidávání názvů prostředků jako parametrů.

Vrácená hodnota

Identifikátor se vrátí v následujícím formátu:

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

Poznámky

Pomocí této funkce získáte ID prostředku pro prostředky, které se nasadí do předplatného, a ne do skupiny prostředků. Vrácené ID se liší od hodnoty vrácené funkcí resourceId tím, že nezadá hodnotu skupiny prostředků.

Příklad subscriptionResourceID

Následující šablona přiřadí předdefinovou roli. Můžete ho nasadit do skupiny prostředků nebo předplatného. K získání subscriptionResourceId ID prostředku pro předdefinované role používá funkci .

{
  "$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')]"
      }
    }
  ]
}

id prostředku tenanta

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

Vrátí jedinečný identifikátor prostředku nasazeného na úrovni tenanta.

Parametry

Parametr Povinné Typ Popis
resourceType Ano řetězec Typ prostředku, včetně oboru názvů poskytovatele prostředků.
název_prostředku1 Ano řetězec Název prostředku.
název_prostředku2 Ne řetězec V případě potřeby další segment názvu prostředku.

Pokud typ prostředku obsahuje více segmentů, pokračujte v přidávání názvů prostředků jako parametrů.

Vrácená hodnota

Identifikátor se vrátí v následujícím formátu:

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

Poznámky

Pomocí této funkce získáte ID prostředku, který je nasazený do tenanta. Vrácené ID se liší od hodnot vrácených jinými funkcemi ID prostředku tím, že nezačáte hodnoty skupiny prostředků nebo předplatného.

Příklad tenantResourceId

Předdefinované definice zásad jsou prostředky na úrovni tenanta. Pokud chcete nasadit přiřazení zásady, které odkazuje na integrovanou definici zásady, použijte tenantResourceId funkci .

{
  "$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'))]"
      }
    }
  ]
}

Další kroky