寝室で Terraform Associate (003) を受験した

# はじめに

2024年4月30日に、Terraform の認定資格である [HashiCorp Certified: Terraform Associate (003)](https://www.hashicorp.com/certification/terraform-associate) を受験し、無事に合格しました。

https://www.credly.com/badges/90fce028-5dd6-47cf-bb98-e5e72b820628/public_url

まだ日本では受験者が多くないようなので、体験談をお届けします。

# 筆者のスペック

Terraform は 7 年くらい使っています。最近は [OCI](https://www.oracle.com/cloud/) に組み込まれた [Resource Manager](https://docs.oracle.com/ja-jp/iaas/Content/ResourceManager/Concepts/resourcemanager.htm) を経由して利用することが多いため、Terraform を「ちゃんと」利用するのはご無沙汰です。

# 試験について

## 試験の概要

| 項目            | 内容                                           |
|---------------|--------------------------------------------|
| 試験バージョン        | 003                                        |
| 試験形式            | オンライン試験（監督付き）                                 |
| 所要時間          | 60 分                                         |
| 試験形態        | 多択問題                                       |
| 言語            | 英語のみ                                           |
| 価格            | 77.55 ドル（70.50 ドル＋消費税）        |
| 資格の有効期間          | 2年                                           |

ポイントは以下の通りです。

* **言語**：日本語には対応していません。TOEIC が 600 点くらいあれば問題なく受験できると思います
* **料金**：ベンダー試験としてはわりと良心的な価格です

## 試験範囲

[公式ページ](https://www.hashicorp.com/certification/terraform-associate) の内容を、ChatGPT の助けを借りて翻訳しました（誤訳はご容赦ください）。長いので折りたたみました。

<details><summary>試験範囲を確認する</summary>

| 1 | Infrastructure as Code（IaC）の概念を理解する |
|----|----------------------------------------------------|
| 1a | IaCが何であるか説明する                                   |
| 1b | IaCのパターンの利点を説明する                                |

| 2 | Terraformの目的を理解する（他のIaCと比較して）  |
|----|-----------------------------------------|
| 2a | マルチクラウドとプロバイダ非依存の利点を説明する        |
| 2b | state の利点を説明する                          |

| 3 | Terraformの基本を理解する               |
|----|------------------------------------|
| 3a | Terraformプロバイダーのインストールとバージョン管理 |
| 3b | プラグインベースのアーキテクチャを説明する        |
| 3c | 複数のプロバイダーを使用してTerraform設定ファイルを記述する  |
| 3d | Terraformがプロバイダーを見つけて取得する方法を説明する |

| 4 | Terraformをコアワークフロー以外で使用する        |
|----|---------------------------------------------|
| 4a | 既存のインフラストラクチャをTerraform stateにインポートする際に`terraform import`を使用するタイミングを説明する |
| 4b | `terraform state`を使用してTerraform stateを閲覧する  |
| 4c | 詳細なログを有効にするタイミングとその結果・価値を説明する    |

| 5 | Terraformモジュールとの対話                  |
|----|---------------------------------------------|
| 5a | パブリックなTerraformモジュールレジストリを含む、異なるモジュールソースオプションの比較と使用 |
| 5b | モジュールのinputとoutputとのやりとり                    |
| 5c | モジュール／子モジュール内の変数のスコープを説明する      |
| 5d | モジュールバージョンを設定する                    |


| 6 | Terraformのコアワークフローを使用する                     |
|----|--------------------------------------------------|
| 6a | Terraformワークフローを説明する（書く -> 計画する -> 作成する）  |
| 6b | Terraform作業ディレクトリを初期化する（`terraform init`）    |
| 6c | Terraform設定ファイルを検証する（`terraform validate`）           |
| 6d | Terraformの実行計画を生成し、レビューする（`terraform plan`）    |
| 6e | Terraformを使用してインフラストラクチャに変更を実行する（`terraform apply`） |
| 6f | Terraformで管理されるインフラストラクチャを破棄する（`terraform destroy`） |
| 6g | 設定ファイルにフォーマットとスタイルの調整を適用する（`terraform fmt`）    |

| 7 | stateの実装と維持                                      |
|----|-----------------------------------------------------|
| 7a | デフォルトの`local`バックエンドについて説明する                    |
| 7b | state lockについて説明する                             |
| 7c | バックエンドとクラウド統合認証方法を扱う                          |
| 7d | remote state backend のオプションを区別する                    |
| 7e | リソースのドリフトとTerraform stateを管理する                     |
| 7f | 設定ファイル内の`backend`ブロックとクラウド統合について説明する              |
| 7g | stateファイル内の秘密管理について理解する                         |

| 8 | 設定ファイルの読み取り、生成、および修正                               |
|----|----------------------------------------------------|
| 8a | 変数とoutputの使用を示す                                        |
| 8b | 安全なシークレット注入のベストプラクティスについて説明する                  |
| 8c | コレクションと型の使用を理解する                                |
| 8d | `resource`と`data`設定を作成し、区別する                             |
| 8e | 作成済みリソースの参照とリソースパラメータを使用してリソースを連携させる            |
| 8f | HCLおよびTerraformの関数を使用して設定ファイルを記述する                          |
| 8g | 組み込みの依存関係管理（実行順序に基づく）について説明する                  |

| 9 | HCP (HashiCorp Cloud Platform) Terraformの機能を理解する                            |
|----|-------------------------------------------------------|
| 9a | HCP Terraformがインフラストラクチャの管理にどのように役立つか説明する  |
| 9b | HCP Terraformがコラボレーションとガバナンスをどのように可能にするか説明する |

</details>

## 試験内容

具体的な試験内容は、世に公開するべからずと何度も念押しされたため（詳細は後述）、ここでは割愛します。試験範囲通りの内容であったという点だけ述べておきます。

# 試験を受けるまで

## 申し込み

[こちらのページ](https://www.hashicorp.com/certification/terraform-associate)から試験の申し込みを行います。あらかじめ、シングルサインオンのための GitHub アカウントが必要です（メールアドレス等でのアカウント作成はできません）

アカウントの氏名に注意してください。アカウントの氏名と、受験時に使用する身分証明書の氏名は、**完全一致**していなければなりません。つまり、アカウントが `Taro Yamada` で身分証明書が `山田 太郎` だと不一致になってしまうということです。運転免許証やマイナンバーカードには日本語名しか書かれていない（場合が多い）ため、パスポートがない場合にはアカウントの方を見直しましょう。

支払いは、クレジットカードまたは PayPal で行います。私はクレジットカードで支払いをしたのですが、あまり海外から買い物をする機会がないせいか、カード会社から問い合わせが来てしまいました。

## 受験準備

* **チェックイン**：試験開始30分前に、あらかじめ受信していたメールに埋め込まれたリンクから、チェックインします
* **専用ブラウザのインストール**：`PSI Bridge Secure Browser` という専用のアプリをインストールします。以降はこのブラウザでの操作を行います

試験官とのやりとりは文字チャット（英語）で行います。以下のような確認を受けました。

* **身分確認**：PCのカメラで自分の写真と身分証明書の写真を撮ってアップロードします
* **部屋の確認**：試験官から、パソコンのカメラで、部屋中（１周、天井、床、机上など）を映すように指示されますので、その通りにします
* **所持品の確認**：スマホを別の部屋に置くように指示されますので、その通りにします
* **体の確認**：腕、耳をそれぞれ映すように指示されます
* **飲み物の指示**：透明な容器に入れた水だけなら持ち込んで良いとのことでした。私は不要だと回答しました

仕事部屋は物が散乱していて、とても映せるような部屋ではなかったので、寝室を片付けて場所を作りました。

## 学習コンテンツ

私はほぼ Udemy で完結させました。

### 公式コンテンツ

* **[Study guide](https://developer.hashicorp.com/terraform/tutorials/certification-003/associate-study-003)**：基礎学習にはこちら
* **[Exam review](https://developer.hashicorp.com/terraform/tutorials/certification-003/associate-review-003)**：試験科目の復讐はこちら

### Udemy

* **[HashiCorp Certified: Terraform Associate - Hands-On Labs](https://www.udemy.com/course/terraform-hands-on-labs)**：ビデオ講義
* **[HashiCorp Certified: Terraform Associate Practice Exam 2024](https://www.udemy.com/course/terraform-associate-practice-exam/)**：問題集

## 試験

`PSI Bridge Secure Browser` を使用して行います。

操作方法は明快で、戸惑うようなことはありませんでした。

すべて回答したら、簡単なアンケートに答えて、提出します。結果はすぐに表示され、合否や点数などがわかります。チャットにて「点数や詳細な結果を世に公開してはならない」と試験官から念押しされました。

それから数十秒後に、自動的に PSI Bridge Secure Browser が閉じてしまいました。試験官によって閉じられたものと思われますが、結果をしっかり読むことができませんでした。

## 結果連絡

試験終了から 18 時間ほど経って、改めて結果がメールで通知されました。

# 感想

Terraform の理解を深める、よい試験だと思いました。

長年使っていながら知らない機能やコマンドも多く、体系的な理解を深める一助になったと思います。ぜひ皆さんも受験してみてください。

# 参考にした記事

* https://zenn.dev/cappyzawa/articles/95aa407d79dd5d
* https://zenn.dev/valmet083/articles/a335281205d865
* https://future-architect.github.io/articles/20200629/
* https://tech.devopslead.jp/knowledge/passed-terraform-associate-002-in-entrance/
* https://kakakakakku.hatenablog.com/entry/2023/07/10/085803
* https://ccie-go.com/terraform-associate-fastest-pass/