由于我们正在评估Terraform以替换(部分)我们的多租户SaaS的Ansible供应流程,我们意识到Terraform的便利性,性能和可靠性,因为我们可以顺利地处理基础设施变更(添加/删除),保持跟踪红外状态(非常酷).
我们的应用程序是多租户SaaS,我们为客户提供单独的实例 - 在Ansible,我们拥有自己的动态库存(与EC2动态库存完全相同).我们经历了很多Terraform书籍/教程和最佳实践,其中很多人建议多环境状态应该在Terraform中单独和远程管理,但所有这些状态看起来都像静态环境(如Dev/Staging/Prod).
是否存在管理多租户应用程序的状态动态库存的最佳实践或实际示例?我们希望跟踪每个客户实例集的状态 - 轻松填充对它们的更改.
一种方法可能是我们为每个客户创建一个目录,并在其中放置*.tf脚本,这将调用托管在全球某个地方的模块.状态文件可能会被放到S3,这样我们就可以根据需要为每个客户填充更改.
网络上的每个 Terraform 指南都提供了部分解决方案,几乎总是不是真实的图片。
我明白了,并不是每个人都有相同的基础设施需求,但是让我担心的是常见的场景:
没有在真实示例项目中的任何地方出现。
我正在寻找那个,同时,我已经研究并得出结论,除了这些需求之外,我还想要:
我当前的结构,不使用模块 - 只有根模块:
infra/ ------------------------------ 'terraform init', 'terraform apply' inside here*
main.tf ------------------------ Sets up aws provider, backend, backend bucket, dynamodb table
terraform.tfvars
variables.tf ----------------- Holds few variables such as aws_region, project_name...
Run Code Online (Sandbox Code Playgroud)
我想要的结构文件夹树(用于单个存储桶资源的简单开发和暂存模拟)是我认为的事情:
infra/
dev/
s3/
modules.tf ------ References s3 module from local/remote folder with dev inputs
stage/
s3/
modules.tf ------ References s3 module from local/remote folder with stage inputs
Run Code Online (Sandbox Code Playgroud)
但是我以前的根模块中的文件呢?我仍然想像以前一样拥有一个远程后端 …