terraform - Terraform (Hashicorp) 的不同环境

标签 terraform

我一直在使用 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/

相关文章:

sql-server - Terraform 中的基本 SQL 命令

postgresql - terraform 和 aurora postgresql 的存储类型错误

azure - 在 Terraform for Azure 中使用 for_each 时如何获取 id 作为输出?

Powershell 配置文件将参数附加到某个命令

amazon-web-services - 将 AWS S3 地形化为 Lambda 通知触发器

地形 : Is it possible to interpolate or loop through ressources from a list within the output block?

amazon-web-services - 如何触发Terraform上传新的Lambda代码

terraform - Terraform 资源名称中可以有一个点吗?

aws-lambda - CloudFront 的 Terraform lambda_function_association 作为模块内的可选列表

terraform - 通过 terraform 创建具有静态私有(private) ip 地址的 azure 应用程序网关