共用方式為


Bicep 的 Resource 函數

本文說明用來取得資源值的 Bicep 函數。

若要從目前的部署中取得值,請參閱部署值函數

extensionResourceId

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

傳回延伸模組資源的資源識別碼。 延伸模組資源是資源類型,其會套用至另一個資源以新增至其功能。

命名空間:az

extensionResourceId 函數可在 Bicep 檔案中取得,但您通常不需要。 相反地,請使用資源的符號名稱,並存取 id 屬性。

此函式所傳回之資源識別碼的基本格式為:

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

範圍區段會隨著要擴充的資源而不同。

當延伸模組資源套用至資源時,資源識別碼會以下列格式傳回:

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

當延伸模組資源套用至資源群組時,格式為:

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

當延伸模組資源套用至訂用帳戶時,格式為:

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

當延伸模組資源套用至管理群組時,格式為:

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

部署至管理群組的自訂原則定義會實作為延伸模組資源。 若要建立並指派原則,請將下列 Bicep 檔案部署至管理群組。

targetScope = 'managementGroup'

@description('An array of the allowed locations, all other locations will be denied by the created policy.')
param allowedLocations array = [
  'australiaeast'
  'australiasoutheast'
  'australiacentral'
]

resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2023-04-01' = {
  name: 'locationRestriction'
  properties: {
    policyType: 'Custom'
    mode: 'All'
    parameters: {}
    policyRule: {
      if: {
        not: {
          field: 'location'
          in: allowedLocations
        }
      }
      then: {
        effect: 'deny'
      }
    }
  }
}

resource policyAssignment 'Microsoft.Authorization/policyAssignments@2024-04-01' = {
  name: 'locationAssignment'
  properties: {
    policyDefinitionId: policyDefinition.id
  }
}

內建原則定義是租用戶層級的資源。 如需部署內建原則定義的範例,請參閱 tenantResourceId

getSecret

keyVaultName.getSecret(secretName)

從 Azure Key Vault 傳回祕密。 使用此函數可將祕密傳遞至 Bicep 模組的安全字串參數。

注意

az.getSecret(subscriptionId, resourceGroupName, keyVaultName, secretName, secretVersion) 函式可用於 .bicepparam 檔案中以擷取金鑰保存庫祕密。 如需詳細資訊,請參閱 getSecret

您只能從模組的 getSecret 區段內使用 params 函式。 您只能將其與 Microsoft.KeyVault/vaults 資源搭配使用。

module sql './sql.bicep' = {
  name: 'deploySQL'
  params: {
    adminPassword: keyVault.getSecret('vmAdminPassword')
  }
}

如果您嘗試在 Bicep 檔案的任何其他部分中使用此函式,會收到錯誤。 如果您使用此函式搭配字串插補,則即使在 params 區段中使用時,您也會收到錯誤。

函式只能搭配具有 @secure() 裝飾項目的模組參數使用。

金鑰保存庫必須將 enabledForTemplateDeployment 設定為 true。 部署 Bicep 檔案的使用者必須具有祕密的存取。 如需詳細資訊,請參閱在 Bicep 部署期間使用 Azure Key Vault 以傳遞安全的參數值

因為函數會與資源類型搭配使用,所以不需要命名空間限定詞

參數

參數 必要 類型​ 描述
secretName Yes string 儲存在金鑰保存庫中的祕密名稱。

傳回值

祕密名稱的祕密值。

範例

下列 Bicep 檔案會用來做為模組。 其有一個以 @secure() 裝飾項目定義的 adminPassword 參數。

param sqlServerName string
param adminLogin string

@secure()
param adminPassword string

resource sqlServer 'Microsoft.Sql/servers@2023-08-01-preview' = {
  ...
}

下列 Bicep 檔案會取用前述的 Bicep 檔案做為模組。 Bicep 檔案會參考現有的金鑰保存庫,並呼叫 getSecret 函數以擷取金鑰保存庫祕密,然後將值當作參數傳遞給模組。

param sqlServerName string
param adminLogin string

param subscriptionId string
param kvResourceGroup string
param kvName string

resource keyVault 'Microsoft.KeyVault/vaults@2023-07-01' existing = {
  name: kvName
  scope: resourceGroup(subscriptionId, kvResourceGroup )
}

module sql './sql.bicep' = {
  name: 'deploySQL'
  params: {
    sqlServerName: sqlServerName
    adminLogin: adminLogin
    adminPassword: keyVault.getSecret('vmAdminPassword')
  }
}

