وظائف الموارد لـ Bicep

توضح هذه المقالة وظائف 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}

يتم تطبيق تعريف نهج مخصص تم توزيعه في مجموعة إدارة كمورد ملحق. لإنشاء نهج وتعيينه، وزع القالب التالي إلى مجموعة إدارة.

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@2021-06-01' = {
  name: 'locationRestriction'
  properties: {
    policyType: 'Custom'
    mode: 'All'
    parameters: {}
    policyRule: {
      if: {
        not: {
          field: 'location'
          in: allowedLocations
        }
      }
      then: {
        effect: 'deny'
      }
    }
  }
}

resource policyAssignment 'Microsoft.Authorization/policyAssignments@2022-06-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 حق الوصول إلى البيانات السرية. لمزيد من المعلومات، راجع استخدام Azure Key Vault لتمرير قيمة المعلمة الآمنة أثناء توزيع Bicep.

لا يلزم وجود مؤهل لمساحة الاسم لأنه يتم استخدام الدالة مع نوع مورد.

المعلمات

المعلمة‬ المطلوب نوع ‏‏الوصف
secretName ‏‏نعم‬ سلسلة اسم السر المخزَّن في مخزن المفاتيح.

قيمة الإرجاع

القيمة السرية للاسم السري.

مثال

يتم استخدام ملف Bicep التالي كوحدة نمطية. ويحتوي على معلمة adminPassword معرفة بواسطة المصمم @secure().

param sqlServerName string
param adminLogin string

@secure()
param adminPassword string

resource sqlServer 'Microsoft.Sql/servers@2022-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-02-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 وlistKeys وlistKeyValue وlistSecrets.

يختلف بناء جملة هذه الدالة حسب اسم عمليات القائمة. تختلف القِيَم التي تم إرجاعها أيضاً حسب العملية. لا تدعم Bicep حالياً عمليات إكمال وظائف list* والتحقق من صحتها.

باستخدام Bicep CLI الإصدار 0.4.X أو أعلى، يمكنك استدعاء دالة القائمة باستخدام عامل تشغيل الملحق. على سبيل المثال، storageAccount.listKeys()

لا يلزم وجود مؤهل لمساحة الاسم لأنه يتم استخدام الدالة مع نوع مورد.

المعلمات

المعلمة‬ المطلوب نوع ‏‏الوصف
apiVersion لا سلسلة إذا لم توفر هذه المعلمة، فسيتم استخدام إصدار واجهة برمجة التطبيقات للمورد. وفر إصدار API مخصصاً فقط عندما تحتاج إلى تشغيل الدالة مع إصدار معين. استخدم التنسيق: yyyy-mm-dd.
functionValues لا كائن كائن يحتوي على قِيَم الدالة. قم بتوفير هذا العنصر فقط للدوال التي تدعم تلقي عنصر بقيم معلمات، مثل listAccountSas على حساب التخزين. يتم عرض مثال على تمرير قِيم الدالة في هذه المقالة.

الاستخدامات الصالحة

يمكن استخدام الدالات list في خصائص تعريف المورد. لا تستخدم دالة list تعرض معلومات حساسة في قسم المخرجات في ملف Bicep. يتم تخزين قِيَم الإخراج في محفوظات التوزيع ويمكن استردادها بواسطة مستخدم ضار.

عند استخدامها مع حلقة متكررة، يمكنك استخدام دالات 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@2022-09-01' = {
  name: 'dscript${uniqueString(resourceGroup().id)}'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

resource dScript 'Microsoft.Resources/deploymentScripts@2020-10-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
مايكروسوفت.AppConfiguration/configurationStores ListKeys
مايكروسوفت 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 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 list
Microsoft.LabServices/labs/virtualMachines list
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 list
مساحات عمل Microsoft.OperationalInsights 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 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

