Разница между функцией объединения и функцией идентификатора ресурса в шаблоне Azure ARM

#json #azure #azure-resource-manager #arm-template

#json #azure #azure-resource-manager #arm-шаблон

Вопрос:

Кто-нибудь может сказать мне, в чем разница между этими двумя и какой из них следует использовать в разделе ресурсов в шаблоне Azure ARM JSON

 "dependsOn": [
      [concat('Microsoft.Compute/availabilitySets/', variables('availabilitySetName'))]"
  
 "dependsOn": [
      [resourceid('Microsoft.Compute/availabilitySets/', variables('availabilitySetName'))]"
  

Ответ №1:

resourceId — это просто удобный способ сгенерировать resourceId, а не «поддельный», потому что показанный вами пример будет работать только в свойстве dependsOn, если вы попытаетесь использовать свой пример объединения с любой функцией свойством ресурса, которая ожидает resourceId, он завершится неудачей.

В принципе, dependsOn допускает пару ярлыков при анализе входных данных, поэтому вы можете сделать что-то вроде этого:

 dependsOn: [
    "resourceName"
]
  

и если это имя уникально — это нормально. но это не настоящий идентификатор ресурса, как вы, вероятно, поняли.

объединение: https://learn.microsoft.com/en-us/azure/azure-resource-manager/templates/template-functions-array#concat
resourceId: https://learn.microsoft.com/en-us/azure/azure-resource-manager/templates/template-functions-resource#resourceid

Ответ №2:

Функция «concat»:

  • Объединяет несколько массивов в один массив
    или
  • Объединяет несколько строк в одну строку

Смотрите эту ссылку для получения более подробной информации.

В то время как функция «resourceId»:

  • Он предоставляет уникальный идентификатор ресурса, для которого он вызывается. смотрите эту ссылку для получения более подробной информации.

Теперь по вашему вопросу: «какой из них следует использовать в разделе ресурсов в шаблоне Azure ARM JSON». Далее я использовал в своих шаблонах ARM, и это работает для меня:

 "availabilitySet": { "id": "[resourceId('Microsoft.Compute/availabilitySets', parameters('availabilitySetName'))]" }
        }