list*

resourceName.list([apiVersion], [functionValues])

您可以呼叫 list 函數,以取得具有作業開頭為 list 的任何資源類型。 常見的使用方式包括 listlistKeyslistKeyValuelistSecrets

此函數的語法會因 list 作業的名稱而異。 傳回值也會因作業而異。 Bicep 目前不支援 list* 函數的完成和驗證。

使用 Bicep CLI 版本 0.4.X 或更高版本時,您可以使用存取子運算子來呼叫 list 函數。 例如: storageAccount.listKeys()

因為函數會與資源類型搭配使用,所以不需要命名空間限定詞

參數

參數 必要 類型​ 描述
apiVersion No string 如果您未提供此參數,則會使用資源的 API 版本。 只有當您需要使用特定版本來執行函數時,才提供自訂 API 版本。 使用 yyyy-mm-dd 格式。
functionValues No object 具有函式值的物件。 僅針對支援接收具有參數值之物件 (例如儲存體帳戶上的 listAccountSas) 的函式提供此物件。 本文會顯示傳遞函式值的範例。

有效用法

list 函數可以在資源定義的屬性中使用。 請勿在 Bicep 檔案的輸出區段中使用會公開敏感性資訊的 list 函數。 輸出值會被儲存在部署歷程記錄中,而且可能會由惡意使用者擷取。

反覆式迴圈搭配使用時,您可以將 list 函數用於 input,因為運算式會指派給資源屬性。 您無法將其搭配 count 使用,因為在解析 list 函數之前就必須確定計數。

如果您在有條件部署的資源中使用 list 函數,即使未部署資源,也會評估該函數。 如果 list 函數參考不存在的資源,就會發生錯誤。 使用條件運算式 ?: 運算子,以確定只有在部署資源時,才會評估該函數。

傳回值

傳回的物件會因您使用的清單函式而異。 例如,儲存體帳戶的 listKeys 會傳回下列格式:

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

其他 list 函數具有不同的傳回格式。 若要查看函數的格式,請將函數放入輸出區段,如範例 Bicep 檔案所示。

清單範例

下列範例會部署儲存體帳戶,然後在該儲存體帳戶上呼叫 listKeys。 為部署指令碼設定值時,會使用此金鑰。

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: 'dscript${uniqueString(resourceGroup().id)}'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

resource dScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: 'scriptWithStorage'
  location: location
  ...
  properties: {
    azCliVersion: '2.0.80'
    storageAccountSettings: {
      storageAccountName: storageAccount.name
      storageAccountKey: storageAccount.listKeys().keys[0].value
    }
    ...
  }
}

下一個範例顯示接受參數的 list 函數。 在此案例中,函式為 listAccountSas。 傳遞到期時間的物件。 到期時間必須是未來的時間。

param accountSasProperties object {
  default: {
    signedServices: 'b'
    signedPermission: 'r'
    signedExpiry: '2020-08-20T11:00:00Z'
    signedResourceTypes: 's'
  }
}
...
sasToken: storageAccount.listAccountSas('2021-04-01', accountSasProperties).accountSasToken

實作

下表顯示可能的 list* 用法。

