gpt4 book ai didi

azure - 使用 Bicep 将 API 管理专用 IP 地址输入专用 DNS 条目时,不需要模板函数 'reference'

转载 作者:行者123 更新时间:2023-12-02 08:22:34 24 4
gpt4 key购买 nike

我想在私有(private) DNS 区域 azure-api.net 中为我的内部 API 管理实例创建 DNS A 记录以及 API 管理部署:

var privateDnsZoneName = 'azure-api.net'
resource privateDnsZone 'Microsoft.Network/privateDnsZones@2020-06-01' = {
name: privateDnsZoneName
location: 'Global'
}

resource privateDnsZoneEntry 'Microsoft.Network/privateDnsZones/A@2020-06-01' = {
name: apim.name
parent: privateDnsZone
properties: {
aRecords: [for addr in apim.properties.privateIPAddresses: {
ipv4Address: addr
}]
ttl: 3600
}
}

但是在部署时会导致此错误:

Line |
57 | New-AzResourceGroupDeployment -ResourceGroupName $ResourceGroupName `
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| 17:12:13 - Error: Code=InvalidTemplate; Message=Deployment template validation failed: 'The template resource
| '[format('{0}/{1}', variables('privateDnsZoneName'), parameters('apimName'))]' at line '221' and column '9' is not
| valid: The template function 'reference' is not expected at this location. Please see
| https://aka.ms/arm-template-expressions for usage details.. Please see https://aka.ms/arm-template-expressions for
| usage details.'.

这个地方(ARM)似乎不支持reference()函数:

{
"type": "Microsoft.Network/privateDnsZones/A",
"apiVersion": "2020-06-01",
"name": "[format('{0}/{1}', variables('privateDnsZoneName'), parameters('apimName'))]",
"properties": {
"copy": [
{
"name": "aRecords",
"count": "[length(reference(resourceId('Microsoft.ApiManagement/service', parameters('apimName'))).privateIPAddresses)]",
"input": {
"ipv4Address": "[reference(resourceId('Microsoft.ApiManagement/service', parameters('apimName'))).privateIPAddresses[copyIndex('aRecords')]]"
}
}
],
"ttl": 3600
},
"dependsOn": [
"[resourceId('Microsoft.ApiManagement/service', parameters('apimName'))]",
"[resourceId('Microsoft.Network/privateDnsZones', variables('privateDnsZoneName'))]"
]
}

尝试在两者之间使用变量会导致相同的错误 - 因为实际上会生成相同的 ARM JSON。

var privateDnsZoneName = 'azure-api.net'
resource privateDnsZone 'Microsoft.Network/privateDnsZones@2020-06-01' = {
name: privateDnsZoneName
location: 'Global'
}

var apimPrivateIPAddresses = apim.properties.privateIPAddresses

resource privateDnsZoneEntry 'Microsoft.Network/privateDnsZones/A@2020-06-01' = {
name: apim.name
parent: privateDnsZone
properties: {
aRecords: [for addr in apimPrivateIPAddresses: {
ipv4Address: addr
}]
ttl: 3600
}
}

最佳答案

除了将私有(private) DNS 区域 + 记录创建拆分为 Bicep 模块并摆脱 reference() 函数之外,我没有找到其他方法:

param privateDnsZoneName string = 'azure-api.net'
param privateDnsARecordName string
param privateDnsARecordAddresses array

resource privateDnsZone 'Microsoft.Network/privateDnsZones@2020-06-01' = {
name: privateDnsZoneName
location: 'Global'
}

resource privateDnsZoneEntry 'Microsoft.Network/privateDnsZones/A@2020-06-01' = {
name: privateDnsARecordName
parent: privateDnsZone
properties: {
aRecords: [for addr in privateDnsARecordAddresses: {
ipv4Address: addr
}]
ttl: 3600
}
}

并将 privateIPAddresses 数组传递给模块。

module privateDnsEntry './private-dns.bicep' = {
name: 'apim-private-dns'
params: {
privateDnsZoneName: 'azure-api.net'
privateDnsARecordName: apim.name
privateDnsARecordAddresses: apim.properties.privateIPAddresses
}
}

关于azure - 使用 Bicep 将 API 管理专用 IP 地址输入专用 DNS 条目时,不需要模板函数 'reference',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67255232/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com