Azure ARM模板中concat函数和资源ID函数之间的区别

问题描述

谁能告诉我这两者之间有什么区别,以及应该在Azure ARM JSON模板的资源部分中使用哪一个

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

解决方法

resourceId只是生成resourceId的一种简便方法,而不是“ fake”方法,因为如果您尝试将concat示例与任何期望的function \ resource属性一起使用,则所显示的示例仅在dependsOn属性中有效一个resourceId,它将失败。

基本上,dependsOn在解析输入时允许几个快捷方式,因此您可以执行以下操作:

 s.replace(/([A-Z][a-z]*)([A-Z]*)/g,'$1 $2').trim()

,如果该名称是唯一的-很好。但是它并不是您可能想像的真正的resourceId。

concat:https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/template-functions-array#concat
resourceId:https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/template-functions-resource#resourceid

,

“ concat”功能:

  • 将多个数组组合成一个数组

  • 将多个字符串合并为单个字符串

有关更多详细信息,请参见this link

“ resourceId”函数:

  • 它给出了为其调用资源的唯一标识符。 有关更多详细信息,请参见this link

现在您的问题是“应该在Azure ARM JSON模板的资源部分中使用哪一个”。 接下来,我在我的ARM模板中使用了它,并且对我有用:

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