資源類型 函式名稱
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/registries listCredentials
Microsoft.ContainerRegistry/registries listUsages
Microsoft.ContainerRegistry/registries/agentpools listQueueStatus
Microsoft.ContainerRegistry/registries/buildTasks listSourceRepositoryProperties
Microsoft.ContainerRegistry/registries/buildTasks/steps listBuildArguments
Microsoft.ContainerRegistry/registries/taskruns listDetails
Microsoft.ContainerRegistry/registries/webhooks listEvents
Microsoft.ContainerRegistry/registries/runs listLogSasUrl
Microsoft.ContainerRegistry/registries/tasks listDetails
Microsoft.ContainerService/managedClusters listClusterAdminCredential
Microsoft.ContainerService/managedClusters listClusterMonitoringUserCredential
Microsoft.ContainerService/managedClusters listClusterUserCredential
Microsoft.ContainerService/managedClusters/accessProfiles listCredential
Microsoft.DataBox/jobs listCredentials
Microsoft.DataFactory/datafactories/gateways listauthkeys
Microsoft.DataFactory/factories/integrationruntimes listauthkeys
Microsoft.DataLakeAnalytics/accounts/storageAccounts/Containers listSasTokens
Microsoft.DataShare/accounts/shares listSynchronizations
Microsoft.DataShare/accounts/shareSubscriptions listSourceShareSynchronizationSettings
Microsoft.DataShare/accounts/shareSubscriptions listSynchronizationDetails
Microsoft.DataShare/accounts/shareSubscriptions listSynchronizations
Microsoft.Devices/iotHubs listkeys
Microsoft.Devices/iotHubs/iotHubKeys listkeys
Microsoft.Devices/provisioningServices/keys listkeys
Microsoft.Devices/provisioningServices listkeys
Microsoft.DevTestLab/labs ListVhds
Microsoft.DevTestLab/labs/schedules ListApplicable
Microsoft.DevTestLab/labs/users/serviceFabrics ListApplicableSchedules
Microsoft.DevTestLab/labs/virtualMachines ListApplicableSchedules
Microsoft.DocumentDB/databaseAccounts listKeys
Microsoft.DocumentDB/databaseAccounts/notebookWorkspaces listConnectionInfo
Microsoft.DomainRegistration listDomainRecommendations
Microsoft.DomainRegistration/topLevelDomains listAgreements
Microsoft.EventGrid/domains listKeys
Microsoft.EventGrid/topics listKeys
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 清單
Microsoft.LabServices/labs/virtualMachines 清單
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/workflows listCallbackUrl
Microsoft.Logic/workflows listSwagger
Microsoft.Logic/workflows/runs/actions listExpressionTraces
Microsoft.Logic/workflows/runs/actions/repetitions listExpressionTraces
Microsoft.Logic/workflows/triggers listCallbackUrl
Microsoft.Logic/workflows/versions/triggers listCallbackUrl
Microsoft.MachineLearning/webServices listkeys
Microsoft.MachineLearning/Workspaces listworkspacekeys
Microsoft.MachineLearningServices/workspaces/computes listKeys
Microsoft.MachineLearningServices/workspaces/computes listNodes
Microsoft.MachineLearningServices/workspaces listKeys
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 清單
Microsoft.OperationalInsights/workspaces listKeys
Microsoft.PolicyInsights/remediations listDeployments
Microsoft.RedHatOpenShift/openShiftClusters listCredentials
Microsoft.Relay/namespaces/disasterRecoveryConfigs/authorizationRules listkeys
Microsoft.Search/searchServices listAdminKeys
Microsoft.Search/searchServices listQueryKeys
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 清單
Microsoft.Web/sites/config 清單
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 清單
Microsoft.Web/sites/slots/config 清單
microsoft.web/sites/slots/functions listsecrets

為判斷哪一個資源類型具有 list 作業,您可以使用下列選項:

  • 檢視資源提供者的 REST API 作業,並尋找 list 作業。 例如,儲存體帳戶具有 listKeys 作業

  • 使用 Get-AzProvider​Operation PowerShell Cmdlet。 下列範例會取得儲存體帳戶的所有 list 作業︰

    Get-AzProviderOperation -OperationSearchString "Microsoft.Storage/*" | where {$_.Operation -like "*list*"} | FT Operation
    
  • 使用下列 Azure CLI 命令可只篩選出 list 作業:

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

managementGroupResourceId

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

傳回部署於管理群組層級之資源的唯一識別碼。

命名空間:az

managementGroupResourceId 函數可在 Bicep 檔案中取得,但您通常不需要。 相反地,請使用資源的符號名稱,並存取 id 屬性。

識別碼會以下列格式傳回:

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

備註

您可以使用此函數,為部署至管理群組 (而不是資源群組) 的資源取得資源識別碼。 傳回的識別碼與 resourceId 函數所傳回的值不同;其中不含訂閱 ID 和資源群組值。

managementGroupResourceID 範例

下列範本會建立並指派原則定義。 其會使用 managementGroupResourceId 函數來取得原則定義的資源識別碼。

targetScope = 'managementGroup'

@description('Target Management Group')
param targetMG string

@description('An array of the allowed locations, all other locations will be denied by the created policy.')
param allowedLocations array = [
  'australiaeast'
  'australiasoutheast'
  'australiacentral'
]

var mgScope = tenantResourceId('Microsoft.Management/managementGroups', targetMG)
var policyDefinitionName = 'LocationRestriction'

resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2023-04-01' = {
  name: policyDefinitionName
  properties: {
    policyType: 'Custom'
    mode: 'All'
    parameters: {}
    policyRule: {
      if: {
        not: {
          field: 'location'
          in: allowedLocations
        }
      }
      then: {
        effect: 'deny'
      }
    }
  }
}

