Funkcje zasobów dla szablonów usługi ARM
Usługa Resource Manager udostępnia następujące funkcje umożliwiające uzyskiwanie wartości zasobów w szablonie usługi Azure Resource Manager (szablon usługi ARM):
- extensionResourceId
- lista*
- pickZones
- dostawcy (przestarzałe)
- odniesienie
- Odwołania
- resourceId
- subscriptionResourceId
- managementGroupResourceId
- tenantResourceId
Aby uzyskać wartości z parametrów, zmiennych lub bieżącego wdrożenia, zobacz Funkcje wartości wdrożenia.
Aby uzyskać wartości zakresu wdrożenia, zobacz Funkcje zakresu.
Napiwek
Zalecamy Bicep , ponieważ oferuje te same możliwości co szablony usługi ARM, a składnia jest łatwiejsza w użyciu. Aby dowiedzieć się więcej, zobacz funkcje zasobów .
extensionResourceId
extensionResourceId(baseResourceId, resourceType, resourceName1, [resourceName2], ...)
Zwraca identyfikator zasobu dla zasobu rozszerzenia. Zasób rozszerzenia to typ zasobu, który jest stosowany do innego zasobu w celu dodania do jego możliwości.
W pliku Bicep użyj funkcji extensionResourceId .
Parametry
Parametr | Wymagania | Type | Opis |
---|---|---|---|
baseResourceId | Tak | string | Identyfikator zasobu, do którego jest stosowany zasób rozszerzenia. |
resourceType | Tak | string | Typ zasobu rozszerzenia, w tym przestrzeń nazw dostawcy zasobów. |
resourceName1 | Tak | string | Nazwa zasobu rozszerzenia. |
resourceName2 | Nie. | string | W razie potrzeby następny segment nazw zasobów. |
Kontynuuj dodawanie nazw zasobów jako parametrów, gdy typ zasobu zawiera więcej segmentów.
Wartość zwracana
Podstawowy format identyfikatora zasobu zwróconego przez tę funkcję to:
{scope}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}
Segment zakresu zależy od rozszerzonego zasobu podstawowego. Na przykład identyfikator subskrypcji ma inne segmenty niż identyfikator grupy zasobów.
Po zastosowaniu zasobu rozszerzenia do zasobu identyfikator zasobu jest zwracany w następującym formacie:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{baseResourceProviderNamespace}/{baseResourceType}/{baseResourceName}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}
Po zastosowaniu zasobu rozszerzenia do grupy zasobów zwracany format to:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}
Przykład użycia tej funkcji z grupą zasobów jest wyświetlany w następnej sekcji.
Po zastosowaniu zasobu rozszerzenia do subskrypcji zwracany format to:
/subscriptions/{subscriptionId}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}
Po zastosowaniu zasobu rozszerzenia do grupy zarządzania zwracany format to:
/providers/Microsoft.Management/managementGroups/{managementGroupName}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}
Przykład użycia tej funkcji z grupą zarządzania jest wyświetlany w następnej sekcji.
extensionResourceId — przykład
Poniższy przykład zwraca identyfikator zasobu dla blokady grupy zasobów.
{
"$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'))]"
}
}
}
Niestandardowa definicja zasad wdrożona w grupie zarządzania jest implementowana jako zasób rozszerzenia. Aby utworzyć i przypisać zasady, wdróż następujący szablon w grupie zarządzania.
{
"$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'))]"
]
}
]
}
Wbudowane definicje zasad to zasoby na poziomie dzierżawy. Aby zapoznać się z przykładem wdrażania wbudowanej definicji zasad, zobacz tenantResourceId.
lista*
list{Value}(resourceName or resourceIdentifier, apiVersion, functionValues)
Składnia tej funkcji różni się w zależności od nazwy operacji listy. Każda implementacja zwraca wartości dla typu zasobu, który obsługuje operację listy. Nazwa operacji musi zaczynać się od list
i może mieć sufiks. Niektóre typowe zastosowania to list
, , listKeys
listKeyValue
i listSecrets
.
W aplikacji Bicep użyj funkcji list* .
Parametry
Parametr | Wymagania | Type | Opis |
---|---|---|---|
resourceName lub resourceIdentifier | Tak | string | Unikatowy identyfikator zasobu. |
apiVersion | Tak | string | Wersja interfejsu API stanu środowiska uruchomieniowego zasobów. Zazwyczaj w formacie rrrr-mm-dd. |
functionValues | Nie. | obiekt | Obiekt, który ma wartości dla funkcji. Udostępniaj ten obiekt tylko dla funkcji, które obsługują odbieranie obiektu z wartościami parametrów, takimi jak listAccountSas na koncie magazynu. Przykład przekazywania wartości funkcji jest pokazany w tym artykule. |
Prawidłowe zastosowania
Funkcje listy mogą być używane we właściwościach definicji zasobu. Nie używaj funkcji listy, która uwidacznia poufne informacje w sekcji danych wyjściowych szablonu. Wartości wyjściowe są przechowywane w historii wdrożenia i mogą być pobierane przez złośliwego użytkownika.
W przypadku użycia z iteracją właściwości można użyć funkcji listy, input
ponieważ wyrażenie jest przypisane do właściwości zasobu. Nie można ich używać, count
ponieważ liczba musi zostać określona przed rozwiązaniem funkcji list.
Implementacje
Możliwe zastosowania programu list*
przedstawiono w poniższej tabeli.
Typ zasobu | Nazwa funkcji |
---|---|
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/rejestry | listCredentials |
Microsoft.ContainerRegistry/rejestry | listUsages |
Microsoft.ContainerRegistry/registries/agentpools | listQueueStatus |
Microsoft.ContainerRegistry/registries/buildTasks | listSourceRepositoryProperties |
Microsoft.ContainerRegistry/registries/buildTasks/steps | listBuildArguments |
Microsoft.ContainerRegistry/registries/taskruns | listDetails |
Microsoft.ContainerRegistry/registries/webhooks | listEvents |
Microsoft.ContainerRegistry/registries/runs | listLogSasUrl |
Microsoft.ContainerRegistry/rejestry/zadania | 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 | 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/przestrzenie nazw/authorizationRules | listKeys |
Microsoft.EventHub/przestrzenie nazw/disasterRecoveryConfigs/authorizationRules | listKeys |
Microsoft.EventHub/namespaces/eventhubs/authorizationRules | listKeys |
Microsoft.ImportExport/jobs | listBitLockerKeys |
Microsoft.Kusto/Clusters/Databases | ListPrincipals |
Microsoft.LabServices/labs/users | lista |
Microsoft.LabServices/labs/virtualMachines | lista |
Microsoft.Logic/integrationAccounts/agreement | listContentCallbackUrl |
Microsoft.Logic/integrationAccounts/assemblies | listContentCallbackUrl |
Microsoft.Logic/integrationAccounts | listCallbackUrl |
Microsoft.Logic/integrationAccounts | listKeyVaultKeys |
Microsoft.Logic/integrationAccounts/maps | listContentCallbackUrl |
Microsoft.Logic/integrationAccounts/partners | listContentCallbackUrl |
Microsoft.Logic/integrationAccounts/schemas | listContentCallbackUrl |
Microsoft.Logic/workflows | listCallbackUrl |
Microsoft.Logic/workflows | listSwagger |
Microsoft.Logic/workflows/runs/actions | listExpressionTraces |
Microsoft.Logic/workflows/runs/actions/repetitions | listExpressionTraces |
Microsoft.Logic/workflows/triggers | listCallbackUrl |
Microsoft.Logic/workflows/versions/triggers | listCallbackUrl |
Microsoft.MachineLearning/webServices | listkeys |
Microsoft.MachineLearning/Workspaces | listworkspacekeys |
Microsoft.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/Przestrzenie nazw/authorizationRules | listkeys |
Microsoft.NotificationHubs/Przestrzenie nazw/NotificationHubs/authorizationRules | listkeys |
Microsoft.OperationalInsights/workspaces | lista |
Microsoft.OperationalInsights/workspaces | listKeys |
Microsoft.PolicyInsights/korygowania | listDeployments |
Microsoft.RedHatOpenShift/openShiftClusters | listCredentials |
Microsoft.Relay/przestrzenie nazw/authorizationRules | listKeys |
Microsoft.Relay/przestrzenie nazw/disasterRecoveryConfigs/authorizationRules | listKeys |
Microsoft.Relay/przestrzenie nazw/HybridConnections/authorizationRules | listKeys |
Microsoft.Relay/przestrzenie nazw/WcfRelays/authorizationRules | listkeys |
Microsoft.Search/searchServices | listAdminKeys |
Microsoft.Search/searchServices | listQueryKeys |
Microsoft.ServiceBus/namespaces/authorizationRules | listKeys |
Microsoft.ServiceBus/przestrzenie nazw/disasterRecoveryConfigs/authorizationRules | listKeys |
Microsoft.ServiceBus/przestrzenie nazw/kolejki/autoryzacjaRules | 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/menedżerowie | listActivationKey |
Microsoft.StorSimple/menedżerowie | listPublicEncryptionKey |
Microsoft.Synapse/workspaces/integrationRuntimes | listAuthKeys |
Microsoft.Web/connectionGateways | ListStatus |
microsoft.web/connections | listconsentlinks |
Microsoft.Web/customApis | listWsdlInterfaces |
microsoft.web/locations | listwsdlinterfaces |
microsoft.web/apimanagementaccounts/apis/connections | listconnectionkeys |
microsoft.web/apimanagementaccounts/apis/connections | listSecrets |
microsoft.web/sites/backups | lista |
Microsoft.Web/sites/config | lista |
microsoft.web/sites/functions | listKeys |
microsoft.web/sites/functions | listSecrets |
microsoft.web/sites/hybridconnectionnamespaces/relays | listKeys |
microsoft.web/sites | listsyncfunctiontriggerstatus |
microsoft.web/sites/slots/functions | listSecrets |
microsoft.web/sites/slots/backups | lista |
Microsoft.Web/sites/slots/config | lista |
microsoft.web/sites/slots/functions | listSecrets |
Aby określić, które typy zasobów mają operację listy, dostępne są następujące opcje:
Wyświetl operacje interfejsu API REST dla dostawcy zasobów i poszukaj operacji listy. Na przykład konta magazynu mają operację listKeys.
Użyj polecenia cmdlet Get-AzProviderOperation programu PowerShell. Poniższy przykład pobiera wszystkie operacje listy dla kont magazynu:
Get-AzProviderOperation -OperationSearchString "Microsoft.Storage/*" | where {$_.Operation -like "*list*"} | FT Operation
Użyj następującego polecenia interfejsu wiersza polecenia platformy Azure, aby filtrować tylko operacje listy:
az provider operation show --namespace Microsoft.Storage --query "resourceTypes[?name=='storageAccounts'].operations[].name | [?contains(@, 'list')]"
Wartość zwracana
Zwrócony obiekt różni się w zależności od używanej list
funkcji. Na przykład dla listKeys
konta magazynu zwraca następujący format:
{
"keys": [
{
"keyName": "key1",
"permissions": "Full",
"value": "{value}"
},
{
"keyName": "key2",
"permissions": "Full",
"value": "{value}"
}
]
}
Inne list
funkcje mają różne formaty zwracane. Aby wyświetlić format funkcji, dołącz ją do sekcji danych wyjściowych, jak pokazano w przykładowym szablonie.
Uwagi
Określ zasób przy użyciu nazwy zasobu lub funkcji resourceId. W przypadku korzystania z list
funkcji w tym samym szablonie, który wdraża przywołyny zasób, użyj nazwy zasobu.
Jeśli używasz list
funkcji w zasobie, który jest wdrażany warunkowo, funkcja jest oceniana nawet wtedy, gdy zasób nie został wdrożony. Jeśli funkcja odwołuje się do zasobu, który nie istnieje, występuje błąd list
. if
Użyj funkcji , aby upewnić się, że funkcja jest oceniana tylko podczas wdrażania zasobu. Zobacz funkcję if dla przykładowego szablonu, który używa if
elementu i list
z warunkowo wdrożonym zasobem.
Przykład listy
W poniższym przykładzie użyto listKeys
ustawienia wartości dla skryptów wdrażania.
"storageAccountSettings": {
"storageAccountName": "[variables('storageAccountName')]",
"storageAccountKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), '2019-06-01').keys[0].value]"
}
W następnym przykładzie pokazano list
funkcję, która przyjmuje parametr. W tym przypadku funkcja to listAccountSas
. Przekaż obiekt przez czas wygaśnięcia. Czas wygaśnięcia musi być w przyszłości.
"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])
Określa, czy typ zasobu obsługuje strefy dla określonej lokalizacji lub regionu. Ta funkcja obsługuje tylko zasoby strefowe. Usługi strefowo nadmiarowe zwracają pustą tablicę. Aby uzyskać więcej informacji, zobacz Usługi platformy Azure, które obsługują strefy dostępności.
W Bicep użyj funkcji pickZones .
Parametry
Parametr | Wymagania | Type | Opis |
---|---|---|---|
providerNamespace | Tak | string | Przestrzeń nazw dostawcy zasobów dla typu zasobu, aby sprawdzić obsługę strefy. |
resourceType | Tak | string | Typ zasobu do sprawdzania obsługi strefy. |
lokalizacja | Tak | string | Region, w którym ma być sprawdzana obsługa stref. |
numberOfZones | Nie. | integer | Liczba stref logicznych do zwrócenia. Wartość domyślna to 1. Liczba musi być dodatnią liczbą całkowitą z zakresu od 1 do 3. Użyj 1 dla zasobów z jedną strefą. W przypadku zasobów wielostrefowych wartość musi być mniejsza lub równa liczbie obsługiwanych stref. |
offset | Nie. | integer | Przesunięcie z początkowej strefy logicznej. Funkcja zwraca błąd, jeśli przesunięcie plus numberOfZones przekracza liczbę obsługiwanych stref. |
Wartość zwracana
Tablica z obsługiwanymi strefami. W przypadku używania wartości domyślnych dla przesunięcia i numberOfZones
, typ zasobu i region, który obsługuje strefy, zwraca następującą tablicę:
[
"1"
]
numberOfZones
Gdy parametr jest ustawiony na wartość 3, zwraca:
[
"1",
"2",
"3"
]
Gdy typ zasobu lub region nie obsługuje stref, zwracana jest pusta tablica. Pusta tablica jest również zwracana dla strefowo nadmiarowych usług.
[
]
Uwagi
Istnieją różne kategorie dla usługi Azure Strefy dostępności — strefowe i strefowo nadmiarowe. Funkcja pickZones
może służyć do zwracania strefy dostępności dla zasobu strefowego. W przypadku strefowo nadmiarowych usług (ZRS) funkcja zwraca pustą tablicę. Zasoby strefowe zwykle mają zones
właściwość na najwyższym poziomie definicji zasobu. Aby określić kategorię obsługi stref dostępności, zobacz Usługi platformy Azure, które obsługują strefy dostępności.
Aby określić, czy dany region lub lokalizacja platformy Azure obsługuje strefy dostępności, wywołaj pickZones
funkcję z typem zasobu strefowego, takim jak Microsoft.Network/publicIPAddresses
. Jeśli odpowiedź nie jest pusta, region obsługuje strefy dostępności.
przykład pickZones
Poniższy szablon przedstawia trzy wyniki użycia pickZones
funkcji.
{
"$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')]"
}
}
}
Dane wyjściowe z powyższych przykładów zwracają trzy tablice.
Nazwisko | Typ | Wartość |
---|---|---|
Obsługiwane | tablica | [ "1" ] |
notSupportedRegion | tablica | [] |
notSupportedType | tablica | [] |
Możesz użyć odpowiedzi z pickZones
, aby określić, czy zapewnić wartość null dla stref, czy przypisać maszyny wirtualne do różnych stref. W poniższym przykładzie ustawiono wartość strefy na podstawie dostępności stref.
"zones": {
"value": "[if(not(empty(pickZones('Microsoft.Compute', 'virtualMachines', 'westus2'))), string(add(mod(copyIndex(),3),1)), json('null'))]"
},
Usługa Azure Cosmos DB nie jest zasobem strefowym, ale możesz użyć pickZones
funkcji , aby określić, czy włączyć nadmiarowość strefy dla georeplikacji. Przekaż typ zasobu Microsoft.Storage/storageAccounts, aby określić, czy włączyć nadmiarowość strefy.
"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')]"
}
}
]
dostawców
Funkcja providers została przestarzała w szablonach usługi ARM. Nie zalecamy już korzystania z niego. Jeśli używasz tej funkcji do pobrania wersji interfejsu API dla dostawcy zasobów, zalecamy podanie określonej wersji interfejsu API w szablonie. Użycie dynamicznie zwracanej wersji interfejsu API może spowodować przerwanie szablonu, jeśli właściwości zmienią się między wersjami.
W Bicep funkcja providers jest przestarzała.
Operacja dostawców jest nadal dostępna za pośrednictwem interfejsu API REST. Można go użyć poza szablonem usługi ARM, aby uzyskać informacje o dostawcy zasobów.
reference
W szablonach bez nazw symbolicznych:
reference(resourceName or resourceIdentifier, [apiVersion], ['Full'])
W szablonach z nazwami symbolicznymi:
reference(symbolicName or resourceIdentifier, [apiVersion], ['Full'])
Zwraca obiekt reprezentujący stan środowiska uruchomieniowego zasobu. Dane wyjściowe i zachowanie reference
funkcji bardzo zależy od tego, jak każdy dostawca zasobów implementuje odpowiedzi PUT i GET. Aby zwrócić tablicę obiektów reprezentujących stany środowiska uruchomieniowego kolekcji zasobów, zobacz odwołania.
Bicep udostępnia funkcję referencyjną, ale w większości przypadków funkcja referencyjna nie jest wymagana. Zaleca się zamiast tego użycie nazwy symbolicznej zasobu. Zobacz dokumentację.
Parametry
Parametr | Wymagania | Type | Opis |
---|---|---|---|
resourceName/resourceIdentifier lub symbolicName/resourceIdentifier | Tak | string | W szablonach bez nazw symbolicznych określ nazwę lub unikatowy identyfikator zasobu. Podczas odwoływania się do zasobu w bieżącym szablonie podaj tylko nazwę zasobu jako parametr. W przypadku odwoływania się do wcześniej wdrożonego zasobu lub gdy nazwa zasobu jest niejednoznaczna, podaj identyfikator zasobu. W szablonach z nazwami symbolicznymi określ nazwę symboliczną lub unikatowy identyfikator zasobu. Podczas odwoływania się do zasobu w bieżącym szablonie podaj tylko nazwę symboliczną zasobu jako parametr. W przypadku odwoływania się do wcześniej wdrożonego zasobu podaj identyfikator zasobu. |
apiVersion | Nie. | string | Wersja interfejsu API określonego zasobu. Ten parametr jest wymagany, gdy zasób nie jest aprowizowany w ramach tego samego szablonu. Zazwyczaj w formacie rrrr-mm-dd. Aby uzyskać prawidłowe wersje interfejsu API dla zasobu, zobacz dokumentację szablonu. |
"Pełny" | Nie. | string | Wartość określająca, czy zwracać pełny obiekt zasobu. Jeśli nie określisz 'Full' parametru , zwracany jest tylko obiekt właściwości zasobu. Pełny obiekt zawiera wartości, takie jak identyfikator zasobu i lokalizacja. |
Wartość zwracana
Każdy typ zasobu zwraca różne właściwości funkcji referencyjnej. Funkcja nie zwraca pojedynczego, wstępnie zdefiniowanego formatu. Zwracana wartość różni się również na podstawie wartości argumentu 'Full'
. Aby wyświetlić właściwości typu zasobu, zwróć obiekt w sekcji danych wyjściowych, jak pokazano w przykładzie.
Uwagi
Funkcja referencyjna pobiera stan środowiska uruchomieniowego wcześniej wdrożonego zasobu lub zasobu wdrożonego w bieżącym szablonie. W tym artykule przedstawiono przykłady dla obu scenariuszy.
Zazwyczaj funkcja służy reference
do zwracania określonej wartości z obiektu, takiego jak identyfikator URI punktu końcowego obiektu blob lub w pełni kwalifikowana nazwa domeny.
"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]"
}
}
Użyj 'Full'
wartości, jeśli potrzebujesz wartości zasobów, które nie są częścią schematu właściwości. Aby na przykład ustawić zasady dostępu do magazynu kluczy, pobierz właściwości tożsamości dla maszyny wirtualnej.
{
"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"
]
}
}
],
...
Prawidłowe zastosowania
Funkcja reference
może być używana tylko w sekcji danych wyjściowych szablonu lub wdrożenia i obiektu właściwości definicji zasobu. Nie można jej używać dla właściwości zasobów, takich jak type
, name
location
i inne właściwości najwyższego poziomu definicji zasobu. W przypadku użycia z iteracją właściwości można użyć reference
funkcji , input
ponieważ wyrażenie jest przypisane do właściwości zasobu.
Nie można użyć reference
funkcji, aby ustawić wartość count
właściwości w pętli kopiowania. Możesz użyć polecenia , aby ustawić inne właściwości w pętli. Odwołanie jest zablokowane dla właściwości count, ponieważ ta właściwość musi zostać określona przed rozwiązaniem reference
funkcji.
Aby użyć reference
funkcji lub dowolnej list*
funkcji w sekcji danych wyjściowych szablonu zagnieżdżonego, należy ustawić expressionEvaluationOptions
parametr , aby używać oceny zakresu wewnętrznego lub użyć połączonego zamiast szablonu zagnieżdżonego.
Jeśli używasz reference
funkcji w zasobie, który jest wdrażany warunkowo, funkcja jest oceniana nawet wtedy, gdy zasób nie został wdrożony. Jeśli funkcja odwołuje się do zasobu, który nie istnieje, występuje błąd reference
. if
Użyj funkcji , aby upewnić się, że funkcja jest oceniana tylko podczas wdrażania zasobu. Zobacz funkcję if dla przykładowego szablonu, który używa if
elementu i reference
z warunkowo wdrożonym zasobem.
Zależność niejawna
Korzystając z reference
funkcji, niejawnie deklarujesz, że jeden zasób zależy od innego zasobu, jeśli przywoływanego zasobu jest aprowizowane w ramach tego samego szablonu i odwołujesz się do zasobu według jego nazwy (a nie identyfikatora zasobu). Nie musisz również używać dependsOn
właściwości . Funkcja nie jest oceniana do momentu ukończenia wdrożenia przywołytowanego zasobu.
Nazwa zasobu, nazwa symboliczna lub identyfikator
W przypadku odwoływania się do zasobu wdrożonego w tym samym szablonie none-symbolicznej nazwy podaj nazwę zasobu.
"value": "[reference(parameters('storageAccountName'))]"
W przypadku odwoływania się do zasobu wdrożonego w tym samym szablonie o tej samej nazwie symbolicznej podaj symboliczną nazwę zasobu.
"value": "[reference('myStorage').primaryEndpoints]"
Or
"value": "[reference('myStorage', '2022-09-01', 'Full').location]"
W przypadku odwoływania się do zasobu, który nie został wdrożony w tym samym szablonie, podaj identyfikator zasobu i apiVersion
.
"value": "[reference(resourceId(parameters('storageResourceGroup'), 'Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2022-09-01')]"
Aby uniknąć niejednoznaczności co do którego zasobu odwołujesz się, możesz podać w pełni kwalifikowany identyfikator zasobu.
"value": "[reference(resourceId('Microsoft.Network/publicIPAddresses', parameters('ipAddressName')))]"
Podczas konstruowania w pełni kwalifikowanego odwołania do zasobu kolejność łączenia segmentów z typu i nazwy nie jest po prostu łączeniem tych dwóch segmentów. Zamiast tego, po przestrzeni nazw, należy użyć sekwencji par typów/nazw z najmniej specyficznych do najbardziej specyficznych:
{resource-provider-namespace}/{parent-resource-type}/{parent-resource-name}[/{child-resource-type}/{child-resource-name}]
Na przykład:
Microsoft.Compute/virtualMachines/myVM/extensions/myExt
jest poprawna, jest niepoprawna Microsoft.Compute/virtualMachines/extensions/myVM/myExt
Aby uprościć tworzenie dowolnego identyfikatora zasobu, użyj resourceId()
funkcji opisanych w tym dokumencie zamiast concat()
funkcji.
Uzyskiwanie tożsamości zarządzanej
Tożsamości zarządzane dla zasobów platformy Azure to typy zasobów rozszerzeń tworzone niejawnie dla niektórych zasobów. Ponieważ tożsamość zarządzana nie jest jawnie zdefiniowana w szablonie, należy odwołać się do zasobu, do którego jest stosowana tożsamość. Użyj Full
polecenia , aby pobrać wszystkie właściwości, w tym niejawnie utworzoną tożsamość.
Wzorzec to:
"[reference(resourceId(<resource-provider-namespace>, <resource-name>), <API-version>, 'Full').Identity.propertyName]"
Aby na przykład uzyskać identyfikator podmiotu zabezpieczeń dla tożsamości zarządzanej, która jest stosowana do maszyny wirtualnej, użyj:
"[reference(resourceId('Microsoft.Compute/virtualMachines', variables('vmName')),'2019-12-01', 'Full').identity.principalId]",
Aby uzyskać identyfikator dzierżawy dla tożsamości zarządzanej, która jest stosowana do zestawu skalowania maszyn wirtualnych, użyj:
"[reference(resourceId('Microsoft.Compute/virtualMachineScaleSets', variables('vmNodeType0Name')), 2019-12-01, 'Full').Identity.tenantId]"
Przykład odwołania
W poniższym przykładzie wdrożono zasób i odwołuje się do tego zasobu.
{
"$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')]"
}
}
}
Powyższy przykład zwraca dwa obiekty. Obiekt properties ma następujący format:
{
"creationTime": "2017-10-09T18:55:40.5863736Z",
"primaryEndpoints": {
"blob": "https://examplestorage.blob.core.windows.net/",
"file": "https://examplestorage.file.core.windows.net/",
"queue": "https://examplestorage.queue.core.windows.net/",
"table": "https://examplestorage.table.core.windows.net/"
},
"primaryLocation": "southcentralus",
"provisioningState": "Succeeded",
"statusOfPrimary": "available",
"supportsHttpsTrafficOnly": false
}
Pełny obiekt ma następujący format:
{
"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"
}
Poniższy przykładowy szablon odwołuje się do konta magazynu, które nie zostało wdrożone w tym szablonie. Konto magazynu już istnieje w ramach tej samej subskrypcji.
{
"$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')]"
}
}
}
odwołania
references(symbolic name of a resource collection, ['Full', 'Properties])
Funkcja references
działa podobnie jak reference
. Zamiast zwracać obiekt przedstawiający stan środowiska uruchomieniowego zasobu, references
funkcja zwraca tablicę obiektów reprezentujących stany środowiska uruchomieniowego kolekcji zasobów. Ta funkcja wymaga wersji 2.0
języka szablonu usługi ARM i z włączoną nazwą symboliczną:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"languageVersion": "2.0",
"contentVersion": "1.0.0.0",
...
}
W Bicep nie ma jawnej references
funkcji. Zamiast tego użycie kolekcji symbolicznej jest stosowane bezpośrednio, a podczas generowania kodu Bicep tłumaczy go na szablon usługi ARM, który korzysta z funkcji szablonu references
usługi ARM. Aby uzyskać więcej informacji, zobacz Odwołania do kolekcji zasobów/modułów.
Parametry
Parametr | Wymagania | Type | Opis |
---|---|---|---|
Symboliczna nazwa kolekcji zasobów | Tak | string | Symboliczna nazwa kolekcji zasobów zdefiniowanej w bieżącym szablonie. Funkcja references nie obsługuje odwoływania się do zasobów zewnętrznych z bieżącym szablonem. |
"Full", "Properties" | Nie. | string | Wartość określająca, czy zwracać tablicę pełnych obiektów zasobów. Domyślna wartość to 'Properties' . Jeśli nie określisz 'Full' parametru , zwracane są tylko obiekty właściwości zasobów. Pełny obiekt zawiera wartości, takie jak identyfikator zasobu i lokalizacja. |
Wartość zwracana
Tablica kolekcji zasobów. Każdy typ zasobu zwraca różne właściwości funkcji reference
. Zwracana wartość różni się również na podstawie wartości argumentu 'Full'
. Aby uzyskać więcej informacji, zobacz dokumentację.
Kolejność danych wyjściowych references
elementu jest zawsze rozmieszczana w kolejności rosnącej na podstawie indeksu kopiowania. W związku z tym pierwszy zasób w kolekcji z indeksem 0 jest wyświetlany jako pierwszy, po którym następuje indeks 1 itd. Na przykład [worker-0, worker-1, worker-2, ...].
W poprzednim przykładzie, jeśli proces roboczy-0 i proces roboczy-2 są wdrażane, podczas gdy proces roboczy-1 nie jest spowodowany fałszywym warunkiem, dane wyjściowe references
polecenia spowodują pominięcie niedróżnie wdrożonego zasobu i wyświetlenie wdrożonych zasobów uporządkowanych według ich liczb. Dane wyjściowe references
to [worker-0, worker-2, ...]. Jeśli wszystkie zasoby zostaną pominięte, funkcja zwróci pustą tablicę.
Prawidłowe zastosowania
Funkcji references
nie można używać w pętlach kopiowania zasobów ani w pętli Bicep. Na przykład references
nie jest dozwolone w następującym scenariuszu:
{
resources: {
"resourceCollection": {
"copy": { ... },
"properties": {
"prop": "[references(...)]"
}
}
}
}
Aby użyć references
funkcji lub dowolnej list*
funkcji w sekcji danych wyjściowych szablonu zagnieżdżonego, należy ustawić expressionEvaluationOptions
parametr , aby używać oceny zakresu wewnętrznego lub użyć połączonego zamiast szablonu zagnieżdżonego.
Zależność niejawna
Korzystając z references
funkcji, niejawnie deklarujesz, że jeden zasób zależy od innego zasobu. Nie musisz również używać dependsOn
właściwości . Funkcja nie jest oceniana do momentu ukończenia wdrożenia przywołytowanego zasobu.
Przykład odwołania
Poniższy przykład wdraża kolekcję zasobów i odwołuje się do tej kolekcji zasobów.
{
"$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')]"
}
}
}
Powyższy przykład zwraca trzy obiekty.
"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
Zobacz funkcję zakresu resourceGroup.
W Bicep użyj funkcji zakresu grupy zasobów.
resourceId
resourceId([subscriptionId], [resourceGroupName], resourceType, resourceName1, [resourceName2], ...)
Zwraca unikatowy identyfikator zasobu. Ta funkcja jest używana, gdy nazwa zasobu jest niejednoznaczna lub nie jest aprowizowana w ramach tego samego szablonu. Format zwróconego identyfikatora różni się w zależności od tego, czy wdrożenie odbywa się w zakresie grupy zasobów, subskrypcji, grupy zarządzania lub dzierżawy.
W Bicep użyj funkcji resourceId .
Parametry
Parametr | Wymagania | Type | Opis |
---|---|---|---|
subscriptionId | Nie. | string (w formacie GUID) | Wartość domyślna to bieżąca subskrypcja. Określ tę wartość, gdy musisz pobrać zasób w innej subskrypcji. Podaj tę wartość tylko podczas wdrażania w zakresie grupy zasobów lub subskrypcji. |
resourceGroupName | Nie. | string | Wartość domyślna to bieżąca grupa zasobów. Określ tę wartość, gdy musisz pobrać zasób w innej grupie zasobów. Podaj tę wartość tylko podczas wdrażania w zakresie grupy zasobów. |
resourceType | Tak | string | Typ zasobu, w tym przestrzeń nazw dostawcy zasobów. |
resourceName1 | Tak | string | Nazwa zasobu. |
resourceName2 | Nie. | string | W razie potrzeby następny segment nazw zasobów. |
Kontynuuj dodawanie nazw zasobów jako parametrów, gdy typ zasobu zawiera więcej segmentów.
Wartość zwracana
Identyfikator zasobu jest zwracany w różnych formatach w różnych zakresach:
Zakres grupy zasobów:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
Zakres subskrypcji:
/subscriptions/{subscriptionId}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
Zakres grupy zarządzania lub dzierżawy:
/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
Aby uniknąć nieporozumień, zalecamy, aby nie używać resourceId
ich podczas pracy z zasobami wdrożonym w subskrypcji, grupie zarządzania lub dzierżawie. Zamiast tego należy użyć funkcji ID, która jest przeznaczona dla zakresu.
- W przypadku zasobów na poziomie subskrypcji użyj funkcji subscriptionResourceId.
- W przypadku zasobów na poziomie grupy zarządzania użyj funkcji managementGroupResourceId. Użyj funkcji extensionResourceId, aby odwołać się do zasobu zaimplementowanego jako rozszerzenie grupy zarządzania. Na przykład niestandardowe definicje zasad wdrażane w grupie zarządzania to rozszerzenia grupy zarządzania. Użyj funkcji tenantResourceId, aby odwołać się do zasobów wdrożonych w dzierżawie, ale dostępnych w grupie zarządzania. Na przykład wbudowane definicje zasad są implementowane jako zasoby na poziomie dzierżawy.
- W przypadku zasobów na poziomie dzierżawy użyj funkcji tenantResourceId . Służy
tenantResourceId
do wbudowanych definicji zasad, ponieważ są one implementowane na poziomie dzierżawy.
Uwagi
Liczba parametrów, które podajesz, różni się w zależności od tego, czy zasób jest zasobem nadrzędnym, czy podrzędnym, i czy zasób znajduje się w tej samej subskrypcji lub grupie zasobów.
Aby uzyskać identyfikator zasobu dla zasobu nadrzędnego w tej samej subskrypcji i grupie zasobów, podaj typ i nazwę zasobu.
"[resourceId('Microsoft.ServiceBus/namespaces', 'namespace1')]"
Aby uzyskać identyfikator zasobu podrzędnego, zwróć uwagę na liczbę segmentów w typie zasobu. Podaj nazwę zasobu dla każdego segmentu typu zasobu. Nazwa segmentu odpowiada zasobowi, który istnieje dla tej części hierarchii.
"[resourceId('Microsoft.ServiceBus/namespaces/queues/authorizationRules', 'namespace1', 'queue1', 'auth1')]"
Aby uzyskać identyfikator zasobu dla zasobu w tej samej subskrypcji, ale innej grupie zasobów, podaj nazwę grupy zasobów.
"[resourceId('otherResourceGroup', 'Microsoft.Storage/storageAccounts', 'examplestorage')]"
Aby uzyskać identyfikator zasobu dla zasobu w innej subskrypcji i grupie zasobów, podaj identyfikator subskrypcji i nazwę grupy zasobów.
"[resourceId('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', 'otherResourceGroup', 'Microsoft.Storage/storageAccounts','examplestorage')]"
Często należy użyć tej funkcji podczas korzystania z konta magazynu lub sieci wirtualnej w alternatywnej grupie zasobów. W poniższym przykładzie pokazano, jak można łatwo użyć zasobu z zewnętrznej grupy zasobów:
{
"$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')]"
}
}
}
]
}
}
]
}
Przykład identyfikatora zasobu
Poniższy przykład zwraca identyfikator zasobu dla konta magazynu w grupie zasobów:
{
"$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')]"
}
}
}
Dane wyjściowe z poprzedniego przykładu z wartościami domyślnymi to:
Nazwisko | Typ | Wartość |
---|---|---|
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/aaaa0a0a-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 |
subskrypcja
Zobacz funkcję zakresu subskrypcji.
W aplikacji Bicep użyj funkcji zakresu subskrypcji .
subscriptionResourceId
subscriptionResourceId([subscriptionId], resourceType, resourceName1, [resourceName2], ...)
Zwraca unikatowy identyfikator zasobu wdrożonego na poziomie subskrypcji.
W Bicep użyj funkcji subscriptionResourceId .
Parametry
Parametr | Wymagania | Type | Opis |
---|---|---|---|
subscriptionId | Nie. | ciąg (w formacie GUID) | Wartość domyślna to bieżąca subskrypcja. Określ tę wartość, gdy musisz pobrać zasób w innej subskrypcji. |
resourceType | Tak | string | Typ zasobu, w tym przestrzeń nazw dostawcy zasobów. |
resourceName1 | Tak | string | Nazwa zasobu. |
resourceName2 | Nie. | string | W razie potrzeby następny segment nazw zasobów. |
Kontynuuj dodawanie nazw zasobów jako parametrów, gdy typ zasobu zawiera więcej segmentów.
Wartość zwracana
Identyfikator jest zwracany w następującym formacie:
/subscriptions/{subscriptionId}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
Uwagi
Ta funkcja służy do pobierania identyfikatora zasobu dla zasobów wdrożonych w subskrypcji , a nie grupy zasobów. Zwrócony identyfikator różni się od wartości zwracanej przez funkcję resourceId , nie uwzględniając wartości grupy zasobów.
przykład subscriptionResourceID
Poniższy szablon przypisuje wbudowaną rolę. Można go wdrożyć w grupie zasobów lub subskrypcji. Używa subscriptionResourceId
funkcji , aby uzyskać identyfikator zasobu dla ról wbudowanych.
{
"$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], ...)
Zwraca unikatowy identyfikator zasobu wdrożonego na poziomie grupy zarządzania.
W Bicep użyj funkcji managementGroupResourceId .
Parametry
Parametr | Wymagania | Type | Opis |
---|---|---|---|
managementGroupResourceId | Nie. | ciąg (w formacie GUID) | Wartość domyślna to bieżąca grupa zarządzania. Określ tę wartość, gdy musisz pobrać zasób w innej grupie zarządzania. |
resourceType | Tak | string | Typ zasobu, w tym przestrzeń nazw dostawcy zasobów. |
resourceName1 | Tak | string | Nazwa zasobu. |
resourceName2 | Nie. | string | W razie potrzeby następny segment nazw zasobów. |
Kontynuuj dodawanie nazw zasobów jako parametrów, gdy typ zasobu zawiera więcej segmentów.
Wartość zwracana
Identyfikator jest zwracany w następującym formacie:
/providers/Microsoft.Management/managementGroups/{managementGroupName}/providers/{resourceType}/{resourceName}
Uwagi
Ta funkcja służy do pobierania identyfikatora zasobu dla zasobów wdrożonych w grupie zarządzania, a nie grupy zasobów. Zwrócony identyfikator różni się od wartości zwracanej przez funkcję resourceId , nie uwzględniając identyfikatora subskrypcji i wartości grupy zasobów.
przykład managementGroupResourceID
Poniższy szablon tworzy i przypisuje definicję zasad. Używa managementGroupResourceId
funkcji , aby uzyskać identyfikator zasobu dla definicji zasad.
{
"$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], ...)
Zwraca unikatowy identyfikator zasobu wdrożonego na poziomie dzierżawy.
W Bicep użyj funkcji tenantResourceId .
Parametry
Parametr | Wymagania | Type | Opis |
---|---|---|---|
resourceType | Tak | string | Typ zasobu, w tym przestrzeń nazw dostawcy zasobów. |
resourceName1 | Tak | string | Nazwa zasobu. |
resourceName2 | Nie. | string | W razie potrzeby następny segment nazw zasobów. |
Kontynuuj dodawanie nazw zasobów jako parametrów, gdy typ zasobu zawiera więcej segmentów.
Wartość zwracana
Identyfikator jest zwracany w następującym formacie:
/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
Uwagi
Ta funkcja służy do pobierania identyfikatora zasobu dla zasobu wdrożonego w dzierżawie. Zwrócony identyfikator różni się od wartości zwracanych przez inne funkcje identyfikatora zasobu, nie uwzględniając wartości grupy zasobów lub subskrypcji.
przykład tenantResourceId
Wbudowane definicje zasad to zasoby na poziomie dzierżawy. Aby wdrożyć przypisanie zasad odwołujące się do wbudowanej tenantResourceId
definicji zasad, użyj funkcji .
{
"$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'))]"
}
}
]
}
Następne kroki
- Aby zapoznać się z opisem sekcji w szablonie usługi ARM, zobacz Omówienie struktury i składni szablonów usługi ARM.
- Aby scalić wiele szablonów, zobacz Używanie połączonych i zagnieżdżonych szablonów podczas wdrażania zasobów platformy Azure.
- Aby iterować określoną liczbę razy podczas tworzenia typu zasobu, zobacz Iteracja zasobów w szablonach usługi ARM.
- Aby dowiedzieć się, jak wdrożyć utworzony szablon, zobacz Wdrażanie zasobów przy użyciu szablonów usługi ARM i programu Azure PowerShell.