【问题标题】:Cross-account subdomain/hosted zone delegation in Route 53 with Terraform使用 Terraform 在 Route 53 中跨账户子域/托管区域委派
【发布时间】:2022-12-15 07:58:07
【问题描述】:

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

  • 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)

【问题讨论】:

  • 无论如何你想要两个区域?
  • 是的,我想保留这两个区域(与我一直遵循的每个帐户一个环境的模式保持一致)。
  • 那是在同一个代码库中吗?
  • 是的,所有这些都在相同的代码库中,但不同环境的子目录不同。
  • 如果您想要项目分离,那么您将拥有单独的 Terraform HCL。一张用于生产区,一张用于授权区。不要试图将它们混合在一起,因为这需要两个帐户的权限,这会破坏分离的目的。

标签: terraform terraform-provider-aws amazon-route53


【解决方案1】:

我目前使用的方法是使用two providers

我有一个 IAM 主用户,可以在子账户中担任角色。

这样 - 在一个 terraform 脚本中 - 我可以将一些操作定位到根帐户别名,然后其他操作可以定位到子帐户别名。

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

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 2016-06-28
    • 2021-12-13
    • 2020-03-29
    • 2023-03-10
    • 2017-11-18
    • 2020-06-10
    相关资源
    最近更新 更多