resource location_lock 'Microsoft.Authorization/policyAssignments@2024-04-01' = {
  name: 'location-lock'
  properties: {
    scope: mgScope
    policyDefinitionId: managementGroupResourceId('Microsoft.Authorization/policyDefinitions', policyDefinitionName)
  }
  dependsOn: [
    policyDefinition
  ]
}

pickZones

pickZones(providerNamespace, resourceType, location, [numberOfZones], [offset])

判斷資源類型是否支援區域的區域。 此函數僅支援區域性資源。 區域備援服務會傳回空白陣列。 如需詳細資訊,請參閱支援可用性區域的 Azure 服務

命名空間:az

參數

參數 必要 類型​ 描述
providerNamespace Yes string 用於檢查區域支援的資源類型的資源提供者命名空間。
resourceType Yes string 用於檢查區域支援的資源類型。
location Yes string 用於檢查區域支援的 Azure 區域。
numberOfZones No 整數 要傳回的邏輯區域數目。 預設值是 1。 此數字必須是介於 1 到 3 之間的正整數。 單一區域資源使用 1。 若為多區域資源,此值必須小於或等於支援的區域數目。
offset No 整數 從起始邏輯區域算起的位移。 如果位移加上 numberOfZones 超過支援的區域數目,函式會傳回錯誤。

傳回值

具有支援區域的陣列。 對位移和 numberOfZones 使用預設值時,支援區域的資源類型和區域會傳回下列陣列:

[
    "1"
]

numberOfZones 參數設為 3 時,會傳回:

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

當資源類型或區域不支援區域,會傳回空白陣列。

[
]

備註

Azure 可用性區域有不同的類別–區域性和區域備援。 pickZones 函式可以用來傳回區域性資源的可用性區域。 針對區域備援服務 (ZRS),此函式會傳回空白陣列。 區域性資源通常在資源定義的最上層具有 zones 屬性。 若要判斷可用性區域的支援類別,請參閱支援可用性區域的 Azure 服務

若要判斷指定的 Azure 區域或位置是否支援可用性區域,請使用區域性資源類型 (例如 Microsoft.Network/publicIPAddresses) 來呼叫 pickZones 函式。 如果回應非空白,則區域會支援可用性區域。

pickZones 範例

下列 Bicep 檔案顯示使用 pickZones 函數的三個結果。

output supported array = pickZones('Microsoft.Compute', 'virtualMachines', 'westus2')
output notSupportedRegion array = pickZones('Microsoft.Compute', 'virtualMachines', 'westus')
output notSupportedType array = pickZones('Microsoft.Cdn', 'profiles', 'westus2')

前述範例的輸出會傳回三個陣列。

名稱 類型
服務 陣列 [ "1" ]
notSupportedRegion 陣列 []
notSupportedType 陣列 []

您可以使用 pickZones 的回應來判斷是否向區域提供 Null,或將虛擬機器指派給不同的區域。

提供者

提供者函數已在 Bicep 中被取代。 我們不再建議使用。 如果您使用此函式來取得資源提供者的 API 版本,建議您在 Bicep 檔案中提供特定的 API 版本。 如果使用動態傳回的 API 版本,若版本間發生屬性變更時可能會造成您的範本中斷。

提供者作業仍可透過 REST API 取得。 這可以在 Bicep 檔案外使用,以取得資源提供者的相關資訊。

命名空間:az

參考

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

傳回代表資源執行階段狀態的物件。 函式 reference 的輸出和行為高度依賴每個資源提供者 (RP) 如何實作其 PUT 和 GET 回應。

命名空間:az

Bicep 檔案會提供參考函式的存取權,但通常不需要。 相反地,建議使用資源的符號名稱。 參考函式只能在資源的物件內properties使用,而且無法用於 或 locationname最上層屬性。 使用符號名稱的參考一般而言也是相同情況。 不過,對於 這類 name屬性,在不使用參考函式的情況下,可以產生範本。 如果得知有足夠的資源名稱資訊,即可直接發出名稱。 它稱為編譯時間屬性。 Bicep 驗證可以識別符號名稱的任何不正確使用方式。

下列範例會部署儲存體帳戶。 前兩個輸出會提供相同的結果。

param storageAccountName string = uniqueString(resourceGroup().id)
param location string = resourceGroup().location

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: storageAccountName
  location: location
  kind: 'Storage'
  sku: {
    name: 'Standard_LRS'
  }
}