لتحديد أنواع الموارد التي لها عملية قائمة، تتوفر لديك الخيارات التالية:

  • عرض عمليات REST API لموفر مورد والبحث عن عمليات القائمة. على سبيل المثال، تحتوي حسابات التخزين على عملية listKeys.

  • استخدم Get-AzProviderOperation في PowerShell cmdlet. يحصل المثال التالي على جميع عمليات القائمة لحسابات التخزين:

    Get-AzProviderOperation -OperationSearchString "Microsoft.Storage/*" | where {$_.Operation -like "*list*"} | FT Operation
    
  • استخدم أمر Azure CLI التالي لتصفية عمليات القائمة فقط:

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

pickZones

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

لتحديد ما إذا كان نوع المورد يدعم مناطق لمنطقة ما أو لا. تدعم هذه الدالة الموارد المناطقية فقط. خدمات المنطقة المكررة ترجع صفيفًا فارغًا. لمزيد من المعلومات، راجع خدمات Azure التي تدعم مناطق التوفر.

نوع الاسم: az.

المعلمات

المعلمة‬ المطلوب نوع ‏‏الوصف
providerNamespace ‏‏نعم‬ سلسلة مساحة اسم موفر المورد لنوع المورد للتحقق من دعم المنطقة.
resourceType ‏‏نعم‬ سلسلة نوع المورد للتحقق من دعم المنطقة.
موقع ‏‏نعم‬ سلسلة المنطقة التي يجب التحقق فيها من دعم المنطقة.
numberOfZones لا integer عدد المناطق المنطقية التي يجب إرجاعها. الإعداد الافتراضي هو 1. يجب أن يكون الرقم عدداً صحيحاً موجباً من 1 إلى 3. استخدم 1 للموارد المخصصة لمناطق واحدة. بالنسبة للموارد متعددة المناطق، يجب أن تكون القيمة أقل من عدد المناطق المدعومة أو مساوية لها.
إزاحة لا integer الإزاحة من منطقة البداية المنطقية. تقوم الوظيفة بإرجاع خطأ إذا تجاوزت الإزاحة بالإضافة إلى numberOfZones عدد المناطق المدعومة.

قيمة الإرجاع

مجموعة مع المناطق المدعومة. عند استخدام القيم الافتراضية للإزاحة وnumberOfZones، يقوم نوع المورد والمنطقة التي تدعم المناطق بإرجاع الصفيف التالي:

[
    "1"
]

عندما يتم ضبط المعلمة numberOfZones على 3، فإنها ترجع:

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

عندما لا يدعم نوع المورد أو المنطقة المناطق، يتم إرجاع مصفوفة فارغة.

[
]

الملاحظات

هناك فئات مختلفة لمناطق توافر Azure - مناطق مناطقية واحتياطية. يمكن استخدام الدالة pickZones لإرجاع منطقة توفر لمورد منطقة. بالنسبة لخدمات المنطقة المكررة (ZRS)، ترجع الدالة صفيفًا فارغًا. الموارد المناطقية عادة ما تحتوي على خاصية zones في المستوى الأعلى من تعريف المورد. لتحديد فئة الدعم لمناطق التوفر، راجع خدمات Azure التي تدعم مناطق التوفر.

لتحديد ما إذا كانت منطقة أو موقع Azure معين يدعم مناطق التوفر، استدعِ الدالة pickZones ذات نوع مورد منطقة، مثل Microsoft.Network/publicIPAddresses. إذا كانت الاستجابة غير فارغة، فإن المنطقة تدعم مناطق التوفر.

pickZones example

يعرض ملف 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')

يُرجع الإخراج من الأمثلة السابقة ثلاث مصفوفات.

Name نوع القيمة‬
مدعومة صفيف [ "1" ]
notSupportedRegion صفيف []
notSupportedType صفيف []

يمكنك استخدام الاستجابة من pickZones لتحديد ما إذا كنت تريد توفير قِيَم خالية للمناطق أو تعيين أجهزة ظاهرية لمناطق مختلفة.

الموفرون

