You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Terraform的AzAPI Provider更新Azure AD应用注册的ID URI?

解决方案:用Terraform更新Azure AD应用注册的Application ID URI

原代码问题分析

  1. 资源类型错误:你使用了Microsoft.Web/sites@2022-03-01,这是Azure App Service的资源类型,而非Azure AD应用注册的类型,正确类型应为Microsoft.AAD/applications@[对应API版本]。
  2. parent_id参数误用:Azure AD应用注册是顶层资源,不需要设置parent_id;你传入的服务主体Object ID不属于合法资源ID格式(必须以/开头),且更新应用注册应操作应用本身,而非服务主体。
  3. 目标资源指向错误:更新应用注册需直接关联azuread_application资源,而非服务主体对象。

正确的Terraform代码实现

场景1:通过Terraform管理的应用注册

如果该应用注册已在Terraform中用azuread_application资源定义,直接用以下代码更新:

resource "azapi_update_resource" "update_app_reg" {
  type        = "Microsoft.AAD/applications@2023-04-01"
  resource_id = azuread_application.app_reg.id

  body = jsonencode({
    properties = {
      identifierUris = [
        "api://${azuread_application.app_reg.application_id}"
      ]
    }
  })

  depends_on = [azuread_application.app_reg]
}

场景2:更新已存在的非Terraform创建的应用注册

手动构造应用注册的资源ID(替换EXISTING_APP_OBJECT_ID和EXISTING_APP_APPLICATION_ID为实际值):

resource "azapi_update_resource" "update_existing_app_reg" {
  type        = "Microsoft.AAD/applications@2023-04-01"
  resource_id = "/providers/Microsoft.AAD/applications/EXISTING_APP_OBJECT_ID"

  body = jsonencode({
    properties = {
      identifierUris = [
        "api://EXISTING_APP_APPLICATION_ID"
      ]
    }
  })
}

更优方案:创建时直接配置

如果还未创建应用注册,或可修改原创建代码,直接在azuread_application资源中指定identifier_uris,无需后续更新:

resource "azuread_application" "app_reg" {
  display_name    = "你的应用名称"
  identifier_uris = ["api://${azuread_application.app_reg.application_id}"]
  
  # 其他必要配置...
}

纯Terraform完全可以实现需求,无需依赖Azure CLI命令。

内容的提问来源于stack exchange,提问作者Serhat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 20:05:06