Azure DevOps YAML流水线用Terraform创建应用注册报错
错误含义说明
该报错是HashiCorp AzureAD Provider v2.0.x版本分支的已知序列化缺陷:创建Azure AD应用时,provider默认会将当前执行身份设置为应用所有者,若拉取当前身份的目录对象信息时接口返回的ODataId字段为空,就会触发JSON序列化校验失败,导致应用创建请求无法正常发出。
解决思路
- 升级AzureAD Provider版本(首选方案)
将代码中required_providers块内的azuread版本约束从~> 2.0.0调整为~> 2.15.0及以上的稳定版本,该bug已在后续补丁版本中被官方修复。修改后重新执行terraform init拉取新版本provider即可正常运行。
示例修改后的provider约束:
azuread = { source = "hashicorp/azuread" version = "~> 2.15.0" }
- 手动指定应用所有者(适配无法升级provider的场景)
如果受环境约束暂时无法升级azuread provider版本,可以在azuread_application资源块内显式指定owners参数,取值为你代码中已经拉取的当前客户端配置的对象ID,修改后的资源块示例:
resource "azuread_application" "example" { display_name = "Example-app" owners = [data.azuread_client_config.current.object_id] }
- 排查Azure DevOps服务连接权限
确认流水线使用的Azure服务连接对应的服务主体,拥有Azure AD的应用创建权限、目录读取权限,避免因权限不足导致拉取当前身份的对象ID为空的问题。
内容的提问来源于stack exchange,提问作者lavoizer
相关产品推荐
相关产品推荐

