HashiCorp Certified: Terraform Associate 無料問題 4 / 10 ・ 分野3: Core Terraform workflow
ある作業ディレクトリには子モジュールがすでにインストールされている。そのうち1つのモジュールの source に新しいコードが出たので、チームは terraform init をもう一度実行したが、インストール済みの写しは変わらなかった。init のリファレンスは、どうするよう書いているか。
- validate で各モジュールの写しを新しくする。init はインストール済みのものに触れないため
- terraform init -reconfigure を実行する。モジュールを一からインストールし直す
- terraform init -upgrade を実行する。モジュールを、手に入る最新の source に更新する
- terraform init -get=false を実行する。モジュールの source を強制的にダウンロードする
正解と解説を見る
正解: C
正解の理由
「Child Module Installation」の節は、init の間に構成の中の module ブロックが探され、参照されているモジュールのソースコードが source 引数にある場所から取ってこられると書いている。モジュールがインストール済みの状態で init をもう一度実行すると、前回の init の後に構成へ足されたモジュールのソースはインストールされるが、インストール済みのモジュールは変わらない。これを変えるには -upgrade を使う。-upgrade はすべてのモジュールを、手に入る最新のソースコードに更新する。General Options の一覧も -upgrade を、モジュールとプラグインをそれぞれのインストールの手順の中でアップグレードするオプションとして同じように説明している。つまりオプションを付けない再実行は、新しい module ブロックを取り込み、既存のものはそのままにする。
違う選択肢
「terraform init -get=false を実行する。モジュールの source を強制的にダウンロードする」… -get=false はその逆で、子モジュールのインストールを省く。リファレンスは、作業ディレクトリがすでに子モジュールとともに初期化されているときにだけ使うよう勧めている。
「terraform init -reconfigure を実行する。モジュールを一からインストールし直す」… -reconfigure は init のバックエンドのオプションで、子モジュールのインストールの手順とは関係が無い。
「validate で各モジュールの写しを新しくする。init はインストール済みのものに触れないため」… source 引数にある場所からモジュールのソースコードを取ってくるのは、init の Child Module Installation の手順の仕事で、新しい module ブロックもそこでインストールされる。validate はその役を持たない。
init の再実行とモジュール
新しい module ブロック: オプションの無い init でインストールされる。インストール済みのモジュール: -upgrade を付けたときに更新される。
HashiCorp Certified: Terraform Associateの演習アプリ(無料10問・全問は購入で)へ