.terraform.lock.hcl
のhashes
に設定が自動で追加されるのが正しいかを確認するため、.terraform.lock.hcl
についてまとめました。
.terraform.lock.hclとは
terraform init
コマンド実行時に、現在の作業ディレクトリに生成されるファイル。
terraform.lock.hcl
にはterraform init
時に決定した、プロバイダー(AWSなどの外部システムとその指定バージョン)とモジュール(.tfファイルに記述したコード)の依存関係や互換性が記録されます。
そうすることで、terraform apply
実行時に同じ決定を使用できるようになります。
公式の解説はこちらをご参照ください。Dependency Lock File
更新タイミング
terraform init
コマンドを実行するたびに.terraform.lock.hclは自動的に作成、更新されます。
コードレビューを介して外部依存関係の変更について話し合うことができるように、このファイルをバージョン管理リポジトリに含める必要があります。
ファイルの内容
.terraform.lock.hcl
には下記のような内容が記載される。
# This file is maintained automatically by "terraform init".
# Manual edits may be lost in future updates.
provider "registry.terraform.io/hashicorp/aws" {
version = "3.71.0"
constraints = "~> 3.0"
hashes = [
"h1:1xvaS5D8B8t6J6XmXxX8spo97tAzjhacjedFX1B47Fk=",
"h1:EOJImaEaVThWasdqnJjfYc6/P8N/MRAq1J7avx5ZbV4=",
"zh:0015b491cf9151235e57e35ea6b89381098e61bd923f56dffc86026d58748880",
"zh:4c5682ba1e0fc7e2e602d3f103af1638f868c31fe80cc1a884a97f6dad6e1c11",
]
}
version
:構成のバージョン制約に基づいて(※1)Terraformが選択した正確なバージョン。
※1 下記 example.tf
ファイルで設定したversion
部分に沿い、選択される。
constraints
:versionの選択を行なった際にTerraformが考慮したすべてのバージョン。
Terraformがこの情報を使用することはなく、Terraform利用者が設定値を確認するために用意されている項目です。example.tf
に設定されたversion
部分が反映される。
hashes
:プロバイダーからの配布物のハッシュ値が記録される。Terraformは、インストールする各パッケージが、以前.terraform.lock.hcl
に記録されたチェックサム(ハッシュ値)の少なくとも1つと一致することも確認し、一致するチェックサムがない場合はエラーを返します。terraform: チェックサム検証
zh
: zipのプロバイダー配布パッケージのハッシュ値が記録される。また全プラットフォーム(Mac、Windows、Linux等)のハッシュ値が記録される。
h1
:プロバイダー配布パッケージのコンテンツから計算されたハッシュ値が記録される。ローカルで使用しているプラットフォーム(Mac、Windows、Linux等)のみのハッシュ値が記録される。(ローカル端末でハッシュ値が計算されるため)
terraform {
required_version = "~> 1.0"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 3.0"
}
}
hashesの差分
providerブロックが変更されていない場合でも、以前に記録されなかった新しいチェックサムが追加されることがあります。
既存のスキーム(zhなど)に制限があった場合、または新しいスキーム(h1など)に追加の利点があった場合、Terraformは新しいハッシュスキームを導入することがあります。
上記のようにTerraformは日和見的にhashes
を追加するので、差分が発生した場合は基本的にはその内容を取り込んでしまって良い。