我一直在使用 Terraform 构建我的 AWS 堆栈并且很享受它。如果要在商业环境中使用,则需要将配置重新用于不同的环境(例如 QA、STAGING、PROD)。
我怎样才能实现这一目标?我是否需要创建一个包装器脚本来调用 terraform 的 cli,同时为每个环境传递不同的状态文件,如下所示?我想知道 Terraform 是否提供了更原生的解决方案。
terraform apply -state=qa.tfstate
最佳答案
我建议你看看hashicorp best-practices repo ,它有一个非常好的设置来处理不同的环境(类似于 James Woolfenden 的建议)。
我们正在使用类似的设置,并且效果非常好。然而,这个最佳实践存储库假设您使用的是 Atlas,但我们没有。我们创建了一个相当复杂的 Rakefile
,它基本上(再次按照最佳实践存储库)获取 /terraform/providers/aws
的所有子文件夹,并公开它们使用命名空间作为不同的构建。因此,我们的 rake -T
输出将列出以下任务:
us_east_1_prod:init
us_east_1_prod:plan
us_east_1_prod:apply
us_east_1_staging:init
us_east_1_staging:plan
us_east_1_staging:apply
这种分离可以防止 dev 独有的更改意外影响(或更糟糕的是,破坏)prod 中的某些内容,因为它是不同的状态文件。它还允许在实际将其应用到产品之前测试开发/暂存中的更改。
此外,我最近偶然发现了这篇小文章,它基本上显示了如果将所有内容放在一起可能会发生什么: https://charity.wtf/2016/03/30/terraform-vpc-and-why-you-want-a-tfstate-file-per-env/
关于terraform - Terraform (Hashicorp) 的不同环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37005303/