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

使用Terraform配置Cloud Run自定义域名DNS记录报错求助

问题分析

错误原因清晰明确:

  • A记录要求rrdatas必须是IP地址,你填入了带https://的完整URL,完全不符合DNS格式规则
  • CNAME记录要求rrdatas必须是纯域名(不带协议前缀),你同样填入了完整URL,触发格式校验失败
  • 额外问题:google_cloud_run_domain_mapping的depends_on里引用了不存在的google_dns_managed_zone.mahani_website_dns_zone,应改为你定义的google_dns_managed_zone.my_dns_zone
修复方案

1. 修正DNS记录配置逻辑

Cloud Run绑定自定义域名后,Google会自动生成合规的DNS记录值(A/AAAA或CNAME),我们可以直接通过google_cloud_run_domain_mapping资源的输出值自动配置DNS记录,无需手动填写Cloud Run服务URL。

2. 替换错误的Terraform代码片段

删除原有的google_dns_record_set.root_subdomain和google_dns_record_set.www_subdomain,替换为以下代码:

# 从Domain Mapping获取自动生成的DNS记录,批量创建对应Record Set
resource "google_dns_record_set" "cloud_run_domain_records" {
  for_each = {
    for record in google_cloud_run_domain_mapping.myweb.status[0].resource_records :
    "${record.name}-${record.type}" => record
  }

  name         = each.value.name
  type         = each.value.type
  ttl          = 300
  managed_zone = google_dns_managed_zone.my_dns_zone.name
  rrdatas      = [each.value.rrdatas]
}

# 为www子域名创建CNAME指向根域名(可选)
resource "google_dns_record_set" "www_subdomain" {
  name         = "www.${local.domain_name}."
  type         = "CNAME"
  ttl          = 300
  managed_zone = google_dns_managed_zone.my_dns_zone.name
  rrdatas      = ["${local.domain_name}."]
}

3. 修正Domain Mapping的依赖错误

修改google_cloud_run_domain_mapping的depends_on块:

resource "google_cloud_run_domain_mapping" "myweb" {
  name     = local.domain_name
  location = google_cloud_run_service.mw_cloud_run_svc.location
  metadata {
    namespace = data.google_project.my_website.project_id
  }
  spec {
    route_name = google_cloud_run_service.mw_cloud_run_svc.name
  }
  depends_on = [
    google_dns_managed_zone.my_dns_zone, # 修正为正确的托管区域名称
    google_cloud_run_service.mw_cloud_run_svc
  ]
}

4. 额外优化建议

  • 移除required_roles中的roles/owner和roles/domains.admin,这两个权限过大,Cloud Run+DNS配置不需要这么高的权限
  • 确保你的域名注册商已将DNS服务器指向Google Cloud DNS托管区域的NS记录,可通过google_dns_managed_zone.my_dns_zone.name_servers输出获取这些NS地址
验证修复

执行以下命令重新部署:

terraform init
terraform plan
terraform apply

部署完成后检查DNS记录是否正确生成,等待DNS生效后即可通过自定义域名访问你的Cloud Run服务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 14:54:55