首页 > 解决方案 > 使用没有特定提供程序版本的 Terraform

问题描述

我有在 AWS 上运行的 Terraform 环境,但我最近注意到在我的 .tf 文件中,我没有任何特定的提供程序版本,例如

provider "aws" {
  version = "3.15"
}

每次我初始化我的基础设施时,它都会使用不同的提供程序版本运行。我有几个问题:

我的 Terraform 版本是0.13.4

非常感谢

此致。

标签: terraformterraform-provider-aws

解决方案


拥有不受约束的提供程序版本的主要后果是,提供程序的未来版本可能包含重大更改,然后您将被阻止使用该配置,直到您以某种方式解决它们。通过严格限制版本或使用上限,您可以将提供程序升级作为一项单独的任务处理,以便在您方便时完成,而不会阻止您可能认为更重要的任何其他工作。

特定提供程序的版本选择对于整个配置、所有模块都是全局的,因此 Terraform 将选择所有模块都可以支持的最新可用版本。这确实意味着,如果您过度限制您的要求,那么您可能会造成根本不接受任何版本的情况,因为两个模块选择不重叠的版本范围。这就是文档建议>=对共享模块(仅限制下限)和~>根模块(同时限制下限和上限)使用约束的原因。

在更高版本的 Terraform 中,有一个依赖锁定文件,它记录了所做的选择,terraform init以便它们可以“粘性”以供将来运行。这意味着您可以在主配置中使用的版本约束更加自由,因为 Terraform 本身会记住选择了哪个版本并重新使用该版本,除非您使用terraform init -upgrade. Terraform v0.13 还没有该功能,因此您已经看到,旧版本将始终采用与约束匹配的最新版本,而不管之前可能选择了什么。


推荐阅读