terraform - 使用没有特定提供程序版本的 Terraform
问题描述
我有在 AWS 上运行的 Terraform 环境,但我最近注意到在我的 .tf 文件中,我没有任何特定的提供程序版本,例如
provider "aws" {
version = "3.15"
}
每次我初始化我的基础设施时,它都会使用不同的提供程序版本运行。我有几个问题:
- 这种情况会在未来对我的环境造成任何问题吗?它应该是静态的还是可以保持动态的?
- 提供者版本应该在开始时给出还是可以在创建之后给出?
- 我为新模块运行了terraform init几次,因为我的提供程序版本是动态的,模块安装有不同的提供程序版本。可以使提供程序版本静态破坏其中一些模块吗?
我的 Terraform 版本是0.13.4。
非常感谢
此致。
解决方案
拥有不受约束的提供程序版本的主要后果是,提供程序的未来版本可能包含重大更改,然后您将被阻止使用该配置,直到您以某种方式解决它们。通过严格限制版本或使用上限,您可以将提供程序升级作为一项单独的任务处理,以便在您方便时完成,而不会阻止您可能认为更重要的任何其他工作。
特定提供程序的版本选择对于整个配置、所有模块都是全局的,因此 Terraform 将选择所有模块都可以支持的最新可用版本。这确实意味着,如果您过度限制您的要求,那么您可能会造成根本不接受任何版本的情况,因为两个模块选择不重叠的版本范围。这就是文档建议>=
对共享模块(仅限制下限)和~>
根模块(同时限制下限和上限)使用约束的原因。
在更高版本的 Terraform 中,有一个依赖锁定文件,它记录了所做的选择,terraform init
以便它们可以“粘性”以供将来运行。这意味着您可以在主配置中使用的版本约束更加自由,因为 Terraform 本身会记住选择了哪个版本并重新使用该版本,除非您使用terraform init -upgrade
. Terraform v0.13 还没有该功能,因此您已经看到,旧版本将始终采用与约束匹配的最新版本,而不管之前可能选择了什么。
推荐阅读
- kivy - 构建 APK 64 位目标 SDK 28
- c - 为什么只允许在 main() 中使用未定义大小的数组?
- c# - CSharpScript 的性能可以提高吗?
- vba - 列表框中的文本到数组中,除非我先单击列表框中的项目,否则文本不会进入我的数组
- python - 正则表达式引号之间的所有内容,包括换行符
- spring-data - 使用规范通过 IGNITE 执行查询
- python - 在 python 中进行子类化以在客户端代码中解耦的正确方法
- sql-loader - SQL 加载程序:列 DR165_CREDIT_LIMIT_EXP_DT :不是有效的月份错误
- python - 使用变量导入和使用 django 模型类
- mysql - 如何在相等的桶中按距离排序?