ARM模板中关联现有DNS Zone添加CNAME报错的解决求助
问题解决方法
你的报错核心原因是ARM模板无法识别你引用的DNS Zone资源,同时代码里存在多余的无效属性,导致解析失败。以下是具体修正步骤:
- 移除无效的
networkProfile属性:CNAME记录资源的properties字段中并不包含networkProfile,这个多余配置会干扰ARM模板的资源解析逻辑,直接删除该部分即可。 - 添加DNS Zone的依赖关系:如果DNS Zone是在当前模板外提前创建的,需要在
dependsOn中明确引用它,确保ARM确认该资源已存在后再创建CNAME记录。 - 确认资源引用格式正确性:确保CDN Endpoint的
resourceId拼接正确,以及CNAME记录的名称格式符合[DNS Zone名称]/[记录名称]的要求。
修正后的完整代码如下:
{ "type": "Microsoft.Network/dnszones/CNAME", "apiVersion": "2018-05-01", "name": "[concat(parameters('domainName'), '/', parameters('storage_account_name'))]", "dependsOn": [ "[resourceId('microsoft.cdn/profiles', parameters('storage_account_name'))]", "[resourceId('Microsoft.Network/dnszones', parameters('domainName'))]" ], "properties": { "TTL": 3600, "CNAMERecord": { "cname": "[reference(concat(resourceId('microsoft.cdn/profiles', parameters('storage_account_name')), '/endpoints/', parameters('storage_account_name'))).hostName]" } } }
关键改动说明:
- 删除了
networkProfile字段,这是导致错误的主要原因之一。 - 在
dependsOn中添加了DNS Zone的资源引用,确保依赖顺序正确。 - 将
targetResource替换为CNAMERecord字段:ARM模板中创建CNAME记录需要明确指定CNAMERecord.cname属性,而不是targetResource(targetResource通常用于关联同一模板内的资源,这里直接引用CDN Endpoint的hostname更可靠)。 - 使用
reference函数获取CDN Endpoint的实际域名,避免手动拼接可能出现的错误。
内容的提问来源于stack exchange,提问作者Ramakrishnan Ramar
相关产品推荐
相关产品推荐

