如何在 Terraform 中处理各种环境的 DNS?

如何在 Terraform 中处理各种环境的 DNS?

我在 Google Cloud 上的 Terraform(开发 / 暂存 / 生产)中拥有各种环境(以工作区的形式)。它们在基础设施方面大多共享相同的代码。更改是在环境大小的设置中。到目前为止一切顺利。但是,当涉及到 DNS 时,所有环境都共享完全相同的代码,甚至相同的状态,因为只有一个 DNS 区域,我认为没有理由使用更多区域(也许我错了)。

这会带来一些问题:当我在一个环境中做出一些更改时,我需要将其导入其他环境。当我想销毁某个环境时,DNS 区域也会被销毁。

我认为在多环境设置中必须有更好的方法来处理 DNS。
我需要在所有环境中使用 DNS,因为当我在任何环境中添加面向公众的服务时,其 IP 需要与区域中的新记录相关联。

编辑:我现在尝试使用各种不同的区域(google_dns_managed_zone)链接到每个环境的子域。这样,我就可以只拥有每个环境所需的资源。但现在的问题是每个区域都会自动分配给新的 NS 服务器。所以我应该更新注册商的名称服务器列表,或者我应该将它们添加到主区域(我试过了,两种方法都有效)。但这变得复杂而且效率不高。

答案1

最简单的做法是在您的区域内为每个环境创建一个单独的子域,即<environment>.example.com。然后您的服务将创建类似的记录<service>.<environment>.example.com;这样,如果每个环境都包含相同的服务,则它们就不会与另一个环境发生冲突。

如果您必须有<service>.example.com记录,那么您可以始终创建一个 CNAME 记录,指向运行该服务的权威版本的环境,通常是您的生产环境。

相关内容