ARM şablonları için kaynak işlevleri

Resource Manager, Azure Resource Manager şablonunuzda (ARM şablonu) kaynak değerlerini almak için aşağıdaki işlevleri sağlar:

Parametrelerden, değişkenlerden veya geçerli dağıtımdan değer almak için bkz . Dağıtım değeri işlevleri.

Dağıtım kapsamı değerlerini almak için bkz . Kapsam işlevleri.

İpucu

ARM şablonlarıyla aynı özellikleri sunduğundan ve söz diziminin kullanımı daha kolay olduğundan Bicep'i öneririz. Daha fazla bilgi edinmek için bkz . kaynak işlevleri.

extensionResourceId

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

Uzantı kaynağının kaynak kimliğini döndürür. Uzantı kaynağı, özelliklerine eklemek için başka bir kaynağa uygulanan bir kaynak türüdür.

Bicep'te extensionResourceId işlevini kullanın.

Parametreler

Parametre Zorunlu Türü Açıklama
baseResourceId Yes Dize Uzantı kaynağının uygulandığı kaynağın kaynak kimliği.
resourceType Yes Dize Kaynak sağlayıcısı ad alanı dahil olmak üzere uzantı kaynağının türü.
resourceName1 Yes Dize Uzantı kaynağının adı.
resourceName2 Hayır Dize Gerekirse sonraki kaynak adı segmenti.

Kaynak türü daha fazla segment içerdiğinde kaynak adlarını parametre olarak eklemeye devam edin.

Dönüş değeri

Bu işlev tarafından döndürülen kaynak kimliğinin temel biçimi:

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

Kapsam kesimi, genişletilmekte olan temel kaynağa göre değişir. Örneğin, bir aboneliğin kimliği, kaynak grubunun kimliğinden farklı segmentlere sahiptir.

Uzantı kaynağı bir kaynağa uygulandığında, kaynak kimliği aşağıdaki biçimde döndürülür:

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

Uzantı kaynağı bir kaynak grubuna uygulandığında, döndürülen biçim şöyledir:

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

Bu işlevi bir kaynak grubuyla kullanma örneği sonraki bölümde gösterilmiştir.

Uzantı kaynağı bir aboneliğe uygulandığında, döndürülen biçim şöyledir:

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

Uzantı kaynağı bir yönetim grubuna uygulandığında, döndürülen biçim şöyledir:

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

Bu işlevi bir yönetim grubuyla kullanma örneği sonraki bölümde gösterilmiştir.

extensionResourceId örneği

Aşağıdaki örnek, bir kaynak grubu kilidi için kaynak kimliğini döndürür.

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

Bir yönetim grubuna dağıtılan özel ilke tanımı, uzantı kaynağı olarak uygulanır. İlke oluşturmak ve atamak için aşağıdaki şablonu bir yönetim grubuna dağıtın.

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

Yerleşik ilke tanımları kiracı düzeyinde kaynaklardır. Yerleşik ilke tanımı dağıtma örneği için bkz . tenantResourceId.

Liste*

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

Bu işlevin söz dizimi, liste işlemlerinin adına göre değişir. Her uygulama, bir liste işlemini destekleyen kaynak türü için değerler döndürür. İşlem adı ile list başlamalıdır ve son eki olabilir. Bazı yaygın kullanımlar , listKeys, listKeyValueve listSecretsşeklindedirlist.

Bicep'te list* işlevini kullanın.

Parametreler

Parametre Zorunlu Türü Açıklama
resourceName veya resourceIdentifier Yes Dize Kaynağın benzersiz tanımlayıcısı.
apiVersion Yes Dize Kaynak çalışma zamanı durumunun API sürümü. Normalde, biçiminde, yyyy-mm-dd.
functionValues Hayır nesne İşlev için değerleri olan bir nesne. Bu nesneyi yalnızca depolama hesabı gibi listAccountSas parametre değerlerine sahip bir nesne almayı destekleyen işlevler için sağlayın. Bu makalede işlev değerlerini geçirme örneği gösterilmiştir.

Geçerli kullanımlar

Liste işlevleri bir kaynak tanımının özelliklerinde kullanılabilir. Şablonun çıkışlar bölümünde hassas bilgileri kullanıma sunan bir liste işlevi kullanmayın. Çıkış değerleri dağıtım geçmişinde depolanır ve kötü amaçlı bir kullanıcı tarafından alınabilir.

