如何组织我的 terraform 资源以最大程度地减少变更影响以及部署某些内容所需的构建数量?

问题描述 投票:0回答:1

所以,我想使用 Terraform 提供很多资源。我想要自动化部署,但我无法将资源分组在一起。

它主要是后端 API(同步和异步)、前端应用程序以及一些用于异步处理事件的附加代码。

但是,我希望最大限度地减少

terraform apply
带来的变更影响。但我也想避免必须手动创建每个资源的情况。最好的一点是,如果我对 API 进行更改,则仅配置 API 所需的资源。

为了使 Terraform 完全捕获依赖关系图,我必须创建一个模块,其中包含我拥有的所有代码的所有资源。

但这违背了我最小化变更影响的原则。

我尝试提出以下方案。但我并不满足。

因此,我根据给定 API 或 Web 应用程序执行所需的资源,将所有资源拆分为较小的模块。因此,前端将有自己的 tfstate 文件,每个 API 将有自己的 tfstate 文件。

其中一个问题是两个 API 共享某些资源时。我想我应该进一步将资源分成子模块。因此,如果我有两个 API,A 和 B,我会创建一个具有公共资源的模块,即模块 A 的资源和模块 B 的资源。

当我想提供 API A 时,我会运行

terraform apply -target=moduleA -target=common

另一个问题是前端需要引用 API URL 时。这只是 .拥有一个 tfstate 可以让我注入这些变量,但我不能再这么做了。

我确实考虑过使用

terraform_remote_state
,但我不确定这是否是最佳实践。

terraform terraform-provider-aws cicd
1个回答
0
投票

是的

terraform_remote_state
是一种很好且常见的做法 - 我什至会推荐它用于您的用例。

您可能感兴趣的另一件事是 Atlantis 用于运行 Terraform 的 CI/CD - 它能够检测更改在哪里以及取决于该更改的内容,因此这可能非常适合您的最佳选择.

© www.soinside.com 2019 - 2024. All rights reserved.