تم إهمال دالة الموفرين في Bicep. لم نعد نوصي باستخدامها. إذا استخدمت هذه الدالة للحصول على إصدار API لموفر الموارد، نوصي بتوفير إصدار API محدد في ملف Bicep الخاص بك. يمكن أن يؤدي استخدام إصدار API الذي يتم إرجاعه ديناميكيا إلى توقف قالبك إذا تغيرت الخصائص بين الإصدارات.

لا تزال عملية الموفرين متاحة من خلال واجهة برمجة تطبيقات REST. يمكن استخدامه خارج ملف Bicep للحصول على معلومات حول موفر الموارد.

نوع الاسم: az.

reference

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

إرجاع كائن يمثل حالة وقت تشغيل المورد. يعتمد إخراج وسلوك الدالة reference بشكل كبير على كيفية تنفيذ كل موفر موارد (RP) استجابات PUT و GET الخاصة به.

نوع الاسم: az.

توفر ملفات Bicep الوصول إلى الدالة المرجعية، على الرغم من أنها عادة ما تكون غير ضرورية. بدلا من ذلك، يوصى باستخدام الاسم الرمزي للمورد. يمكن استخدام الدالة المرجعية فقط داخل properties كائن مورد ولا يمكن استخدامها لخصائص المستوى الأعلى مثل name أو location. ينطبق الشيء نفسه بشكل عام على المراجع التي تستخدم الاسم الرمزي. ومع ذلك، بالنسبة لخصائص مثل name، من الممكن إنشاء قالب دون استخدام الدالة المرجعية. من المعروف أن المعلومات الكافية حول اسم المورد تصدر الاسم مباشرة. يشار إليه باسم خصائص وقت التحويل البرمجي. يمكن أن يحدد التحقق من صحة Bicep أي استخدام غير صحيح للاسم الرمزي.

يوزع المثال التالي حساب تخزين. تمنحك المخرجات الأولى النتائج نفسها.

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

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-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@2022-09-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.

يمكنك استخدام هذه الدالة عندما يكون اسم المورد غامضاً أو غير متوفر في القالب نفسه. يختلف تنسيق المعرف الذي تم إرجاعه بناءً على ما إذا كان النشر يحدث في نطاق مجموعة موارد أو اشتراك أو مجموعة إدارة أو مستأجر.

على سبيل المثال:

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

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-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@2022-09-01' existing = {
    name: storageAccountName
}

output storageID string = storageAccount.id

لمزيد من المعلومات، راجع وظيفة معرف مورد قالب JSON.

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

managementGroupResourceId

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

تؤدي إلى إرجاع المعرف الفريد لمورد تم توزيعه على مستوى مجموعة الإدارة.

نوع الاسم: az.

تتوفر الدالة managementGroupResourceId في ملفات Bicep، ولكن عادة لا تحتاج إليها. بدلاً من ذلك، استخدم الاسم الرمزي للمورد والوصول إلى خاصية id.

يتم إرجاع المعرف بالتنسيق التالي:

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

الملاحظات

يمكنك استخدام هذه الوظيفة للحصول على معرف المورد للموارد التي تم توزيعها إلى مجموعة الإدارة بدلاً من مجموعة الموارد. يختلف المعرف الذي تم إرجاعه عن القيمة التي تم إرجاعها بواسطة الوظيفة ResourceId من خلال عدم تضمين معرّف الاشتراك وقيمة مجموعة الموارد.

مثال 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@2021-06-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@2021-06-01' = {
  name: 'location-lock'
  properties: {
    scope: mgScope
    policyDefinitionId: managementGroupResourceId('Microsoft.Authorization/policyDefinitions', policyDefinitionName)
  }
  dependsOn: [
    policyDefinition
  ]
}

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@2022-06-01' = {
  name: policyAssignmentName
  properties: {
    scope: subscriptionResourceId('Microsoft.Resources/resourceGroups', resourceGroup().name)
    policyDefinitionId: tenantResourceId('Microsoft.Authorization/policyDefinitions', policyDefinitionID)
  }
}

الخطوات التالية