HashiCorp Certified: Terraform Associate 無料問題 2 / 10 ・ 分野2: Terraform fundamentals
構成で AWS プロバイダーに version = ">= 4.5.0" を書いており、コミット済みのロックファイルには 4.5.0 が記録されている。その後、AWS プロバイダーの新しいリリースが出た。チームメイトがリポジトリを clone して terraform init を実行すると、どの版が入るか。
- 最も新しいリリース。あわせてロックファイルも、その新しい版の記録に書き換わる
- init がエラーで止まる。ロックファイルと制約の食い違いを先に解く必要があるため
- 4.5.0 以上で最も新しいリリース。制約がその版を許しているため
- 4.5.0。ロックファイルで選択済みの版が、もう一度選ばれるため
正解と解説を見る
正解: D
正解の理由
ロックファイルのページの「Dependency Installation Behavior」の節は、terraform init は構成のバージョン制約とロックファイルに記録された選択の両方を見ると説明している。選択が記録されていないプロバイダーなら、Terraform は制約に合う最も新しい版を選んで記録する。ロックファイルに選択がすでに記録されているプロバイダーなら、より新しい版が出ていても、Terraform はいつもその版をインストール用に選び直す。この振る舞いを変えるには、terraform init に別のオプションを付ける必要がある。チュートリアル「Lock and upgrade provider versions」の表も同じで、>= 4.5.0 のとき、ロックファイルが無い init は最新のリリースを、ロックファイルがある init は 4.5.0 を入れる。
違う選択肢
「4.5.0 以上で最も新しいリリース。制約がその版を許しているため」… 制約に合う最も新しいリリースを選ぶのは、まだ選択が記録されていないプロバイダーの場合である。ロックファイルのページは、その場合に Terraform は制約に合う最も新しい版を選んで記録すると書いている。この問題では選択がすでに記録されている。
「最も新しいリリース。あわせてロックファイルも、その新しい版の記録に書き換わる」… ロックファイルに選択が記録されているプロバイダーについて、Terraform は、より新しい版が出ていても記録された版を選び直す。記録を変えるには別のオプションが要り、オプションを付けない init は、記録された版を使い続ける。
「init がエラーで止まる。ロックファイルと制約の食い違いを先に解く必要があるため」… 解くべき食い違いは無い。4.5.0 は >= 4.5.0 を満たしている。ロックファイルのチュートリアルは表でちょうどこの場合を示しており、ロックファイルがあれば 4.5.0 が入り、ロックファイルが無い init なら最新のリリースが入る。
制約と選択の違い
制約は受け入れてよい版の範囲を言い、ロックファイルは実際に選んだ版を言う。オプションを付けない init では、記録された選択のほうが、制約に合う新しいリリースより優先される。
HashiCorp Certified: Terraform Associateの演習アプリ(無料10問・全問は購入で)へ