output storageObjectSymbolic object = storageAccount.properties
output storageObjectReference object = reference('storageAccount')
output storageName string = storageAccount.name
output storageLocation string = storageAccount.location

若要從範本中未部署的現有資源取得屬性,請使用 existing 關鍵字:

param storageAccountName string

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' existing = {
  name: storageAccountName
}

// use later in template as often as needed
output blobAddress string = storageAccount.properties.primaryEndpoints.blob

若要參考在父資源內的巢狀資源,請使用巢狀存取子 (::)。 僅在您從父資源外部存取巢狀資源時,才需要使用此語法。

vNet1::subnet1.properties.addressPrefix

如果您嘗試參考不存在的資源,您會收到 NotFound 錯誤,且您的部署會失敗。

resourceId

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

傳回資源的唯一識別碼。

命名空間:az

resourceId 函數可在 Bicep 檔案中取得,但您通常不需要。 相反地,請使用資源的符號名稱,並存取 id 屬性。

如果資源名稱不確定或未佈建在相同的 Bicep 檔案內,請使用此函數。 傳回的識別碼格式會根據進行部署的範圍是資源群組、訂用帳戶、管理群組還是租用戶,而有所不同。

例如:

param storageAccountName string
param location string = resourceGroup().location

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: storageAccountName
  location: location
  kind: 'Storage'
  sku: {
    name: 'Standard_LRS'
  }
}

output storageID string = storageAccount.id

若要取得 Bicep 檔案中未部署資源的資源識別碼,請使用現有的關鍵字。

param storageAccountName string

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' existing = {
  name: storageAccountName
}

output storageID string = storageAccount.id

如需詳細資訊,請參閱 JSON 範本 resourceId 函式

subscriptionResourceId

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

傳回部署於訂用帳戶層級之資源的唯一識別碼。

命名空間:az

subscriptionResourceId 函數可在 Bicep 檔案中取得,但您通常不需要。 相反地,請使用資源的符號名稱,並存取 id 屬性。

識別碼會以下列格式傳回:

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

備註

您可以使用此函式,對部署至訂用帳戶 (而不是資源群組) 的資源取得資源識別碼。 傳回的識別碼與 resourceId 函式所傳回的值不同;其中不含資源群組值。

subscriptionResourceID 範例

下列 Bicep 檔案會指派內建角色。 您可以將其部署至資源群組或訂用帳戶。 其會使用 subscriptionResourceId 函數來取得內建角色的資源識別碼。

@description('Principal Id')
param principalId string

@allowed([
  'Owner'
  'Contributor'
  'Reader'
])
@description('Built-in role to assign')
param builtInRoleType string

var roleDefinitionId = {
  Owner: {
    id: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '8e3af657-a8ff-443c-a75c-2fe8c4bcb635')
  }
  Contributor: {
    id: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')
  }
  Reader: {
    id: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'acdd72a7-3385-48ef-bd42-f606fba81ae7')
  }
}

resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: guid(resourceGroup().id, principalId, roleDefinitionId[builtInRoleType].id)
  properties: {
    roleDefinitionId: roleDefinitionId[builtInRoleType].id
    principalId: principalId
  }
}

tenantResourceId

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

傳回部署於租用戶層級之資源的唯一識別碼。

命名空間:az

tenantResourceId 函數可在 Bicep 檔案中取得,但您通常不需要。 相反地,請使用資源的符號名稱,並存取 id 屬性。

識別碼會以下列格式傳回:

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

內建原則定義是租用戶層級的資源。 若要部署參考內建原則定義的原則指派,請使用 tenantResourceId 函式。

@description('Specifies the ID of the policy definition or policy set definition being assigned.')
param policyDefinitionID string = '0a914e76-4921-4c19-b460-a2d36003525a'

@description('Specifies the name of the policy assignment, can be used defined or an idempotent name as the defaultValue provides.')
param policyAssignmentName string = guid(policyDefinitionID, resourceGroup().name)

resource policyAssignment 'Microsoft.Authorization/policyAssignments@2024-04-01' = {
  name: policyAssignmentName
  properties: {
    scope: subscriptionResourceId('Microsoft.Resources/resourceGroups', resourceGroup().name)
    policyDefinitionId: tenantResourceId('Microsoft.Authorization/policyDefinitions', policyDefinitionID)
  }
}

下一步