azure - 为什么我无法访问模板输出中 publicIpAddress 的某些字段?
问题描述
在我的模板输出中,我想返回分配的公共 IP 地址。我在“输出”部分尝试了以下内容:(在“对象”类型的输出中)
"ipobj": "[reference(variables('publicIPAddressName'),'2020-07-01','Full')]"
这有效并返回整个 publicIpAddress 对象:
"ipobj": {
"apiVersion": "2020-07-01",
"location": "eastus",
"sku": {
"name": "Basic",
"tier": "Regional"
},
"properties": {
"provisioningState": "Succeeded",
"resourceGuid": "...",
"ipAddress": "...",
"publicIPAddressVersion": "IPv4",
"publicIPAllocationMethod": "Dynamic",
"idleTimeoutInMinutes": 4,
"dnsSettings": {
"domainNameLabel": "simplelinuxvm-zktwk4fzmy5p4",
"fqdn": "simplelinuxvm-zktwk4fzmy5p4.eastus.cloudapp.azure.com"
},
"ipTags": [],
"ipConfiguration": {
"id": "/subscriptions/.../resourceGroups/.../providers/Microsoft.Network/networkInterfaces/simpleLinuxVMNetInt/ipConfigurations/ipconfig1"
}
},
"subscriptionId": "...",
"resourceGroupName": "...",
"scope": "",
"resourceId": "Microsoft.Network/publicIpAddresses/simpleLinuxVMPublicIP",
"referenceApiVersion": "2020-07-01",
"condition": true,
"isConditionTrue": true,
"isTemplateResource": false,
"isAction": false,
"provisioningOperation": "Read"
}
这符合publicIpAddress 对象的 API 文档。而且我还可以使用不带“Full”参数的引用来检索一些属性,根据Azure doc,它应该返回对象的。这些工作:properties
"[reference(variables('publicIPAddressName')).dnsSettings.fqdn]"
"[reference(variables('publicIPAddressName')).publicIPAddressVersion]"
但其他一些属性无法访问:
"[reference(variables('publicIPAddressName')).ipAddress]"
"[reference(variables('publicIPAddressName'),'2020-07-01','Full').properties.ipAddress]"
根据错误消息,(在中间示例的情况下):
The template output '...' is not valid: The language expression property 'ipAddress' doesn't exist, available properties are 'provisioningState, resourceGuid, publicIPAddressVersion, publicIPAllocationMethod, idleTimeoutInMinutes, dnsSettings, ipTags'
因此,Azure 似乎不允许我访问完整输出中存在的属性。这背后是否有任何解释/意图,或者至少有解决方法?
注意:如果我将“字符串”输出(即不是对象的一部分)定义为
"ip": {
"type": "string",
"value": "[reference(variables('publicIPAddressName')).ipAddress]"
}
或者
"ip": {
"type": "string",
"value": "[reference(variables('publicIPAddressName'),'2020-07-01','Full').properties.ipAddress]"
},
解决方案
我最近遇到了类似的问题,下面是一些参考资料,其中提到了这种情况的原因。
据此:_
一世)
仅当“publicIPAllocationMethod”设置为“静态”时,“ipaddress”属性才存在。(静态公共 IP 地址)。如果您对非静态 IP 地址执行此操作,则会返回错误,但适用于静态 IP 地址。
ii)
仅当附加到正在运行的服务或 VM 时,它才会具有“ipAddress”属性。如果 VM 已“停止”,它将没有 ipAddress 属性。
而且,看起来这个链接中的 github 中有一个未解决的问题,与此相关。参考这个,以防它在未来得到解决。
还要检查此链接,其中提到:
这是平台中的一个已知限制,其中动态公共 IP 地址在 VM 启动并运行之前不会自行解析。有两种解决方法:
i) 在静态模式下创建公共 IP 地址。这将确保立即分配公共 IP 地址。但是,请注意,您可能会产生额外费用。
ii) 将依赖关系从公共 IP 地址更改为 IP 地址所附加到的虚拟机。这将确保公共 IP 地址始终可用。
推荐阅读
- laravel - 如何在 laravel 中的嵌套关系上放置 where 条件?
- php - 如何删除数组中的对象,其中数组中的键不可用
- python - 为什么第二个代码不需要 split()?
- redirect - 使用 IIS 重写的自定义域和资产重定向
- sql - 如何在 postgresql 中使用过滤器返回列表类型?
- python - 在 Numba CUDA 中使用 gridDim 分配共享内存时出错
- pytorch - pytorch 如何更加重视聚合特征、注意力机制
- elasticsearch - 观察者跟踪特定的驱动器空间
- java - 使用 @RequestParam 注释调用视图时模板和样式不起作用
- expo - 由于解析失败,无法在 Expo Notification 中获取 expoToken:Lcom/google/firebase/iid/FirebaseInstanceId;