terraform 0.14.0的terraform.lock.hcl文件在审核时是必须理解的,因此我尝试做出了摘要
terraform.lock.hcl表示的是什么?
正如在0.14.0版本GA发布的文章中所提到的,这是在terraform init时创建的文件。
角色是指Terraform在工作目录的.terraform子目录中缓存各种项目的锁定文件。
首先,我所考虑的是是否应该将这个新文件包含在版本控制中?不过,我得知了它是必需的。
在运行 Terraform init 时,Terraform 0.14 自动生成的依赖锁定文件将被自动生成。生成的锁定文件应该提交到版本控制系统中,以便在未来的运行中,Terraform 可以确保选择完全相同的提供者版本。
翻译
在Terraform 0.14版本中,依赖锁定文件会在执行”Terraform init”命令时自动生成。生成的锁定文件会提交到版本控制系统中,并且能够确保Terraform在将来的执行时选择完全相同的提供程序版本。
造型
如果在terraform文件中存在provider requirement(如版本指定),则将被记录在该锁定文件中。
-
- version: 決定されたプロバイダーバージョン
-
- constraints: terraformが実際には参照しない値。人間向けに、version決定についての制限を示す。
- hashes: New provider package checksumsという機能のhash値。
新供应商包校验和
-
- providerのブロックの変更がないにもかかわらず、以前は記録されていなかった新しいチェックサムが追加されることがあります。
h1, zhの接頭辞は、異なるハッシュスキームを示している
新しいチェックサムが追加されることは、Terraformが異なるハッシュ方式の間で徐々に移行していることを表しています
なぜこれが発生するかというのは詳しい内部仕様理解が必要っぽいが、とりあえず都合が良い場合に新しいハッシュスキームを導入するらしい
新しいハッシュスキームが導入されるのが都合が悪い場合は、terraform providers lockにて、事前に追加設定など可能。
この詳しい挙動は、terraform providers lockのコマンド説明を参照する
ちらっと見ると、異なるプラットフォーム上での操作(Mac or Windows)を想定しているよう。そういったユーザーがいないチームにはあまり関係がないのかも。
供应商的更新
-
- provider requirementに例えばバージョン指定がある場合に、そのバージョンをアップデートする場合には、terraform init -upgradeを実行する必要がある
これによって、ロックファイル内にあるversionに新しいバージョンでのロックを記録する
(进行的状态)
$ terraform init -upgrade
Upgrading modules...
- s3 in modules/aws/s3
- security_group in modules/aws/security_group
- vpc_endpoint in modules/aws/vpc_endpoint
Initializing the backend...
Initializing provider plugins...
- Finding latest version of hashicorp/template...
- Finding hashicorp/aws versions matching "~> 3.20.0"...
- Installing hashicorp/template v2.2.0...
- Installed hashicorp/template v2.2.0 (signed by HashiCorp)
- Installing hashicorp/aws v3.20.0...
- Installed hashicorp/aws v3.20.0 (signed by HashiCorp)
Terraform has made some changes to the provider dependency selections recorded
in the .terraform.lock.hcl file. Review those changes and commit them to your
version control system if they represent changes you intended to make.
锁定文件的差异示例
provider "registry.terraform.io/hashicorp/aws" {
- version = "3.17.0"
- constraints = "~> 3.17.0"
+ version = "3.20.0"
+ constraints = "~> 3.20.0"