özellik yinelemesi ile kullanıldığında, ifadesi kaynak özelliğine atandığından için input liste işlevlerini kullanabilirsiniz. Liste işlevi çözümlenmeden önce sayımın belirlenmesi gerektiğinden, bunları ile count kullanamazsınız.

Uygulamalar

olası kullanımları list* aşağıdaki tabloda gösterilmiştir.

Kaynak türü İşlev adı
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/openid Bağlan Providers listSecrets
Microsoft.ApiManagement/service/subscriptions listSecrets
Microsoft.AppConfiguration/configurationStores ListKeys
Microsoft.AppPlatform/Spring listTestKeys
Microsoft.Automation/automationAccounts listKeys
Microsoft.Batch/batchAccounts listKeys
Microsoft.BatchAI/çalışma alanları/denemeler/işler listoutputfiles
Microsoft.BotService/botServices/channels listChannelWithKeys
Microsoft.Cache/redis listKeys
Microsoft.CognitiveServices/accounts listKeys
Microsoft.ContainerRegistry/kayıt defterleri listCredentials
Microsoft.ContainerRegistry/kayıt defterleri 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/web kancaları listEvents
Microsoft.ContainerRegistry/kayıt defterleri/çalıştırmaları listLogSasUrl
Microsoft.ContainerRegistry/kayıt defterleri/görevler listDetails
Microsoft.ContainerService/managedClusters listCluster Yönetici Credential
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 listSourceShareSynchronization Ayarlar
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 list Bağlan ionInfo
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 ListPrincipals
Microsoft.LabServices/labs/users listele
Microsoft.LabServices/labs/virtualMachines listele
Microsoft.Logic/integrationAccounts/agreements listContentCallbackUrl
Microsoft.Logic/integrationAccounts/assemblies listContentCallbackUrl
Microsoft.Logic/integrationAccounts listCallbackUrl
Microsoft.Logic/integrationAccounts listKeyVaultKeys
Microsoft.Logic/integrationAccounts/maps listContentCallbackUrl
Microsoft.Logic/integrationAccounts/partners listContentCallbackUrl
Microsoft.Logic/integrationAccounts/schemas listContentCallbackUrl
Microsoft.Logic/iş akışları listCallbackUrl
Microsoft.Logic/iş akışları 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. Haritalar/hesaplar 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.Operational Analizler/workspaces listele
Microsoft.Operational Analizler/workspaces listKeys
Microsoft.Policy Analizler/düzeltmeler listDeployments
Microsoft.RedHatOpenShift/openShiftClusters listCredentials
Microsoft.Relay/namespaces/authorizationRules listKeys
Microsoft.Relay/namespaces/disasterRecoveryConfigs/authorizationRules listKeys
Microsoft.Relay/ad alanları/Karma Bağlan ions/authorizationRules listKeys
Microsoft.Relay/ad alanları/WcfRelays/authorizationRules listkeys
Microsoft.Search/searchServices list Yönetici Keys
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 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 listele
Microsoft.Web/sites/config listele
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 listele
Microsoft.Web/sites/slots/config listele
microsoft.web/sites/slots/functions listSecrets

Hangi kaynak türlerinin liste işlemi olduğunu belirlemek için aşağıdaki seçeneklere sahipsiniz:

  • Bir kaynak sağlayıcısı için REST API işlemlerini görüntüleyin ve liste işlemlerini arayın. Örneğin, depolama hesaplarının listKeys işlemi vardır.

  • Get-AzProviderOperation PowerShell cmdlet'ini kullanın. Aşağıdaki örnek, depolama hesapları için tüm liste işlemlerini alır:

    Get-AzProviderOperation -OperationSearchString "Microsoft.Storage/*" | where {$_.Operation -like "*list*"} | FT Operation
    
  • Yalnızca liste işlemlerini filtrelemek için aşağıdaki Azure CLI komutunu kullanın:

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

Dönüş değeri

Döndürülen nesne, kullandığınız işleve list göre değişir. Örneğin, listKeys bir depolama hesabı için aşağıdaki biçimi döndürür:

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

Diğer list işlevlerin farklı dönüş biçimleri vardır. bir işlevin biçimini görmek için, örnek şablonda gösterildiği gibi çıkışlar bölümüne ekleyin.

Açıklamalar

Kaynak adını veya resourceId işlevini kullanarak kaynağı belirtin. Başvuruda bulunan kaynağı dağıtan aynı şablonda bir list işlev kullanırken kaynak adını kullanın.

