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

Terraform销毁Azure DevOps服务端点时未删除应用注册问题咨询

关于azuredevops_serviceendpoint_azurecr关联的Entra ID应用注册的问题解答

1. 能否指定应用注册的显示名称?

通过azuredevops_serviceendpoint_azurecr资源本身没办法直接指定它自动生成的Entra应用注册显示名称——这个资源是Azure DevOps端的管理组件,后台生成的应用注册没有暴露命名参数。但可以换个思路:手动用Terraform创建符合命名规范的应用注册,再关联到Azure DevOps服务端点,具体步骤如下:

  • 先用azuread_application资源定义自定义显示名称的应用注册
  • 基于该应用创建服务主体(azuread_service_principal)
  • 最后创建azuredevops_serviceendpoint_azurecr时,指定使用手动创建的服务主体信息,而不是让它自动生成。

2. 如何实现删除资源时同步删除应用注册?

如果依赖azuredevops_serviceendpoint_azurecr自动生成应用注册,Terraform不会管理这个应用的生命周期,所以执行terraform destroy时不会删除它。解决办法还是上面的手动管理方案:把应用注册、服务主体纳入Terraform的资源管理范围,这样销毁时Terraform会按依赖顺序自动清理相关资源。

完整配置示例

# 获取当前租户和用户信息
data "azuread_client_config" "current" {}

# 创建Azure DevOps项目(示例)
resource "azuredevops_project" "example" {
  name               = "MyProject"
  description        = "示例项目"
  visibility         = "private"
  version_control    = "Git"
  work_item_template = "Agile"
}

# 1. 创建自定义名称的Entra ID应用注册
resource "azuread_application" "acr_service_endpoint" {
  display_name = "ADO-ACR-服务端点-我的项目" # 替换成你的规范名称
  owners       = [data.azuread_client_config.current.object_id]
}

# 2. 创建对应服务主体
resource "azuread_service_principal" "acr_service_endpoint" {
  application_id = azuread_application.acr_service_endpoint.application_id
}

# 3. 创建应用密码(服务主体密钥)
resource "azuread_application_password" "acr_service_endpoint" {
  application_object_id = azuread_application.acr_service_endpoint.object_id
  end_date_relative    = "8760h" # 1年有效期,可按需调整
}

# 4. 创建Azure DevOps ACR服务端点,关联手动创建的服务主体
resource "azuredevops_serviceendpoint_azurecr" "example" {
  project_id            = azuredevops_project.example.id
  service_endpoint_name = "我的ACR服务端点"
  azurecr_name          = "myacrregistry" # 替换成你的ACR名称
  
  service_principal_id      = azuread_service_principal.acr_service_endpoint.id
  service_principal_secret  = azuread_application_password.acr_service_endpoint.value
  tenant_id                 = data.azuread_client_config.current.tenant_id
}

效果说明

  • 应用注册会使用你指定的display_name,命名规范完全可控
  • 执行terraform destroy时,Terraform会按依赖顺序先删除Azure DevOps服务端点,再删除应用密码、服务主体,最后删除应用注册,实现资源的同步清理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 23:47:34