YAML管道运行ARM TTK测试触发ID属性校验报错问题求助
报错根因
本次管道失败是ARM模板测试工具包(ARM TTK)的IDs Should Be Derived From ResourceIDs校验规则触发导致,PowerShell进程返回错误码1中断了管道执行。
规则要求:所有资源的id属性必须使用指定表达式构造,仅允许使用extensionResourceId、resourceId、subscriptionResourceId、tenantResourceId、if、parameters、reference、variables、subscription、guid这些函数生成id值。
解决方案
定位问题代码
从报错日志中NetworkRules[0].id的提示,找到ARM模板中对应网络规则配置的id字段,检查当前的写法是否不符合要求。常见的错误写法包括用concat直接拼接id字符串、硬编码固定id值等。修正id写法
将不符合要求的id替换为合法的构造方式,举例如下:
错误写法示例:
"id": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/virtualNetworks/', variables('vnetName'))]"
正确写法示例(使用resourceId函数):
"id": "[resourceId('Microsoft.Network/virtualNetworks', variables('vnetName'))]"
如果id值存放在变量或参数中,确保变量/参数的取值也是用上述合法函数构造即可。
- 临时跳过校验(应急方案)
如果需要先跑通管道后续流程,可在执行ARM TTK测试的PowerShell命令中添加跳过该规则的参数:Test-AzTemplate -Skip 'IDs Should Be Derived From ResourceIDs'
该方案仅做临时应急使用,不建议长期开启,修正id写法符合Azure IaC最佳实践是最优解。
内容的提问来源于stack exchange,提问作者Pallab
相关产品推荐
相关产品推荐