Koşullu olarak dağıtılan bir kaynakta işlev kullanırsanız list , kaynak dağıtılmasa bile işlev değerlendirilir. İşlev var olmayan bir kaynağa başvuruyorsa list bir hata alırsınız. İşlevin if yalnızca kaynak dağıtılırken değerlendirildiğinden emin olmak için işlevini kullanın. Koşullu olarak dağıtılan bir kaynak kullanan if örnek list şablonun if işlevine bakın.

Liste örneği

Aşağıdaki örnek, dağıtım betikleri için bir değer ayarlarken kullanırlistKeys.

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

Sonraki örnekte parametre alan bir list işlev gösterilmektedir. Bu durumda işlevi olur listAccountSas. Bitiş süresi için bir nesne geçirin. Süre sonu süresi gelecekte olmalıdır.

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

Kaynak türünün belirtilen konum veya bölge için bölgeleri destekleyip desteklemediğini belirler. Bu işlev yalnızca bölgesel kaynakları destekler. Alanlar arası yedekli hizmetler boş bir dizi döndürür. Daha fazla bilgi için bkz. Kullanılabilirlik Alanları destekleyen Azure Hizmetleri.

Bicep'te pickZones işlevini kullanın.

Parametreler

Parametre Zorunlu Türü Açıklama
providerNamespace Yes Dize Bölge desteğini denetlemek için kaynak türünün kaynak sağlayıcısı ad alanı.
resourceType Yes Dize Bölge desteğini denetlemek için kaynak türü.
konum Yes Dize Bölge desteği denetlenecek bölge.
numberOfZones Hayır integer Döndürülecek mantıksal bölge sayısı. Varsayılan değer 1'dir. Sayı 1 ile 3 arasından pozitif bir tamsayı olmalıdır. Tek bölgeli kaynaklar için 1 kullanın. Çok bölgeli kaynaklar için değerin desteklenen bölgelerin sayısından küçük veya buna eşit olması gerekir.
fark Hayır integer Başlangıç mantıksal bölgesinden uzaklık. offset plus numberOfZones değeri desteklenen bölgelerin sayısını aşarsa işlev bir hata döndürür.

Dönüş değeri

Desteklenen bölgelere sahip bir dizi. ve numberOfZonesiçin varsayılan değerleri kullanırken, bölgeleri destekleyen bir kaynak türü ve bölgesi aşağıdaki diziyi döndürür:

[
    "1"
]

numberOfZones Parametre 3 olarak ayarlandığında şunu döndürür:

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

Kaynak türü veya bölge bölgeleri desteklemediğinde boş bir dizi döndürülür. Alanlar arası yedekli hizmetler için boş bir dizi de döndürülür.

[
]

Açıklamalar

Azure Kullanılabilirlik Alanları için farklı kategoriler vardır: bölgesel ve alanlar arası yedekli. İşlev, pickZones bölgesel bir kaynağın kullanılabilirlik alanını döndürmek için kullanılabilir. Alanlar arası yedekli hizmetler (ZRS) için işlev boş bir dizi döndürür. Bölgesel kaynaklar genellikle kaynak tanımının en üst düzeyinde bir zones özelliğe sahiptir. Kullanılabilirlik alanları için destek kategorisini belirlemek için bkz. Kullanılabilirlik Alanları destekleyen Azure Hizmetleri.

Belirli bir Azure bölgesinin veya konumunun kullanılabilirlik alanlarını desteklenip desteklemediğini belirlemek için gibi bölgesel bir kaynak türüyle Microsoft.Network/publicIPAddressesişlevini çağırınpickZones. Yanıt boş değilse, bölge kullanılabilirlik alanlarını destekler.

pickZones örneği

Aşağıdaki şablonda işlevi kullanmaya yönelik üç sonuç gösterilmektedir pickZones .

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {},
  "functions": [],
  "variables": {},
  "resources": [],
  "outputs": {
    "supported": {
      "type": "array",
      "value": "[pickZones('Microsoft.Compute', 'virtualMachines', 'westus2')]"
    },
    "notSupportedRegion": {
      "type": "array",
      "value": "[pickZones('Microsoft.Compute', 'virtualMachines', 'westus')]"
    },
    "notSupportedType": {
      "type": "array",
      "value": "[pickZones('Microsoft.Cdn', 'profiles', 'westus2')]"
    }
  }
}

Önceki örneklerden alınan çıkış üç dizi döndürür.

Adı Tür Değer
destekleniyor dizi [ "1" ]
notSupportedRegion dizi []
notSupportedType dizi []

alanlar için null sağlamayı veya sanal makineleri farklı bölgelere atamayı belirlemek için 'den pickZones yanıtını kullanabilirsiniz. Aşağıdaki örnek, bölgelerin kullanılabilirliğine göre bölge için bir değer ayarlar.

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

