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

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, listKeyValuea 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 listAccountSasfunkce . 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 typejsou , namelocation 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/myExtje 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.

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