チェックポイント:Terraformの基本
ストーリー
「Terraformの基礎を確認しよう。 次のStep 5では実際にAWSリソースをTerraformで構築するから、 ここで概念をしっかり固めておくことが大事だ」
木村先輩がクイズを用意した。
クイズの説明
- 全6問
- 合格ライン: 80%(5問正解)
問題
Q1. Terraformの terraform plan コマンドの説明として正しいものはどれですか?
- A) インフラの変更を実際に適用する
- B) プロバイダプラグインをダウンロードする
- C) コードとStateの差分を計算し、変更予定内容を表示する
- D) 管理しているリソースを全て削除する
正解: C
terraform plan は、.tf ファイルに記述された「あるべき姿」と、Stateに記録された「現在の状態」を比較して差分を計算し、何が作成・変更・削除されるかをプレビュー表示します。実際のリソースには一切影響しません。Aは apply、Bは init、Dは destroy の説明です。
Q2. TerraformのStateファイルに関する説明として正しいものはどれですか?
- A) Stateファイルは
.tfファイルのバックアップである - B) Stateファイルは管理しているリソースの現在の状態を記録する
- C) Stateファイルは手動で編集してリソースを変更できる
- D) Stateファイルはリソースの設計図である
正解: B
TerraformのStateファイル(terraform.tfstate)は、Terraformが管理しているリソースの現在の状態をJSON形式で記録したものです。TerraformはこのStateと .tf ファイルの差分を計算して変更計画を作成します。Stateファイルの手動編集は推奨されません。
Q3. チーム開発でTerraformのStateを管理する推奨方法はどれですか?
- A) Stateファイルをそのままgitリポジトリにコミットする
- B) S3とDynamoDBを使ったリモートバックエンドに保存する
- C) 各開発者がローカルにStateファイルを持つ
- D) Stateファイルは使用せず、毎回全リソースを再作成する
正解: B
チーム開発では、S3にStateファイルを暗号化して保存し、DynamoDBで排他制御(ロック)を行うリモートバックエンドが推奨されます。StateファイルにはリソースのIDやIPアドレスなどの機密情報が含まれるため、gitリポジトリへのコミットは避けるべきです。
</details>Q4. Terraformの plan 出力で ~ シンボルが表示された場合、その意味はどれですか?
- A) 新しいリソースが作成される
- B) 既存リソースが削除される
- C) 既存リソースがインプレースで変更される(再作成なし)
- D) リソースが削除されてから再作成される
正解: C
~ はインプレース更新を意味し、リソースを削除せずにその場で変更が適用されます。+ は新規作成、- は削除、-/+ は削除して再作成です。インスタンスタイプの変更などはインプレース更新、AMIの変更などはリソースの再作成になります。
Q5. Terraformのモジュールの説明として正しいものはどれですか?
- A) モジュールはPython言語で記述する必要がある
- B) モジュールは1つのプロジェクトでのみ使用でき、再利用できない
- C) モジュールは再利用可能なTerraformコードのパッケージである
- D) モジュールはリソースの削除専用の仕組みである
正解: C
Terraformモジュールは、再利用可能なインフラコードのパッケージです。VPCやEC2クラスターなどの共通パターンをモジュール化し、異なる環境(staging/production)から異なるパラメータで呼び出すことで、コードの重複を避けられます。Terraform Registryで公開されているコミュニティモジュールも利用できます。
</details>Q6. Terraformの変数(variable)の値を指定する方法のうち、最も優先度が高いものはどれですか?
- A)
variables.tfのdefault値 - B)
terraform.tfvarsファイル - C) 環境変数
TF_VAR_xxx - D) コマンドライン引数
-var="xxx=yyy"
正解: D
Terraform変数の優先順位は、高い順に (1) コマンドライン引数 -var, (2) terraform.tfvars / *.auto.tfvars, (3) 環境変数 TF_VAR_*, (4) default 値です。コマンドライン引数が最も優先度が高く、他の設定を上書きします。
結果
5問以上正解の場合
合格です。おめでとうございます。
Step 4「Terraformの基本を習得しよう」を完了しました。 次は Step 5「インフラをコード化しよう」に進みましょう。
4問以下の場合
もう少し復習しましょう。
| 問題 | 復習セクション |
|---|---|
| Q1 | step4_5 plan/apply/destroyワークフロー |
| Q2 | step4_3 プロバイダとState管理 |
| Q3 | step4_3 プロバイダとState管理 |
| Q4 | step4_5 plan/apply/destroyワークフロー |
| Q5 | step4_4 変数とモジュール |
| Q6 | step4_4 変数とモジュール |
Step 4 完了
お疲れさまでした。
学んだこと
- IaCの概念とTerraformの位置づけ
- HCL構文とリソース定義
- プロバイダとState管理
- 変数と モジュールによる再利用
- plan/apply/destroyワークフロー
次のステップ
Step 5: インフラをコード化しよう(5時間)
Terraformの基礎が固まった今、実際にAWSリソースをコードで構築します。
推定所要時間: 20分