Azure Cosmos DB bölgesel bir kaynak değildir, ancak coğrafi çoğaltma için bölge yedekliliğini etkinleştirip etkinleştirmeyeceğini belirlemek için işlevini kullanabilirsiniz pickZones . Microsoft.Depolama'yi geçirmeBölge yedekliliğini etkinleştirip etkinleştirmeyeceğini belirlemek için /storageAccounts kaynak türü.

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

Sağlayıcı

ARM şablonlarında sağlayıcılar işlevi kullanım dışı bırakılmıştır. Artık kullanmanızı önermeyiz. Kaynak sağlayıcısı için bir API sürümü almak için bu işlevi kullandıysanız, şablonunuzda belirli bir API sürümü sağlamanızı öneririz. Özellikler sürümler arasında değişirse dinamik olarak döndürülen bir API sürümünü kullanmak şablonunuzu bozabilir.

Bicep'te sağlayıcılar işlevi kullanım dışıdır.

Sağlayıcılar işlemi REST API aracılığıyla hala kullanılabilir. Kaynak sağlayıcısı hakkında bilgi almak için ARM şablonunun dışında kullanılabilir.

reference

Sembolik adları olmayan şablonlarda:

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

Sembolik adlara sahip şablonlarda:

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

Kaynağın çalışma zamanı durumunu temsil eden bir nesne döndürür. İşlevin çıkışı ve davranışı, her kaynak sağlayıcısının reference (RP) PUT ve GET yanıtlarını nasıl uyguladığına bağlıdır. Kaynak koleksiyonlarının çalışma zamanı durumlarını temsil eden bir nesne dizisi döndürmek için başvurulara bakın.

Bicep başvuru işlevini sağlar, ancak çoğu durumda başvuru işlevi gerekli değildir. Bunun yerine kaynak için sembolik adı kullanmanız önerilir. Başvuruya bakın.

Parametreler

Parametre Zorunlu Türü Açıklama
resourceName/resourceIdentifier veya symbolicName/resourceIdentifier Yes Dize Sembolik adları olmayan şablonlarda, kaynağın adını veya benzersiz tanımlayıcısını belirtin. Geçerli şablondaki bir kaynağa başvururken, parametre olarak yalnızca kaynak adını sağlayın. Daha önce dağıtılan bir kaynağa başvururken veya kaynağın adı belirsiz olduğunda kaynak kimliğini belirtin.
Sembolik adlara sahip şablonlarda, bir kaynağın sembolik adını veya benzersiz tanımlayıcısını belirtin. Geçerli şablondaki bir kaynağa başvururken parametre olarak yalnızca kaynak sembolik adını sağlayın. Daha önce dağıtılan bir kaynağa başvururken kaynak kimliğini belirtin.
apiVersion Hayır Dize Belirtilen kaynağın API sürümü. Kaynak aynı şablon içinde sağlanmamışsa bu parametre gereklidir. Normalde, biçiminde, yyyy-mm-dd. Kaynağınız için geçerli API sürümleri için bkz . şablon başvurusu.
'Tam' Hayır Dize Tam kaynak nesnesinin döndürülip döndürülmeyeceğini belirten değer. belirtmezseniz 'Full', yalnızca kaynağın properties nesnesi döndürülür. Tam nesne, kaynak kimliği ve konum gibi değerleri içerir.

Dönüş değeri

Her kaynak türü, başvuru işlevi için farklı özellikler döndürür. İşlev, önceden tanımlanmış tek bir biçim döndürmez. Ayrıca, döndürülen değer bağımsız değişkenin değerine 'Full' göre farklılık gösterir. Bir kaynak türünün özelliklerini görmek için çıktılar bölümünde örnekte gösterildiği gibi nesnesini döndürebilirsiniz.

Açıklamalar

Başvuru işlevi, daha önce dağıtılan bir kaynağın veya geçerli şablonda dağıtılan kaynağın çalışma zamanı durumunu alır. Bu makalede her iki senaryo için örnekler gösterilmektedir.

Genellikle blob uç noktası URI'si reference veya tam etki alanı adı gibi bir nesneden belirli bir değeri döndürmek için işlevini kullanırsınız.

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

Özellikler şemasının parçası olmayan kaynak değerlerine ihtiyacınız olduğunda kullanın 'Full' . Örneğin, anahtar kasası erişim ilkelerini ayarlamak için bir sanal makinenin kimlik özelliklerini alın.

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

