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

Terraform使用for_each创建Azure应用服务证书绑定出现重复如何解决?

问题解决方案

你遇到的重复/报错问题核心是多实例资源未对齐for_each配置,直接引用多实例集合的全局属性会导致匹配逻辑错误,修正后的配置如下:

// custom hostname binding
resource "azurerm_app_service_custom_hostname_binding" "service_host_bind" {
  for_each            = azurerm_dns_cname_record.cname_target
  hostname            = trim(each.value.fqdn, ".")
  app_service_name    = azurerm_app_service._service.name
  resource_group_name = azurerm_resource_group._rg.name
  depends_on          = [azurerm_dns_txt_record._txt_target]
  lifecycle {
    ignore_changes = [ssl_state, thumbprint]
  }
}

// app service managed certificate
resource "azurerm_app_service_managed_certificate" "_service_manage_cert" {
  for_each                    = azurerm_app_service_custom_hostname_binding.service_host_bind
  custom_hostname_binding_id  = each.value.id     
}

// app service certificate binding
resource "azurerm_app_service_certificate_binding" "xtrm_service_certi_bind" {
  for_each             = azurerm_app_service_custom_hostname_binding.service_host_bind
  hostname_binding_id  = each.value.id
  certificate_id       = azurerm_app_service_managed_certificate._service_manage_cert[each.key].id
  ssl_state            = "SniEnabled"        
}

配置逻辑说明

  • 前两个资源天然保持key对齐:托管证书的for_each直接继承自hostname绑定资源集合,二者同key的实例对应同一个跳转域名
  • 证书绑定资源复用hostname绑定的集合作为for_each源,保证每个证书绑定实例对应同一个域名的绑定+证书组合
  • 通过each.key索引托管证书集合,即可拿到当前实例对应域名的证书ID,实现三类资源一一对应,不会出现重复创建或匹配错误的问题

注意事项

请确保最上游的azurerm_dns_cname_record.cname_target的for_each使用稳定的唯一键(建议直接用域名作为key,不要用列表索引),避免后续增减域名时出现资源误删的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:54:03