Funkce prostředků pro šablony ARM
Resource Manager poskytuje následující funkce pro získání hodnot prostředků v šabloně Azure Resource Manageru (šablona ARM):
- extensionResourceId
- seznam*
- pickZones
- poskytovatelé (zastaralé)
- odkaz
- odkazy
- resourceId
- subscriptionResourceId
- managementGroupResourceId
- tenantResourceId
Pokud chcete získat hodnoty z parametrů, proměnných nebo aktuálního nasazení, podívejte se na funkce hodnot nasazení.
Pokud chcete získat hodnoty oboru nasazení, podívejte se na funkce Oboru.
Tip
Doporučujeme Bicep, protože nabízí stejné možnosti jako šablony ARM a syntaxe se snadněji používá. Další informace najdete v tématu Funkce prostředků .
extensionResourceId
extensionResourceId(baseResourceId, resourceType, resourceName1, [resourceName2], ...)
Vrátí ID prostředku rozšíření. Prostředek rozšíření je typ prostředku, který se použije na jiný prostředek, aby se přidal do svých schopností.
V Bicep použijte funkci extensionResourceId .
Parametry
Parametr | Požaduje se | Type | Popis |
---|---|---|---|
baseResourceId | Ano | string | ID prostředku pro prostředek, na který se prostředek rozšíření použije. |
resourceType | Ano | string | Typ prostředku rozšíření, včetně oboru názvů poskytovatele prostředků |
resourceName1 | Ano | string | Název prostředku rozšíření |
resourceName2 | No | string | V případě potřeby další segment názvu prostředku. |
Pokud typ prostředku obsahuje více segmentů, pokračujte přidáním názvů prostředků jako parametrů.
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šířeného základního prostředku. ID předplatného má například jiné segmenty než ID skupiny prostředků.
Pokud se prostředek rozšíření použije na prostředek, vrátí se ID prostředku v následujícím formátu:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{baseResourceProviderNamespace}/{baseResourceType}/{baseResourceName}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}
Pokud je prostředek rozšíření použit pro skupinu prostředků, vrácený formát je:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}
Příklad použití této funkce se skupinou prostředků je uvedený v další části.
Při použití prostředku rozšíření pro předplatné je vrácený formát:
/subscriptions/{subscriptionId}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}
Při použití prostředku rozšíření pro skupinu pro správu je 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 další části.
extensionResourceId example
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'))]"
}
}
}
Definice vlastních zásad nasazená do skupiny pro správu se implementuje jako prostředek rozšíření. Pokud chcete 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.5.6.12127",
"templateHash": "1532257987028557958"
}
},
"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."
}
}
},
"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": [
"[extensionResourceId(managementGroup().id, 'Microsoft.Authorization/policyDefinitions', variables('policyDefinitionName'))]"
]
}
]
}
Předdefinované definice zásad jsou prostředky na úrovni tenanta. Příklad nasazení předdefinované definice zásady najdete v tématu tenantResourceId.
seznam*
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 seznamu. Název operace musí začínat list
a může mít příponu. Mezi běžné použití patří list
, listKeys
, listKeyValue
a listSecrets
.
V Bicep použijte funkci list* .
Parametry
Parametr | Požaduje se | Type | Popis |
---|---|---|---|
resourceName nebo resourceIdentifier | Ano | string | Jedinečný identifikátor prostředku. |
apiVersion | Ano | string | Verze rozhraní API stavu modulu runtime prostředků Obvykle ve formátu rrrr-mm-dd. |
functionValues | No | objekt | Objekt, který má hodnoty pro funkci. Tento objekt zadejte pouze pro funkce, které podporují příjem objektu s hodnotami parametrů, jako listAccountSas je například účet úložiště. Příklad předávání hodnot funkcí je uvedený v tomto článku. |
Platné použití
Funkce seznamu lze použít ve vlastnostech definice prostředku. Nepoužívejte funkci seznamu, která zveřejňuje citlivé informace v části výstupy šablony. Výstupní hodnoty se ukládají v historii nasazení a můžou je načíst uživatel se zlými úmysly.
Při použití s iterací vlastností můžete použít funkce seznamu, protože input
výraz je přiřazen k vlastnosti prostředku. Nemůžete je použít, count
protože počet musí být určen před vyřešením funkce seznamu.
Implementace
Možné použití list*
jsou uvedeny v následující tabulce.
Typ prostředku | Název funkce |
---|---|
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.BotService/botServices/channels | listChannelWithKeys |
Microsoft.Cache/redis | listKeys |
Microsoft.CognitiveServices/accounts | listKeys |
Microsoft.ContainerRegistry/registry | listCredentials |
Microsoft.ContainerRegistry/registry | listUsages |
Microsoft.ContainerRegistry/registry/agentpools | listQueueStatus |
Microsoft.ContainerRegistry/registry/buildTasks | listSourceRepositoryProperties |
Microsoft.ContainerRegistry/registry/buildTasks/steps | listBuildArguments |
Microsoft.ContainerRegistry/registryies/taskruns | listDetails |
Microsoft.ContainerRegistry/registry/webhooks | listEvents |
Microsoft.ContainerRegistry/registry/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/factory/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 | Virtuální pevné disky (ListVhds) |
Microsoft.DevTestLab/labs/schedules | ListApplicable |
Microsoft.DevTestLab/labs/users/serviceFabrics | ListApplicableSchedules |
Microsoft.DevTestLab/labs/virtualMachines | ListApplicableSchedules |
Microsoft.DocumentDB/databaseAccounts | listKeys |
Microsoft.DocumentDB/databaseAccounts/notebookWorkspaces | listConnectionInfo |
Microsoft.DomainRegistration/topLevelDomains | listAgreements |
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 | SeznamPrincipals |
Microsoft.LabServices/labs/users | list |
Microsoft.LabServices/labs/virtualMachines | list |
Microsoft.Logic/integrationAccounts/agreements | listContentCallbackUrl |
Microsoft.Logic/integrationAccounts/assemblyes | listContentCallbackUrl |
Microsoft.Logic/integrationAccounts | listCallbackUrl |
Microsoft.Logic/integrationAccounts | listKeyVaultKeys |
Microsoft.Logic/integrationAccounts/maps | listContentCallbackUrl |
Microsoft.Logic/integrationAccounts/partners | listContentCallbackUrl |
Microsoft.Logic/integrationAccounts/schemas | listContentCallbackUrl |
Microsoft.Logic/workflows | listCallbackUrl |
Microsoft.Logic/workflows | listSwagger |
Microsoft.Logic/workflows/runs/actions | listExpressionTraces |
Microsoft.Logic/workflows/runs/actions/opakování | listExpressionTraces |
Microsoft.Logic/workflows/triggers | listCallbackUrl |
Microsoft.Logic/workflows/versions/triggers | listCallbackUrl |
Microsoft.MachineLearning/webServices | listkeys |
Microsoft.MachineLearning/Workspaces | listworkspacekeys |
Microsoft.Maps/accounts | listKeys |
Microsoft.Media/mediaservices/assets | listContainerSas |
Microsoft.Media/mediaservices/assets | listStreamingLocators |
Microsoft.Media/mediaservices/streamingLocators | listContentKeys |
Microsoft.Media/mediaservices/streamingLocators | listPaths |
Microsoft.Network/applicationSecurityGroups | listIpConfigurations |
Microsoft.NotificationHubs/Namespaces/authorizationRules | listkeys |
Microsoft.NotificationHubs/Namespaces/NotificationHubs/authorizationRules | listkeys |
Microsoft.OperationalInsights/workspaces | list |
Microsoft.OperationalInsights/workspaces | listKeys |
Microsoft.PolicyInsights/nápravy | 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.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 | seznamconsentlinks |
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 |
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 | list |
Microsoft.Web/sites/slots/config | list |
microsoft.web/sites/slots/functions | listSecrets |
Pokud chcete určit, které typy prostředků mají operaci seznamu, máte následující možnosti:
Zobrazte operace rozhraní REST API pro poskytovatele prostředků a vyhledejte operace se seznamem. 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
K filtrování pouze operací seznamu použijte následující příkaz Azure CLI:
az provider operation show --namespace Microsoft.Storage --query "resourceTypes[?name=='storageAccounts'].operations[].name | [?contains(@, 'list')]"
Vrácená hodnota
Vrácený objekt se liší podle list
funkce, kterou používáte. Například listKeys
úč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é list
funkce mají různé návratové formáty. Pokud chcete zobrazit formát funkce, zahrňte ho do oddílu výstupů, jak je znázorněno v ukázkové šabloně.
Poznámky
Zadejte prostředek pomocí názvu prostředku nebo funkce resourceId. Při použití list
funkce ve stejné šabloně, která nasazuje odkazovaný prostředek, použijte název prostředku.
Pokud použijete list
funkci v prostředku, který je podmíněně nasazený, vyhodnotí se tato funkce i v případě, že prostředek není nasazený. Pokud funkce odkazuje na prostředek, který neexistuje, zobrazí se chyba list
. if
Pomocí funkce se ujistěte, že se funkce vyhodnocuje jenom při nasazení prostředku. Podívejte se na funkci if ukázkové šablony, která používá if
a list
používá podmíněně nasazený prostředek.
Příklad seznamu
Následující příklad používá listKeys
při nastavení hodnoty pro skripty nasazení.
"storageAccountSettings": {
"storageAccountName": "[variables('storageAccountName')]",
"storageAccountKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), '2019-06-01').keys[0].value]"
}
Následující příklad ukazuje list
funkci, která přebírá parametr. V tomto případě je listAccountSas
funkce . Předejte objekt pro 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, zda 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 vrací prázdné pole. Další informace najdete v tématu Služby Azure, které podporují Zóny dostupnosti.
V Bicep použijte funkci pickZones .
Parametry
Parametr | Požaduje se | Type | Popis |
---|---|---|---|
providerNamespace | Ano | string | Obor názvů poskytovatele prostředků pro typ prostředku, který zkontroluje podporu zóny. |
resourceType | Ano | string | Typ prostředku, který chcete zkontrolovat podporu zón. |
location | Ano | string | Oblast, ve které chcete zjistit podporu zóny. |
numberOfZones | No | integer | Počet logických zón, které se mají 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. |
offset | No | integer | Posun od počáteční logické zóny. Funkce vrátí chybu, pokud posun plus numberOfZones překročí 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 a oblast prostředku, který podporuje zóny vrátí následující pole:
[
"1"
]
numberOfZones
Pokud je parametr nastaven na hodnotu 3, vrátí:
[
"1",
"2",
"3"
]
Pokud typ prostředku nebo oblast nepodporuje zóny, vrátí se prázdné pole. Pro zónově redundantní služby se vrátí také prázdné pole.
[
]
Poznámky
Azure Zóny dostupnosti – zónově redundantní a zónově redundantní jsou různé kategorie. Funkci pickZones
lze použít k vrácení zóny dostupnosti pro zónový prostředek. Pro zónově redundantní služby (ZRS) vrátí funkce prázdné pole. Zónové prostředky obvykle mají zones
vlastnost na nejvyšší úrovni definice prostředku. Pokud chcete určit kategorii podpory zón dostupnosti, podívejte se na služby Azure, které podporují Zóny dostupnosti.
Pokud chcete zjistit, jestli daná oblast Nebo umístění Azure podporuje zóny dostupnosti, zavolejte pickZones
funkci s typem zónového prostředku, například Microsoft.Network/publicIPAddresses
. Pokud odpověď není prázdná, oblast podporuje zóny dostupnosti.
PickZones example
Následující šablona ukazuje tři výsledky použití pickZones
funkce.
{
"$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', 'westus')]"
},
"notSupportedType": {
"type": "array",
"value": "[pickZones('Microsoft.Cdn', 'profiles', 'westus2')]"
}
}
}
Výstup z předchozích příkladů vrátí tři pole.
Name | Typ | Hodnota |
---|---|---|
Podporováno | pole | [ "1" ] |
notSupportedRegion | pole | [] |
notSupportedType | pole | [] |
Pomocí odpovědi pickZones
můžete určit, jestli chcete poskytnout hodnotu null pro zóny nebo přiřadit virtuální počítače k různým zónům. Následující příklad nastaví hodnotu zóny na základě dostupnosti zón.
"zones": {
"value": "[if(not(empty(pickZones('Microsoft.Compute', 'virtualMachines', 'westus2'))), string(add(mod(copyIndex(),3),1)), json('null'))]"
},
Azure Cosmos DB není zónový prostředek, ale pomocí funkce můžete pickZones
určit, jestli chcete povolit redundanci zón pro georeplicitu. Předejte typ prostředku Microsoft.Storage/storageAccounts a určete, jestli se má povolit redundance zón.
"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')]"
}
}
]
Poskytovatelů
Funkce poskytovatelů je v šablonách ARM 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 ve své šabloně zadat konkrétní verzi rozhraní API. Pokud se vlastnosti mezi verzemi změní, může použití dynamicky vrácené verze rozhraní API přerušit vaši šablonu.
V Bicep je funkce zprostředkovatelů zastaralá.
Operace zprostředkovatelů je stále dostupná prostřednictvím rozhraní REST API. Dá se použít mimo šablonu ARM k získání informací o poskytovateli prostředků.
reference
V šablonách bez symbolických názvů:
reference(resourceName or resourceIdentifier, [apiVersion], ['Full'])
V šablonách s symbolickými názvy:
reference(symbolicName or resourceIdentifier, [apiVersion], ['Full'])
Vrátí objekt představující stav modulu runtime prostředku. Výstup a chování reference
funkce vysoce závisí na tom, jak každý poskytovatel prostředků (RP) implementuje své odpovědi PUT a GET. Pokud chcete vrátit pole objektů představujících stavy modulu runtime kolekce prostředků, přečtěte si odkazy.
Bicep poskytuje referenční funkci, ale ve většině případů není referenční funkce nutná. Místo toho doporučujeme použít symbolický název prostředku. Viz reference.
Parametry
Parametr | Požaduje se | Type | Popis |
---|---|---|---|
resourceName/resourceIdentifier nebo symbolický_název_prostředku/resourceIdentifier | Ano | string | V šablonách bez symbolických názvů zadejte název nebo jedinečný identifikátor prostředku. Při odkazování na prostředek v aktuální šabloně zadejte jako parametr pouze název prostředku. Pokud odkazujete na dříve nasazený prostředek nebo pokud je název prostředku nejednoznačný, zadejte ID prostředku. V šablonách s symbolickými názvy zadejte symbolický název nebo jedinečný identifikátor prostředku. Při odkazování na prostředek v aktuální šabloně zadejte jako parametr pouze symbolický název prostředku. Při odkazování na dříve nasazený prostředek zadejte ID prostředku. |
apiVersion | No | string | Verze rozhraní API zadaného prostředku Tento parametr se vyžaduje, pokud prostředek není zřízený ve stejné šabloně. Obvykle ve formátu rrrr-mm-dd. Platné verze rozhraní API pro váš prostředek najdete v referenčních informacích k šabloně. |
"Plný" | No | string | Hodnota, která určuje, zda se má vrátit celý objekt prostředku. Pokud nezadáte 'Full' , vrátí se pouze objekt vlastností prostředku. Celý objekt obsahuje hodnoty, jako je ID prostředku a umístění. |
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ší na základě hodnoty argumentu 'Full'
. Pokud chcete zobrazit vlastnosti pro typ prostředku, vraťte objekt v části výstupy, jak je znázorněno v příkladu.
Poznámky
Referenční funkce načte stav modulu runtime 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.
Funkci obvykle použijete reference
k vrácení konkrétní hodnoty z objektu, jako je 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'
, když potřebujete hodnoty prostředků, které nejsou součástí schématu vlastností. Pokud například chcete nastavit zásady přístupu trezoru klíčů, získejte vlastnosti identity pro virtuální počítač.
{
"type": "Microsoft.KeyVault/vaults",
"apiVersion": "2022-07-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í
reference
Funkci lze použít pouze v části výstupu šablony nebo objektu nasazení a vlastností definice prostředku. Nelze jej použít pro vlastnosti prostředku, jako type
jsou , name
location
a další vlastnosti nejvyšší úrovně definice prostředku. Při použití s iterací vlastností můžete funkci input
použítreference
, protože výraz je přiřazen k vlastnosti prostředku.
Funkci nelze použít reference
k nastavení hodnoty count
vlastnosti ve smyčce kopírování. Můžete použít k nastavení dalších vlastností ve smyčce. Odkaz je blokovaný pro vlastnost count, protože tato vlastnost musí být určena před vyřešením reference
funkce.
Pokud chcete použít reference
funkci nebo libovolnou list*
funkci ve výstupní části vnořené šablony, musíte nastavit expressionEvaluationOptions
, aby se použilo vyhodnocení vnitřního oboru nebo použilo propojené místo vnořené šablony.
Pokud funkci použijete reference
v prostředku, který je podmíněně nasazený, vyhodnotí se tato funkce i v případě, že prostředek není nasazený. Pokud funkce odkazuje na prostředek, který neexistuje, zobrazí se chyba reference
. if
Pomocí funkce se ujistěte, že se funkce vyhodnocuje jenom při nasazení prostředku. Podívejte se na funkci if ukázkové šablony, která používá if
a reference
používá podmíněně nasazený prostředek.
Implicitní závislost
reference
Použitím funkce implicitně deklarujete, že jeden prostředek závisí na jiném prostředku, pokud je odkazovaný prostředek zřízený ve stejné šabloně a odkazujete na prostředek podle jeho názvu (ne ID prostředku). Tuto vlastnost také nemusíte používat dependsOn
. Funkce se nevyhodnocuje, dokud odkazovaný prostředek nedokončí nasazení.
Název prostředku, symbolický název nebo identifikátor
Při odkazování na prostředek nasazený ve stejné šabloně bez symbolického názvu zadejte název prostředku.
"value": "[reference(parameters('storageAccountName'))]"
Při odkazování na prostředek nasazený ve stejné šabloně symbolického názvu zadejte symbolický název prostředku.
"value": "[reference('myStorage').primaryEndpoints]"
Nebo
"value": "[reference('myStorage', '2022-09-01', 'Full').location]"
Při odkazování 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')), '2022-09-01')]"
Abyste se vyhnuli nejednoznačnosti, na který prostředek odkazujete, můžete zadat plně kvalifikovaný identifikátor prostředku.
"value": "[reference(resourceId('Microsoft.Network/publicIPAddresses', parameters('ipAddressName')))]"
Při vytváření plně kvalifikovaného odkazu na prostředek není pořadí kombinování segmentů z typu a názvu jednoduše zřetězením těchto dvou. Místo toho za oborem názvů použijte sekvenci párů typů/názvů od nejmenších po nejvýraznější:
{resource-provider-namespace}/{parent-resource-type}/{parent-resource-name}[/{child-resource-type}/{child-resource-name}]
Příklad:
Microsoft.Compute/virtualMachines/myVM/extensions/myExt
je správná, není správná Microsoft.Compute/virtualMachines/extensions/myVM/myExt
Pokud chcete zjednodušit vytváření jakéhokoli ID prostředku, použijte resourceId()
místo funkce funkce popsané v tomto dokumentu concat()
funkce.
Získání spravované identity
Spravované identity pro prostředky Azure jsou typy prostředků rozšíření, které se pro některé prostředky vytvářejí implicitně. Vzhledem k tomu, že spravovaná identita není explicitně definovaná v šabloně, musíte odkazovat na prostředek, na který se identita použije. Slouží Full
k získání všech vlastností, včetně implicitně vytvořené identity.
Vzor je:
"[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]",
Pokud chcete získat ID tenanta pro spravovanou identitu použitou ve škálovací sadě 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"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[parameters('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"tags": {},
"properties": {
}
}
],
"outputs": {
"referenceOutput": {
"type": "object",
"value": "[reference(parameters('storageAccountName'))]"
},
"fullReferenceOutput": {
"type": "object",
"value": "[reference(parameters('storageAccountName'), '2022-09-01', 'Full')]"
}
}
}
Předchozí příklad vrátí dva objekty. Objekt properties je v následujícím formátu:
{
"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":"2022-09-01",
"location":"southcentralus",
"sku": {
"name":"Standard_LRS",
"tier":"Standard"
},
"tags":{},
"kind":"Storage",
"properties": {
"creationTime":"2021-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í nasazen v této šabloně. Úč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')]"
}
}
}
odkazy
references(symbolic name of a resource collection, ['Full', 'Properties])
Funkce references
funguje podobně jako reference
. Místo vrácení objektu, který prezentuje stav modulu runtime prostředku, references
vrátí funkce pole objektů představující stav modulu runtime kolekce prostředků. Tato funkce vyžaduje verzi 2.0
jazyka šablony ARM a s povoleným symbolickým názvem :
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"languageVersion": "2.0",
"contentVersion": "1.0.0.0",
...
}
V Bicep neexistuje žádná explicitní references
funkce. Místo toho se používá symbolické použití kolekce přímo a během generování kódu ji Bicep přeloží na šablonu ARM, která využívá funkci šablony references
ARM. Další informace najdete v tématu Referenční zdroje nebo kolekce modulů.
Parametry
Parametr | Požaduje se | Type | Popis |
---|---|---|---|
Symbolický název kolekce prostředků | Ano | string | Symbolický název kolekce prostředků, která je definována v aktuální šabloně. Funkce references nepodporuje odkazování na prostředky externí na aktuální šablonu. |
'Full', 'Properties' | No | string | Hodnota, která určuje, zda se má vrátit pole celých objektů prostředků. Výchozí hodnota je 'Properties' . Pokud nezadáte 'Full' , vrátí se pouze objekty vlastností prostředků. Celý objekt obsahuje hodnoty, jako je ID prostředku a umístění. |
Vrácená hodnota
Pole kolekce prostředků. Každý typ prostředku vrátí pro funkci různé vlastnosti reference
. Vrácená hodnota se také liší na základě hodnoty argumentu 'Full'
. Další informace najdete v referenčních informacích.
Výstupní pořadí references
je vždy uspořádáno ve vzestupném pořadí na základě indexu kopírování. Proto se první prostředek v kolekci s indexem 0 zobrazí jako první, za ním následuje index 1 atd. Například [worker-0, worker-1, worker-2, ...].
Pokud se v předchozím příkladu nasadí pracovní proces 0 a worker-2, zatímco pracovní proces-1 není z důvodu nepravdivé podmínky, výstup references
nevysazeného prostředku vynechá a zobrazí nasazené prostředky seřazené podle jejich čísel. Výstupem references
bude [worker-0, worker-2, ...]. Pokud jsou všechny prostředky vynechány, vrátí funkce prázdné pole.
Platné použití
Funkci references
nelze použít ve smyčce kopírování prostředků ani ve smyčce Bicep. Například references
není povolen v následujícím scénáři:
{
resources: {
"resourceCollection": {
"copy": { ... },
"properties": {
"prop": "[references(...)]"
}
}
}
}
Pokud chcete použít references
funkci nebo libovolnou list*
funkci ve výstupní části vnořené šablony, musíte nastavit expressionEvaluationOptions
, aby se použilo vyhodnocení vnitřního oboru nebo použilo propojené místo vnořené šablony.
Implicitní závislost
references
Pomocí funkce implicitně deklarujete, že jeden prostředek závisí na jiném prostředku. Tuto vlastnost také nemusíte používat dependsOn
. Funkce se nevyhodnocuje, dokud odkazovaný prostředek nedokončí nasazení.
Příklad odkazu
Následující příklad nasadí kolekci prostředků a odkazuje na danou kolekci prostředků.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"languageVersion": "2.0",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Location for all resources."
}
},
"numWorkers": {
"type": "int",
"defaultValue": 4,
"metadata": {
"description": "The number of workers"
}
}
},
"resources": {
"containerWorkers": {
"copy": {
"name": "containerWorkers",
"count": "[length(range(0, parameters('numWorkers')))]"
},
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2023-05-01",
"name": "[format('worker-{0}', range(0, parameters('numWorkers'))[copyIndex()])]",
"location": "[parameters('location')]",
"properties": {
"containers": [
{
"name": "[format('worker-container-{0}', range(0, parameters('numWorkers'))[copyIndex()])]",
"properties": {
"image": "mcr.microsoft.com/azuredocs/aci-helloworld",
"ports": [
{
"port": 80,
"protocol": "TCP"
}
],
"resources": {
"requests": {
"cpu": 1,
"memoryInGB": 2
}
}
}
}
],
"osType": "Linux",
"restartPolicy": "Always",
"ipAddress": {
"type": "Public",
"ports": [
{
"port": 80,
"protocol": "TCP"
}
]
}
}
},
"containerController": {
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2023-05-01",
"name": "controller",
"location": "[parameters('location')]",
"properties": {
"containers": [
{
"name": "controller-container",
"properties": {
"command": [
"echo",
"[format('Worker IPs are {0}', join(map(references('containerWorkers', 'full'), lambda('w', lambdaVariables('w').properties.ipAddress.ip)), ','))]"
],
"image": "mcr.microsoft.com/azuredocs/aci-helloworld",
"ports": [
{
"port": 80,
"protocol": "TCP"
}
],
"resources": {
"requests": {
"cpu": 1,
"memoryInGB": 2
}
}
}
}
],
"osType": "Linux",
"restartPolicy": "Always",
"ipAddress": {
"type": "Public",
"ports": [
{
"port": 80,
"protocol": "TCP"
}
]
}
},
"dependsOn": [
"containerWorkers"
]
}
},
"outputs": {
"workerIpAddresses": {
"type": "string",
"value": "[join(map(references('containerWorkers', 'full'), lambda('w', lambdaVariables('w').properties.ipAddress.ip)), ',')]"
},
"containersFull": {
"type": "array",
"value": "[references('containerWorkers', 'full')]"
},
"container": {
"type": "array",
"value": "[references('containerWorkers')]"
}
}
}
Předchozí příklad vrátí tři objekty.
"outputs": {
"workerIpAddresses": {
"type": "String",
"value": "20.66.74.26,20.245.100.10,13.91.86.58,40.83.249.30"
},
"containersFull": {
"type": "Array",
"value": [
{
"apiVersion": "2023-05-01",
"condition": true,
"copyContext": {
"copyIndex": 0,
"copyIndexes": {
"": 0,
"containerWorkers": 0
},
"name": "containerWorkers"
},
"copyLoopSymbolicName": "containerWorkers",
"deploymentResourceLineInfo": {
"lineNumber": 30,
"linePosition": 25
},
"existing": false,
"isAction": false,
"isConditionTrue": true,
"isTemplateResource": true,
"location": "westus",
"properties": {
"containers": [
{
"name": "worker-container-0",
"properties": {
"environmentVariables": [],
"image": "mcr.microsoft.com/azuredocs/aci-helloworld",
"instanceView": {
"currentState": {
"detailStatus": "",
"startTime": "2023-07-31T19:25:31.996Z",
"state": "Running"
},
"restartCount": 0
},
"ports": [
{
"port": 80,
"protocol": "TCP"
}
],
"resources": {
"requests": {
"cpu": 1.0,
"memoryInGB": 2.0
}
}
}
}
],
"initContainers": [],
"instanceView": {
"events": [],
"state": "Running"
},
"ipAddress": {
"ip": "20.66.74.26",
"ports": [
{
"port": 80,
"protocol": "TCP"
}
],
"type": "Public"
},
"isCustomProvisioningTimeout": false,
"osType": "Linux",
"provisioningState": "Succeeded",
"provisioningTimeoutInSeconds": 1800,
"restartPolicy": "Always",
"sku": "Standard"
},
"provisioningOperation": "Create",
"references": [],
"resourceGroupName": "demoRg",
"resourceId": "Microsoft.ContainerInstance/containerGroups/worker-0",
"scope": "",
"subscriptionId": "",
"symbolicName": "containerWorkers[0]"
},
...
]
},
"containers": {
"type": "Array",
"value": [
{
"containers": [
{
"name": "worker-container-0",
"properties": {
"environmentVariables": [],
"image": "mcr.microsoft.com/azuredocs/aci-helloworld",
"instanceView": {
"currentState": {
"detailStatus": "",
"startTime": "2023-07-31T19:25:31.996Z",
"state": "Running"
},
"restartCount": 0
},
"ports": [
{
"port": 80,
"protocol": "TCP"
}
],
"resources": {
"requests": {
"cpu": 1.0,
"memoryInGB": 2.0
}
}
}
}
],
"initContainers": [],
"instanceView": {
"events": [],
"state": "Running"
},
"ipAddress": {
"ip": "20.66.74.26",
"ports": [
{
"port": 80,
"protocol": "TCP"
}
],
"type": "Public"
},
"isCustomProvisioningTimeout": false,
"osType": "Linux",
"provisioningState": "Succeeded",
"provisioningTimeoutInSeconds": 1800,
"restartPolicy": "Always",
"sku": "Standard"
},
...
]
}
}
resourceGroup
Podívejte se na funkci oboru resourceGroup.
V Bicep použijte funkci oboru skupiny prostředků.
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í zřízený ve stejné šabloně. Formát vráceného identifikátoru se liší podle toho, jestli se nasazení děje v oboru skupiny prostředků, předplatného, skupiny pro správu nebo tenanta.
V Bicep použijte funkci resourceId .
Parametry
Parametr | Požaduje se | Type | 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. Tuto hodnotu zadejte pouze při nasazování v oboru skupiny prostředků nebo předplatného. |
resourceGroupName | No | string | 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 | string | Typ prostředku včetně oboru názvů poskytovatele prostředků |
resourceName1 | Ano | string | Název prostředku. |
resourceName2 | No | string | V případě potřeby další segment názvu prostředku. |
Pokud typ prostředku obsahuje více segmentů, pokračujte přidáním názvů prostředků jako parametrů.
Vrácená hodnota
ID prostředku se vrátí v různých formátech v různých oborech:
Rozsah skupiny prostředků:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
Rozsah předplatného:
/subscriptions/{subscriptionId}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
Rozsah skupiny pro správu nebo tenanta:
/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
Abyste se vyhnuli nejasnostem, doporučujeme nepoužívat resourceId
při práci s prostředky nasazenými do předplatného, skupiny pro správu nebo tenanta. Místo toho použijte funkci ID určenou pro obor.
- Pro prostředky na úrovni předplatného použijte funkci subscriptionResourceId .
- Pro prostředky na úrovni skupiny pro správu použijte funkci managementGroupResourceId . Pomocí funkce extensionResourceId můžete odkazovat na prostředek implementovaný jako rozšíření skupiny pro správu. Například vlastní definice zásad nasazené do skupiny pro správu jsou rozšíření skupiny pro správu. Pomocí funkce tenantResourceId můžete odkazovat na prostředky nasazené do tenanta, ale dostupné ve vaší skupině pro správu. Například předdefinované definice zásad se implementují jako prostředky na úrovni tenanta.
- Pro prostředky na úrovni tenanta použijte funkci tenantResourceId . Používá se
tenantResourceId
pro předdefinované definice zásad, protože jsou implementovány na úrovni tenanta.
Poznámky
Počet parametrů, které zadáte, se liší podle toho, jestli je prostředek nadřazeným nebo podřízeným prostředkem a jestli je prostředek ve stejném předplatném nebo skupině prostředků.
Pokud chcete získat ID prostředku nadřazeného prostředku 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 danou čá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 pro prostředek 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": "2022-11-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:
Name | Typ | Hodnota |
---|---|---|
sameRGOutput | String | /subscriptions/{current-sub-id}/resourceGroups/examplegroup/providers/Microsoft.Storage/storageAccounts/examplestorage |
differentRGOutput | String | /subscriptions/{current-sub-id}/resourceGroups/otherResourceGroup/providers/Microsoft.Storage/storageAccounts/examplestorage |
differentSubOutput | String | /subscriptions/aaaa0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/otherResourceGroup/providers/Microsoft.Storage/storageAccounts/examplestorage |
nestedResourceOutput | String | /subscriptions/{current-sub-id}/resourceGroups/examplegroup/providers/Microsoft.SQL/servers/serverName/databases/databaseName |
předplatné
Podívejte se na funkci oboru předplatného.
V Bicep použijte funkci oboru předplatného.
subscriptionResourceId
subscriptionResourceId([subscriptionId], resourceType, resourceName1, [resourceName2], ...)
Vrátí jedinečný identifikátor prostředku nasazeného na úrovni předplatného.
V Bicep použijte funkci subscriptionResourceId .
Parametry
Parametr | Požaduje se | Type | Popis |
---|---|---|---|
subscriptionId | No | řetězec (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 | string | Typ prostředku včetně oboru názvů poskytovatele prostředků |
resourceName1 | Ano | string | Název prostředku. |
resourceName2 | No | string | V případě potřeby další segment názvu prostředku. |
Pokud typ prostředku obsahuje více segmentů, pokračujte přidáním 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é jsou nasazené v předplatném , a ne pro skupinu prostředků. Vrácené ID se liší od hodnoty vrácené funkcí resourceId tím, že nezahrnuje hodnotu skupiny prostředků.
subscriptionResourceID example
Následující šablona přiřadí předdefinované role. Můžete ho nasadit do skupiny prostředků nebo předplatného. Pomocí subscriptionResourceId
funkce získá ID prostředku pro předdefinované role.
{
"$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": "2022-04-01",
"name": "[parameters('roleNameGuid')]",
"properties": {
"roleDefinitionId": "[variables(parameters('builtInRoleType'))]",
"principalId": "[parameters('principalId')]"
}
}
]
}
managementGroupResourceId
managementGroupResourceId([managementGroupResourceId],resourceType, resourceName1, [resourceName2], ...)
Vrátí jedinečný identifikátor prostředku nasazeného na úrovni skupiny pro správu.
V Bicep použijte funkci managementGroupResourceId .
Parametry
Parametr | Požaduje se | Type | Popis |
---|---|---|---|
managementGroupResourceId | No | řetězec (ve formátu GUID) | Výchozí hodnota je aktuální skupina pro správu. Tuto hodnotu zadejte, když potřebujete načíst prostředek v jiné skupině pro správu. |
resourceType | Ano | string | Typ prostředku včetně oboru názvů poskytovatele prostředků |
resourceName1 | Ano | string | Název prostředku. |
resourceName2 | No | string | V případě potřeby další segment názvu prostředku. |
Pokud typ prostředku obsahuje více segmentů, pokračujte přidáním názvů prostředků jako parametrů.
Vrácená hodnota
Identifikátor se vrátí v následujícím formátu:
/providers/Microsoft.Management/managementGroups/{managementGroupName}/providers/{resourceType}/{resourceName}
Poznámky
Pomocí této funkce získáte ID prostředku pro prostředky nasazené do skupiny pro správu, nikoli skupinu prostředků. Vrácené ID se liší od hodnoty vrácené funkcí resourceId tím, že nezahrnuje ID předplatného a hodnotu skupiny prostředků.
příklad managementGroupResourceID
Následující šablona vytvoří a přiřadí definici zásady. Pomocí managementGroupResourceId
funkce získá ID prostředku pro definici zásady.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"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."
}
}
},
"variables": {
"mgScope": "[tenantResourceId('Microsoft.Management/managementGroups', parameters('targetMG'))]",
"policyDefinitionName": "LocationRestriction"
},
"resources": [
{
"type": "Microsoft.Authorization/policyDefinitions",
"apiVersion": "2021-06-01",
"name": "[variables('policyDefinitionName')]",
"properties": {
"policyType": "Custom",
"mode": "All",
"parameters": {},
"policyRule": {
"if": {
"not": {
"field": "location",
"in": "[parameters('allowedLocations')]"
}
},
"then": {
"effect": "deny"
}
}
}
},
"location_lock": {
"type": "Microsoft.Authorization/policyAssignments",
"apiVersion": "2022-06-01",
"name": "location-lock",
"properties": {
"scope": "[variables('mgScope')]",
"policyDefinitionId": "[managementGroupResourceId('Microsoft.Authorization/policyDefinitions', variables('policyDefinitionName'))]"
},
"dependsOn": [
"[format('Microsoft.Authorization/policyDefinitions/{0}', variables('policyDefinitionName'))]"
]
}
]
}
tenantResourceId
tenantResourceId(resourceType, resourceName1, [resourceName2], ...)
Vrátí jedinečný identifikátor prostředku nasazeného na úrovni tenanta.
V Bicep použijte funkci tenantResourceId .
Parametry
Parametr | Požaduje se | Type | Popis |
---|---|---|---|
resourceType | Ano | string | Typ prostředku včetně oboru názvů poskytovatele prostředků |
resourceName1 | Ano | string | Název prostředku. |
resourceName2 | No | string | V případě potřeby další segment názvu prostředku. |
Pokud typ prostředku obsahuje více segmentů, pokračujte přidáním 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 pro prostředek nasazený do tenanta. Vrácené ID se liší od hodnot vrácených jinými funkcemi ID prostředku, a to tak, že nezahrnuje 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ásad, které odkazuje na předdefinované definice zásad, 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": "2022-06-01",
"properties": {
"scope": "[subscriptionResourceId('Microsoft.Resources/resourceGroups', resourceGroup().name)]",
"policyDefinitionId": "[tenantResourceId('Microsoft.Authorization/policyDefinitions', parameters('policyDefinitionID'))]"
}
}
]
}
Další kroky
- Popis oddílů v šabloně ARM najdete v tématu Vysvětlení struktury a syntaxe šablon ARM.
- Pokud chcete sloučit více šablon, přečtěte si téma Použití propojených a vnořených šablon při nasazování prostředků Azure.
- Pokud chcete iterovat zadaný počet opakování při vytváření typu prostředku, přečtěte si téma Iterace prostředků v šablonách ARM.
- Pokud chcete zjistit, jak nasadit šablonu, kterou jste vytvořili, přečtěte si téma Nasazení prostředků pomocí šablon ARM a Azure PowerShellu.