Geçerli kullanımlar

reference İşlev yalnızca kaynak tanımının bir şablonun veya dağıtım ve özellikler nesnesinin çıkışlar bölümünde kullanılabilir. , gibi kaynak özellikleri typenamelocation ve kaynak tanımının diğer üst düzey özellikleri için kullanılamaz. özellik yinelemesi ile kullanıldığında, ifadesi kaynak özelliğine atandığından işlevini input kullanabilirsinizreference.

bir kopyalama döngüsünde reference özelliğinin count değerini ayarlamak için işlevini kullanamazsınız. Döngüdeki diğer özellikleri ayarlamak için kullanabilirsiniz. İşlev çözümlenmeden önce bu özelliğin belirlenmesi gerektiğinden count özelliği için reference başvuru engellendi.

İşlevi reference veya iç içe bir şablonun çıkışlar bölümündeki herhangi list* bir işlevi kullanmak için, iç kapsam değerlendirmesini expressionEvaluationOptions kullanacak veya iç içe yerleştirilmiş şablon yerine bağlantılı bir şablon kullanacak şekilde ayarlamanız gerekir.

İşlevi reference koşullu olarak dağıtılan bir kaynakta kullanırsanız, kaynak dağıtılmasa bile işlev değerlendirilir. İşlev var olmayan bir kaynağa başvuruyorsa reference bir hata alırsınız. İşlevin if yalnızca kaynak dağıtılırken değerlendirildiğinden emin olmak için işlevini kullanın. Koşullu olarak dağıtılan bir kaynak kullanan if örnek reference şablonun if işlevine bakın.

Örtük bağımlılık

işlevini kullanarak reference , başvurulan kaynak aynı şablonda sağlanıyorsa ve kaynağa kaynak kimliğiyle değil adıyla başvuruda bulunursanız, bir kaynağın başka bir kaynağa bağımlı olduğunu örtük olarak bildirirsiniz. Özelliğini de kullanmanız dependsOn gerekmez. Başvuruda bulunan kaynak dağıtımı tamamlayana kadar işlev değerlendirilmez.

Kaynak adı, Sembolik ad veya tanımlayıcı

Aynı simgesel olmayan-ad şablonunda dağıtılan bir kaynağa başvururken kaynağın adını belirtin.

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

Aynı sembolik ad şablonunda dağıtılan bir kaynağa başvururken kaynağın sembolik adını belirtin.

"value": "[reference('myStorage').primaryEndpoints]"

Or

"value": "[reference('myStorage', '2022-09-01', 'Full').location]"

Aynı şablonda dağıtılmamış bir kaynağa başvururken, ve apiVersionkaynak kimliğini belirtin.

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

Hangi kaynağa başvurabileceğiniz konusunda belirsizlik yaşamamak için, tam kaynak tanımlayıcısı sağlayabilirsiniz.

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

Bir kaynağa tam başvuru oluştururken, tür ve ad segmentlerini birleştirme sırası yalnızca ikisinin birleştirilmesi değildir. Bunun yerine, ad alanından sonra, en az belirli olandan en belirliye kadar bir tür/ad çifti dizisi kullanın:

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

Örneğin:

Microsoft.Compute/virtualMachines/myVM/extensions/myExt doğru Microsoft.Compute/virtualMachines/extensions/myVM/myExt değil

Herhangi bir kaynak kimliğinin oluşturulmasını basitleştirmek için işlev yerine concat() bu belgede açıklanan işlevleri kullanınresourceId().

Yönetilen kimliği alma

Azure kaynakları için yönetilen kimlikler, bazı kaynaklar için örtük olarak oluşturulan uzantı kaynak türleridir. Yönetilen kimlik şablonda açıkça tanımlanmadığından, kimliğin uygulandığı kaynağa başvurmanız gerekir. Örtük olarak oluşturulan kimlik de dahil olmak üzere tüm özellikleri almak için kullanın Full .

Desen şöyledir:

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

Örneğin, bir sanal makineye uygulanan yönetilen kimliğin asıl kimliğini almak için şunu kullanın:

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

Veya sanal makine ölçek kümesine uygulanan yönetilen kimliğin kiracı kimliğini almak için şunu kullanın:

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

Başvuru örneği

Aşağıdaki örnek bir kaynak dağıtır ve bu kaynağa başvurur.

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

Yukarıdaki örnek iki nesneyi döndürür. Properties nesnesi aşağıdaki biçimdedir:

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

Nesnenin tamamı aşağıdaki biçimdedir:

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

