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

如何用Terraform在AWS Route 53中创建适配多环境的动态DNS记录?

动态适配多环境的AWS Route53记录配置方案

核心逻辑

通过Terraform Cloud工作区的专属环境变量传递环境标识,结合Terraform的变量插值和本地值功能,让同一份代码自动生成对应环境的Route53记录,无需为每个环境单独编写配置。

具体实现步骤

1. 声明Terraform变量

在代码中定义必要变量,用于接收工作区传递的环境参数:

variable "environment" {
  type        = string
  description = "环境标识:dev/demo/prod"
}

variable "domain_name" {
  type        = string
  description = "Route53托管的主域名"
  default     = "my-domain.com"
}

variable "target_dns" {
  type        = string
  description = "记录指向的目标DNS地址(比如ALB、EC2的公网DNS)"
}

2. 动态生成环境专属域名

用本地值处理域名拼接逻辑,生产环境直接使用主域名,其他环境生成对应子域名:

locals {
  # 生产环境留空前缀,其他环境添加环境标识作为子域名前缀
  record_prefix = var.environment == "prod" ? "" : "${var.environment}."
  full_domain   = "${local.record_prefix}${var.domain_name}"
}

3. 创建Route53记录资源

读取主域名的Route53托管区信息,结合动态生成的域名创建环境专属记录:

# 获取Route53主域名托管区ID
data "aws_route53_zone" "main" {
  name         = var.domain_name
  private_zone = false # 若为私有托管区则改为true
}

# 创建适配当前环境的Route53记录
resource "aws_route53_record" "env_specific" {
  zone_id = data.aws_route53_zone.main.zone_id
  name    = local.full_domain
  type    = "CNAME" # 根据实际需求选择A/AAAA/CNAME等记录类型
  ttl     = 300
  records = [var.target_dns]
}

4. 配置Terraform Cloud工作区变量

为每个工作区设置对应的环境变量:

  • 生产工作区(绑定main分支):设置environment = prod,同时填入生产环境资源的target_dns值
  • 开发工作区(绑定dev分支):设置environment = dev,填入开发环境资源的target_dns值
  • 演示工作区(绑定demo分支):设置environment = demo,填入演示环境资源的target_dns值

5. 关联GitLab分支与工作区

在Terraform Cloud中配置各工作区的VCS触发规则:

  • 生产工作区:仅监听main分支的代码提交
  • 开发工作区:仅监听dev分支的代码提交
  • 演示工作区:仅监听demo分支的代码提交

可选优化

  • 如果不同环境需要不同的TTL或记录类型,可将type、ttl也设为变量,通过工作区环境变量传递
  • 添加输出值方便查看生成的域名:
output "deployed_domain" {
  value = local.full_domain
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 06:27:29