Terraform Associate (004) に合格しました — 知っておきたかったこと
合格翌日の正直なメモ:どのような問題が出題されたか、時間の使い方、詰め込み勉強したのに意味がなかったこと、軽視してしまったこと。
昨日Terraform Associate 004を受験し、一発で合格しました。これは「何を勉強すべきか」という投稿ではありません — そのような投稿はたくさんあり、私たち自身のものも含めてです。これは、すべてがまだ鮮明なうちに、前夜に読んでおけばよかったと思う投稿です。
背景として:私は約3年間、AWS上でTerraformを書いてきました。主にアプリケーションインフラストラクチャ — VPC、ECS、RDS、ALBなど、一般的なものです — HCP Terraformに対して使うこともありますが、S3 + DynamoDBに対して使うことの方が多いです。ずいぶん前に003を中途半端な気持ちで受験し、004は簡単な復習で済むだろうと考えていました。ほとんどその通りでしたが、いくつか補足があります。
不要だった詰め込み勉強
試験の2日前、私はいくつかのトピックについて深く掘り下げましたが、それらは試験ではほとんど出題されませんでした。
- Sentinel と OPA の構文。 Sentinel のルールを見ただけで認識できる必要があると自分に言い聞かせていました。ポリシー・アズ・コードに触れる質問は正確に1問だけあり、それは概念的なものでした — 「組織のポリシーを強制する機能はどれか?」 — 「Sentinel」という言葉が存在することを知っていれば答えられました。
- プロバイダープラグインのプロトコルバージョン。 関連性ゼロでした。
- すべての
terraform stateサブコマンドを暗記すること。 試験では、state list、state mv、state rmについてシナリオ形式で問われます。それぞれのコマンドが平易な英語で何をするのか理解していれば、フラグを細かく覚える必要はありません。 - HCP Terraform の料金体系。 試験には出ませんでした。試験ではHCPを概念的に扱います。
もし準備期間をやり直せるなら、for_each vs. count の練習をもっと増やすでしょう。
驚いたこと
予想外だったことがいくつかあります。
新しい004の項目は正確に問われます。 私は「moved ブロックは何をするか?」といったふわふわした質問を予想していました。しかし実際には、「リソースの名前を変更し、中断なくその状態を維持したい場合、最小限の有効な変更はどれか?」といった具体的なシナリオが出題され、解答の選択肢には state mv の呼び出しと moved ブロックの両方が含まれていました。両方が存在することを知っているだけでなく、ワークフローに合ったイディオムを選ぶ必要がありました。
import ブロック vs. terraform import に関する複数の質問。 私はこれらを怠惰にも同等だと考えていました。試験は、それらが違うことを思い出させてくれました — ブロックは宣言的で plan と統合されます。CLI コマンドは命令的で、すぐに状態に副作用をもたらします。どの方法がレビュー可能な CI/CD ワークフローに適しているか、を問う質問が2問ありました。
HCL の質問は、練習問題が示唆するよりも密接です。 多くの練習問題では、すっきりした4行のコードスニペットが提示されます。実際の試験では、少なくとも一度、resource の中に dynamic がネストされ、その for_each が外側のカウントを駆動している15行のブロックが与えられ、作成されるリソースの数を予測するように求められました。私は2度読み直す必要がありました。1問あたり60秒という時間制限の中でHCLを注意深く読むという認知負荷を過小評価しないでください。
terraform test に関する2つの質問。 練習問題ではほとんど触れられていなかったため、このセクションはほとんどスキップするところでした。質問は概念的なものでした — .tftest.hcl が存在すること、run ブロックにはアサーションが含まれること、ユニットテストのためにプロバイダーをモックできること。ドキュメントページをざっと読めば十分です。
時間管理で危うく失敗するところだった
60分で57問は、1問あたり1分強です。私はコードを注意深く読むため、技術的な内容の試験では時間がかかります。52分で最初の回答を終え、5問を再検討のためにフラグを立てました。フラグを立てた質問のうち2つは、表現を深読みしすぎていたので、改めて読み直して両方の回答を変更しました — 1つは正解でしたが、もう1つは 間違った 回答に変更してしまったと思います(後から知る術はありません)。
うまくいったこと:質問の本文を2回以上読み直している自分に気づいたら、最も可能性の高い答えを選び、フラグを立てて次に進みました。1つの質問に4分も費やさないでください。1分経っても分からなければ、さらに3分経ってもおそらく分からないでしょう。
時間のかかる質問
時間を食った特定のカテゴリは、「この状態ファイルの出力が与えられた場合、terraform plan は何を表示するか?」というものでした。これらは、状態の差分を頭の中でたどるため時間がかかります。2つの質問では、シミュレートするのを諦め、選択肢を見て、最も壊れている可能性のあるものを選びました(1つはタグの欠落、もう1つは属性の変更)。どちらも正解でした。時間が短いときは、深いシミュレーションよりもパターン認識です。
準備をやり直すとしたら、実際に推奨すること
今知っていることを踏まえると、再調整された学習配分は以下の通りです。
- 40% 練習問題。 実際に時間を計って解き、間違った解答と真剣に向き合うこと。
- 25% HCL の例をゆっくり読むこと。 いくつか書くことも重要ですが、試験日に必要なのは書く能力ではなく、読む能力です。
- 15% ステートのセマンティクス。 ステートファイルに何が含まれているか、なぜロックが重要か、
moved/removed/importブロックがそれぞれ何を解決するか。 - 10% 新しい004の機能 を個別に — 変数検証、preconditions、ephemeral values、write-only arguments、HCPプロジェクト、
terraform test。 - 10% その他すべて — IaCの概念、Terraformの目的、HCPの概要。
意図的に偏った配分です。「その他すべて」の項目は、Terraformを数ヶ月以上使っていれば、ほとんどすでに知っていることでしょう。
意外に重要だったこと
terraform fmtが存在し、何をするかを知っていること。 2回出題されました。誤った選択肢の1つは、fmtがステートを変更するというものでした。- プロバイダーのバージョン制約の構文。
~> 1.2と~> 1.2.0の違い(後者はパッチレベルで悲観的であり、より厳格)。これは正解しましたが、試験では問われないと自分に言い聞かせていました。 terraform init -upgradeとterraform init -reconfigureの違い。 バックエンドブロックを変更した後、どちらを使用すべきか問われました。答えは-reconfigureです。-jsonオプション付きのterraform output。 スクリプティングシナリオで、どのコマンドが機械可読な出力値を生成するか問われました。使ったことがあれば取るに足らないことですが、使ったことがないと見落としがちです。
試験後
PSIは最後に合否画面を表示します(私は緑色のチェックマークが表示され、安心しました)。ドメインごとの詳細なスコア内訳は数日後にメールで届きます。バッジは承認するとCredlyアカウントに表示されます。HashiCorpの認定は2年間有効なので、カレンダーにリマインダーを設定しておきましょう。
ベンダー試験で過小評価していたのは、60分間の集中がいかに消耗するかということでした。試験の後に会議を入れないでください。私は家に帰って1時間壁をじっと見ていました。
受験日が近い場合は、CertLabPro 004バンクから冷たい問題ブロックを試してみてください。練習で高得点を出すことを目標にするのではなく、まだ修正する時間があるうちに自分の苦手なカテゴリを見つけることを目標にしてください。