ARM模板获取Microsoft.Maps/accounts主键并存入KeyVault的问题与解决
解决ARM模板中获取Azure Maps账户主键的问题
我来帮你梳理下你遇到的几个问题,以及对应的解决办法:
1. 第一个错误:providers函数参数使用不当
你最初尝试用providers('Microsoft.Maps', 'account')动态获取API版本时出错,原因是:
providers函数的第二个参数要求是不带命名空间的多段资源类型,而Azure Maps的资源类型是复数形式的accounts,不是单数account- 其实更稳妥的方式是直接使用已知的、兼容的API版本,不用动态获取,避免这类函数参数错误
2. 第二个错误:资源类型单复数不匹配+API版本兼容性
你后续测试的代码出现InvalidResourceType错误,是因为:
- 资源ID里写的
Microsoft.Maps/account是单数,而Azure Maps的正确资源类型是复数Microsoft.Maps/accounts - 虽然2018-05-01是
Microsoft.Maps/accounts的有效API版本,但资源类型写错的话,API版本也无法正常匹配
3. 最终可正常运行的写法
修正上述问题后,正确的表达式如下:
"[listKeys(resourceId('Microsoft.Maps/accounts', parameters('keyVaultVaultSecretMapsAccountsResourceName')), '2018-05-01').primaryKey]"
这里的关键修正点包括:
- 将资源类型从单数
account改为复数accounts,匹配Azure Maps的实际资源类型 - 调整参数名以对应复数资源的命名(确保和你模板中的参数名称一致)
- 使用
primaryKey直接获取主键,而非keys[0].value——因为Azure Maps账户的listKeys返回结构中,直接提供了primaryKey和secondaryKey两个属性,更直观可靠
这些错误主要源于对ARM模板中资源类型的单复数混淆、函数参数规则的误解,以及对listKeys返回结构的不熟悉,修正后就能成功获取主键并将其持久化到Key Vault中了。
内容的提问来源于stack exchange,提问作者user9314395
相关产品推荐
相关产品推荐

