我正在尝试在ARM模板中获取专用链接的专用IP地址,这是部署专用链接端点及其对应的专用DNS条目的一部分。我能够找到与专用终结点关联的NIC的正确资源ID,但是当我尝试将该ID直接传递给对reference()
的调用时,它将失败,并出现InvalidTemplate
错误。 / p>
以下是演示问题的模板:
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"privateEndpointName": {
"type": "string"
}
},
"variables": {
},
"resources": [
],
"outputs": {
"nic": {
"type": "object",
"value": "[reference(reference(resourceId('Microsoft.Network/privateEndpoints',parameters('privateEndpointName')), '2019-09-01').networkInterfaces[0].id, '2019-07-01')]"
}
},
"functions": []
}
此操作失败,并显示以下信息:
The template output 'nic' at line '14' and column '16' is not valid: The template function 'reference' is not expected at this location. Please see https://aka.ms/arm-template-expressions for usage details...
答案 0 :(得分:0)
使用嵌套的reference()
调用将不起作用。
尽管未在文档中列出,但我自己的经验是,reference
尝试在模板中使用时会立即自行解决。
这意味着当您使用reference(reference(resourceId()...)...)
时,模板认为您正在尝试传递reference
的{{1}}和resourceId
,这显然是无效的。期望它以reference(resourceId(...)...)
开头,而不是/subscriptions/
。
我确定您已经对其进行了测试,但是请尝试直接在模板中使用嵌套reference
(NIC的reference
)的结果以验证它确实是嵌套的resourceId
,而不是引起问题的网卡reference
。
答案 1 :(得分:0)
您可以通过在收集器模式中使用嵌套模板来使其工作。
https://docs.microsoft.com/en-us/azure/architecture/building-blocks/extending-templates/collector
在此模型中,您可能需要两个嵌套的模板部署:
您可以用一个完成它,但是模板变得有点难以阅读。这是有关如何执行的粗略示例。您可能需要修复一些问题,但总体思路应保持不变。 (“ [[”告诉模板在第二个(嵌套)模板的上下文中解析模板函数,所有“ [”将在第一个模板的上下文中解析)。
{ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "privateEndpointName": { "type": "string" } }, "variables": {}, "resources": [ { "type": "Microsoft.Resources/deployments", "apiVersion": "2015-01-01", "name": "privateEndpointDeployment", "properties": { "mode": "Incremental", "parameters": { "nicId": { "value": "[reference(resourceId('Microsoft.Network/privateEndpoints',parameters('privateEndpointName')), '2019-09-01').networkInterfaces[0].id]" } }, "template": { "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "nicId": { "type": "string" } }, "variables": {}, "resources": [], "outputs": { "nic": { "type": "object", "value": "[[reference(parameters('nicId'), '2019-07-01')]" } } } } } ], "outputs": { "nic": { "type": "object", "value": "[reference('privateEndpointDeployment', '2015-01-01').outputs.nic.value]" } } }