使用Terraform在路线53中进行跨帐户子域/托管区域委派



我有两个环境和两个AWS帐户:dev和prod。因此,我有两种托管区域:

dev帐户中的
  • dev.example.com
  • 我的产品帐户中的example.com

为了成功地将流量路由到我的dev.example.com子域,我需要在我的顶级域(TLD(的托管区域中使用名称服务器记录委派到我的顶级域名(TLD。例如,

dev.example.com NS Simple [ns-1960.awsdns-22.co.uk. ns-188.awsdns-20.com. ns-208.awsdns-37.net. ns-1089.awsdns-01.org.]

在Terraform代码中,我将这样定义两个托管区域:

resource "aws_route53_zone" "top_level_domain" {
count = var.env == "prod" ? 1 : 0
name = "example.com"
tags = {
name = "Hosted Zone for top-level domain in production"
env  = var.env
}
}
resource "aws_route53_zone" "subdomain" {
count = var.env == "prod" ? 0 : 1
name = "dev.example.com"
tags = {
name = "Hosted Zone for ${var.env} environment"
env  = var.env
}
}

为了保持所有的东西都被编码,我希望能够在Terraform配置中定义我的委托记录。例如,

resource "aws_route53_record" "subdomain_delegation" {
count = var.env == "prod" ? 1 : 0
zone_id = aws_route53_zone.top_level_domain.zone_id
name    = "dev.example.com"
type    = "NS"
ttl     = 300
records = [
aws_route53_zone.subdomain.name_servers
]
}

问题在于在我的Terraform状态中找不到产品环境的aws_route53_zone.subdomain资源(因此aws_route53_zone.subdomain.name_servers(。

有没有一种优雅的方法来解决这个问题?或者,如果选择使用AWS帐户进行物理环境分离,这只是生活中的一个事实吗?

更新

我的Terraform配置的文件夹结构大致类似于:

dns/ (Terraform module)
dev/ (makes use of module)
prod/ (makes use of module)

我目前使用的方法是有两个提供者。

我有一个IAM主用户,可以在子帐户中扮演角色。

这样,在一个地形脚本中,我可以将一些操作指向根帐户别名,然后将其他操作指向子帐户别名。

因此,这允许在一个地形模块内的多个帐户之间共享一些状态。

相关内容

  • 没有找到相关文章

最新更新