使用Terraform(工作区,模块等)配置客户帐户的最佳实践是什么?

10

我需要在AWS中创建和管理多个客户环境,并希望利用Terraform部署所有必要的资源。每个客户环境基本相同,唯一区别是他们用来访问其中一个服务器的URL。

我已经编写了一个Terraform配置,可以部署给定客户的所有资源。但是...如何将相同的配置应用于下一个客户,而不复制整个Terraform目录并为每个客户重复该过程。(我可能有数百个这样的客户)

我听说工作区和模块或两者都可以使用。是否有关于此的最佳实践文章?

谢谢


1
不是工作区,根据Farid的答案,一定是模块。文档明确建议不要将工作区用于环境或系统分解。它们用于实验或类似事情。 - Davos
1个回答

13

您应该将代码 模块化,然后可以使用不同的变量从 git 存储库中轻松地重用该模块来为客户提供服务。在这种情况下,您将最终得到一个只配置主模块文件的文件。

每个客户都有一个目录,其中包含加载模块并对其进行配置的 terraform 文件。如果您在该目录中使用 terraform apply,则状态也将保存在该目录中。为确保您的团队也能够部署和更改,请使用后端,例如 S3,以使状态被写入那里。请注意,您必须在各自的目录中为每个客户配置后端。确保每个客户的后端不会冲突(例如,在 S3 中使用不同的路径)。

Nicki Watt 在此方面做了一次很好的演讲。您可以在这里观看视频,在这里查看幻灯片。


我有机会进一步处理这个问题,现在我觉得我已经解决了。现在每个东西都是一个模块,我能够从该模块部署到多个客户端。这是我所做的... 创建“主”terraform配置并将其检入git(Master),然后对于每个客户端,我检出主分支并为每个客户创建一个分支,修改terraform配置文件,然后再次检入。你有看到任何漏洞吗?谢谢!你的评论帮了很大的忙! - user4109728
@davos,你当然可以这样做,但需要使用不同的 Terraform 栈。 - Farid Nouri Neshat
你知道我的下一个问题是什么吗?你如何为那个不同的栈创建s3后端?我想你只需要在某个时候手动创建一个。这就是所谓的“龟壳”——一层又一层的s3存储桶。 - Davos
没错。如果有很多Terraform堆栈或经常创建环境,那么容易做的就是使用脚本自动化创建S3存储桶。 - Farid Nouri Neshat
这种方法是可以的,但是假设您更改了一个模块并希望为每个客户堆栈重新应用TF。有没有比编写一些特定脚本循环遍历客户目录并应用配置更好的方法? - rix
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接