Aşağıdaki örnek şablon, bu şablonda dağıtılmamış bir depolama hesabına başvurur. Depolama hesabı aynı abonelikte zaten var.

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

başvurular

references(symbolic name of a resource collection, ['Full', 'Properties])

işlevi ile references benzer şekilde referenceçalışır. İşlev, kaynağın çalışma zamanı durumunu gösteren bir nesneyi döndürmek yerine, references kaynak koleksiyonunun çalışma zamanı durumlarını temsil eden bir nesne dizisi döndürür. Bu işlev ARM şablonu dil sürümünü 2.0 gerektirir ve sembolik adı etkindir:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "languageVersion": "2.0",
  "contentVersion": "1.0.0.0",
  ...
}

Bicep'te açık references bir işlev yoktur. Bunun yerine, sembolik koleksiyon kullanımı doğrudan kullanılır ve kod oluşturma sırasında Bicep bunu ARM şablon işlevini kullanan bir ARM şablonuna references çevirir. Daha fazla bilgi için bkz . Kaynak/modül koleksiyonları başvurusu.

Parametreler

Parametre Zorunlu Türü Açıklama
Kaynak koleksiyonunun sembolik adı Yes Dize Geçerli şablonda tanımlanan kaynak koleksiyonunun sembolik adı. İşlev, references geçerli şablon dışındaki kaynaklara başvurmayı desteklemez.
'Full', 'Properties' Hayır Dize Tam kaynak nesnelerinin dizisinin döndürülip döndürülmeyeceğini belirten değer. Varsayılan değer şudur: 'Properties'. belirtmezseniz 'Full', yalnızca kaynakların özellik nesneleri döndürülür. Tam nesne, kaynak kimliği ve konum gibi değerleri içerir.

Dönüş değeri

Kaynak koleksiyonunun dizisi. Her kaynak türü işlev için reference farklı özellikler döndürür. Ayrıca, döndürülen değer bağımsız değişkenin değerine 'Full' göre farklılık gösterir. Daha fazla bilgi için bkz . başvuru.

çıkış sırası references her zaman kopyalama dizinine göre artan düzende düzenlenir. Bu nedenle, dizin 0 içeren koleksiyondaki ilk kaynak önce görüntülenir, ardından dizin 1 vb. görüntülenir. Örneğin, [worker-0, worker-1, worker-2, ...].

Yukarıdaki örnekte, worker-0 ve worker-2 dağıtılırken worker-1 yanlış bir koşuldan kaynaklanmadıysa, çıkışı references dağıtılmayan kaynağı atlar ve dağıtılanları numaralarına göre sıralanmış olarak görüntüler. çıktısı references [worker-0, worker-2, ...] olacaktır. Tüm kaynaklar atlanırsa işlev boş bir dizi döndürür.

Geçerli kullanımlar

İşlevreferences, kaynak kopyalama döngüleri veya Döngü için Bicep içinde kullanılamaz. Örneğin, references aşağıdaki senaryoda izin verilmez:

{
  resources: {
    "resourceCollection": {
       "copy": { ... },
       "properties": {
         "prop": "[references(...)]"
       }
    }
  }
}

İşlevi references veya iç içe bir şablonun çıkışlar bölümündeki herhangi list* bir işlevi kullanmak için, iç kapsam değerlendirmesini expressionEvaluationOptions kullanacak veya iç içe yerleştirilmiş şablon yerine bağlantılı bir şablon kullanacak şekilde ayarlamanız gerekir.

Örtük bağımlılık

işlevini kullanarak, bir kaynağın references başka bir kaynağa bağımlı olduğunu örtük olarak bildirirsiniz. Özelliğini de kullanmanız dependsOn gerekmez. Başvuruda bulunan kaynak dağıtımı tamamlayana kadar işlev değerlendirilmez.

Başvuru örneği

Aşağıdaki örnek bir kaynak koleksiyonu dağıtır ve bu kaynak koleksiyonuna başvurur.

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

Yukarıdaki örnek üç nesneyi döndürür.

"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

ResourceGroup kapsam işlevine bakın.

Bicep'te resourcegroup scope işlevini kullanın.

resourceId

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

Kaynağın benzersiz tanımlayıcısını döndürür. Kaynak adı belirsiz olduğunda veya aynı şablonda sağlanmadığında bu işlevi kullanırsınız. Döndürülen tanımlayıcının biçimi, dağıtımın bir kaynak grubu, abonelik, yönetim grubu veya kiracı kapsamında olup olmadığına bağlı olarak değişir.

Bicep'te resourceId işlevini kullanın.

Parametreler

Parametre Zorunlu Türü Açıklama
subscriptionId Hayır dize (GUID biçiminde) Varsayılan değer geçerli aboneliktir. Başka bir abonelikteki bir kaynağı almanız gerektiğinde bu değeri belirtin. Bu değeri yalnızca bir kaynak grubu veya abonelik kapsamında dağıtırken sağlayın.
resourceGroupName Hayır Dize Varsayılan değer geçerli kaynak grubudur. Başka bir kaynak grubundaki bir kaynağı almanız gerektiğinde bu değeri belirtin. Bu değeri yalnızca bir kaynak grubu kapsamında dağıtırken sağlayın.
resourceType Yes Dize Kaynak sağlayıcısı ad alanı dahil olmak üzere kaynak türü.
resourceName1 Yes Dize Kaynağın adı.
resourceName2 Hayır Dize Gerekirse sonraki kaynak adı segmenti.

Kaynak türü daha fazla segment içerdiğinde kaynak adlarını parametre olarak eklemeye devam edin.

Dönüş değeri

Kaynak kimliği farklı kapsamlarda farklı biçimlerde döndürülür:

  • Kaynak grubu kapsamı:

    /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
    
  • Abonelik kapsamı:

    /subscriptions/{subscriptionId}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
    
  • Yönetim grubu veya kiracı kapsamı:

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

Karışıklığı önlemek için aboneliğe, yönetim grubuna veya kiracıya dağıtılan kaynaklarla çalışırken kullanmamanızı resourceId öneririz. Bunun yerine, kapsam için tasarlanan ID işlevini kullanın.

Açıklamalar

Sağladığınız parametre sayısı, kaynağın üst kaynak mı yoksa alt kaynak mı olduğuna ve kaynağın aynı abonelikte mi yoksa kaynak grubunda mı olduğuna bağlı olarak değişir.

Aynı abonelik ve kaynak grubundaki bir üst kaynağın kaynak kimliğini almak için kaynağın türünü ve adını belirtin.

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

Bir alt kaynağın kaynak kimliğini almak için kaynak türündeki segment sayısına dikkat edin. Kaynak türünün her kesimi için bir kaynak adı belirtin. Segmentin adı, hiyerarşinin o bölümü için var olan kaynağa karşılık gelir.

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

Aynı abonelikteki ancak farklı kaynak grubundaki bir kaynağın kaynak kimliğini almak için kaynak grubu adını girin.

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

Farklı bir abonelik ve kaynak grubundaki bir kaynağın kaynak kimliğini almak için abonelik kimliğini ve kaynak grubu adını girin.

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

Genellikle, alternatif bir kaynak grubunda depolama hesabı veya sanal ağ kullanırken bu işlevi kullanmanız gerekir. Aşağıdaki örnekte, dış kaynak grubundaki bir kaynağın nasıl kolayca kullanabildiği gösterilmektedir:

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

Kaynak Kimliği örneği

Aşağıdaki örnek, kaynak grubundaki bir depolama hesabının kaynak kimliğini döndürür:

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

Yukarıdaki örnekten varsayılan değerleri içeren çıkış:

Adı Tür Değer
sameRGOutput String /subscriptions/{current-sub-id}/resourceGroups/examplegroup/providers/Microsoft. Depolama/storageAccounts/examplestorage
differentRGOutput String /subscriptions/{current-sub-id}/resourceGroups/otherResourceGroup/providers/Microsoft. Depolama/storageAccounts/examplestorage
differentSubOutput String /subscriptions/11111111-1111-1111-1111-111111111111111/resourceGroups/otherResourceGroup/providers/Microsoft. Depolama/storageAccounts/examplestorage
nestedResourceOutput String /subscriptions/{current-sub-id}/resourceGroups/examplegroup/providers/Microsoft.SQL/servers/serverName/databases/databaseName

aboneliği

Bkz. abonelik kapsamı işlevi.

Bicep'te abonelik kapsamı işlevini kullanın.

subscriptionResourceId

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

Abonelik düzeyinde dağıtılan bir kaynağın benzersiz tanımlayıcısını döndürür.

Bicep'te subscriptionResourceId işlevini kullanın.

Parametreler

Parametre Zorunlu Türü Açıklama
subscriptionId Hayır dize (GUID biçiminde) Varsayılan değer geçerli aboneliktir. Başka bir abonelikteki bir kaynağı almanız gerektiğinde bu değeri belirtin.
resourceType Yes Dize Kaynak sağlayıcısı ad alanı dahil olmak üzere kaynak türü.
resourceName1 Yes Dize Kaynağın adı.
resourceName2 Hayır Dize Gerekirse sonraki kaynak adı segmenti.

Kaynak türü daha fazla segment içerdiğinde kaynak adlarını parametre olarak eklemeye devam edin.

Dönüş değeri

Tanımlayıcı aşağıdaki biçimde döndürülür:

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

Açıklamalar

Bu işlevi, bir kaynak grubu yerine aboneliğe dağıtılan kaynakların kaynak kimliğini almak için kullanırsınız. Döndürülen kimlik, kaynak grubu değeri eklemeyerek resourceId işlevi tarafından döndürülen değerden farklıdır.

subscriptionResourceID örneği

Aşağıdaki şablon yerleşik bir rol atar. Bunu bir kaynak grubuna veya aboneliğe dağıtabilirsiniz. Yerleşik rollerin subscriptionResourceId kaynak kimliğini almak için işlevini kullanır.

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

Yönetim grubu düzeyinde dağıtılan bir kaynağın benzersiz tanımlayıcısını döndürür.

Bicep'te managementGroupResourceId işlevini kullanın.

Parametreler

Parametre Zorunlu Türü Açıklama
managementGroupResourceId Hayır dize (GUID biçiminde) Varsayılan değer geçerli yönetim grubudur. Başka bir yönetim grubundaki bir kaynağı almanız gerektiğinde bu değeri belirtin.
resourceType Yes Dize Kaynak sağlayıcısı ad alanı dahil olmak üzere kaynak türü.
resourceName1 Yes Dize Kaynağın adı.
resourceName2 Hayır Dize Gerekirse sonraki kaynak adı segmenti.

Kaynak türü daha fazla segment içerdiğinde kaynak adlarını parametre olarak eklemeye devam edin.

Dönüş değeri

Tanımlayıcı aşağıdaki biçimde döndürülür:

/providers/Microsoft.Management/managementGroups/{managementGroupName}/providers/{resourceType}/{resourceName}

Açıklamalar

Bu işlevi, bir kaynak grubu yerine yönetim grubuna dağıtılan kaynakların kaynak kimliğini almak için kullanırsınız. Döndürülen kimlik, abonelik kimliği ve kaynak grubu değeri eklemeyerek resourceId işlevi tarafından döndürülen değerden farklıdır.

managementGroupResourceID örneği

Aşağıdaki şablon bir ilke tanımı oluşturur ve atar. İlke tanımının managementGroupResourceId kaynak kimliğini almak için işlevini kullanır.

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

Kiracı düzeyinde dağıtılan bir kaynağın benzersiz tanımlayıcısını döndürür.

Bicep'te tenantResourceId işlevini kullanın.

Parametreler

Parametre Zorunlu Türü Açıklama
resourceType Yes Dize Kaynak sağlayıcısı ad alanı dahil olmak üzere kaynak türü.
resourceName1 Yes Dize Kaynağın adı.
resourceName2 Hayır Dize Gerekirse sonraki kaynak adı segmenti.

Kaynak türü daha fazla segment içerdiğinde kaynak adlarını parametre olarak eklemeye devam edin.

Dönüş değeri

Tanımlayıcı aşağıdaki biçimde döndürülür:

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

Açıklamalar

Kiracıya dağıtılan bir kaynağın kaynak kimliğini almak için bu işlevi kullanırsınız. Döndürülen kimlik, kaynak grubu veya abonelik değerleri dahil edilmeyerek diğer kaynak kimliği işlevleri tarafından döndürülen değerlerden farklıdır.

tenantResourceId örneği

Yerleşik ilke tanımları kiracı düzeyinde kaynaklardır. Yerleşik ilke tanımına başvuran bir ilke ataması tenantResourceId dağıtmak için işlevini kullanın.

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

Sonraki adımlar

  • ARM şablonundaki bölümlerin açıklaması için bkz . ARM şablonlarının yapısını ve söz dizimini anlama.
  • Birden çok şablonu birleştirmek için bkz . Azure kaynaklarını dağıtırken bağlantılı ve iç içe yerleştirilmiş şablonları kullanma.
  • Kaynak türü oluştururken belirtilen sayıda yineleme yapmak için bkz . ARM şablonlarında kaynak yinelemesi.
  • Oluşturduğunuz şablonun nasıl dağıtılacağına bakmak için bkz . ARM şablonları ve Azure PowerShell ile kaynakları dağıtma.