Red Hat 認定スペシャリスト試験 Ansible Automation (EX407) 受験体験談


## はじめに
2019年11月に Red Hat 認定スペシャリスト試験 -Ansible Automation- (EX407) を受験し、合格しました。このエントリーはその勉強方法を晒す受験体験談です。今後、同試験を受けられる方のために、『実際、こんなこと勉強したら合格しましたよ』というのを残しておきたいと思います。

過去の受験体験談はこちらです。AWS Solution Architect Professional と RHCSA 認定試験の 受験体験談を書いていなかったのを今思い出しました。

* [AWS認定 SysOps Administrator Associate 受験体験談](https://qiita.com/kentarok/items/f25a82a14efc6a1bd06c)
* [AWS認定 Solution Architect Associate 受験体験談](https://qiita.com/kentarok/items/491b312ff1fa1fbe77e9)

先に試験結果を出しておくと以下の通りです。恥ずかしながらギリギリでの合格でした。

```
Exam domain number:     17
Passing score:          210
Your score:             222

OBJECTIVE: SCORE
Understand core components of Ansible: 67%
Install and configure an Ansible control node: 100%
Create simple shell scripts that run ad hoc Ansible commands: 100%
Use Ansible modules for system administration tasks: 79%
Create Ansible plays and playbooks: 73%
Create and use templates to create customized configuration files: 0%
Work with Ansible variables and facts: 38%
Create and work with roles: 93%
Download roles from an Ansible Galaxy and use them: 100%
Use Ansible Vault in playbooks to protect sensitive data: 43%
```

## 受験時の私の知識レベル
SIerに新卒で入社してから十数年、７割オンプレ3割クラウドのインフラエンジニアです。
構築もやりますが、運用周りを担当することが多かったです。業務でのWindows経験はなく、ほぼ全て UNIX/Linux OS周りをみていました。
ここ数年は、社内における Cloudサービスの技術支援業務に従事しています。また自動化関連だと、直近3〜4年 Ansibleと同じ自動化ツールの Chefを扱っていました。直近で数ヶ月ぐらいAnsibleを触るお仕事もしていました。

2019年9月に Red Hat 認定試験の初歩である RHCSA認定試験（EX200）を受験して、Red Hat認定システムアドミニストレータを獲得しています。


## 試験の内容

公式ガイドはこちらを御覧ください。

EX407 Red Hat 認定スペシャリスト試験 - Ansible Automation -
https://www.redhat.com/ja/services/training/ex407-red-hat-certificate-expertise-ansible-automation

試験時間は 4時間です。 私が今まで受けたことのある試験の中で、最長でした。
問題数は公式ガイドで公表されていないので書けませんが、（試験を難しいと感じたこともあり）４時間があっという間に感じるほどの問題量でした。

2020/01/15時点の試験範囲を抜粋します。

> 以下の能力が求められます。
>
> - Ansible のコアコンポーネントの理解
>   - インベントリー
>   - モジュール
>   - 変数
>   - ファクト
>   - Play
>   - Playbook
>   - 設定ファイル
> - Ansible 制御ノードのインストールと設定
>   - 必要なパッケージのインストール
>   - 静的ホスト・インベントリー・ファイルの作成
>   - 設定ファイルの作成
> - Ansible 管理対象ノードの設定
>   - SSH キーを作成して管理対象ノードに配布
>   - 管理対象ノードで特権エスカレーションを設定
>   - Ansible のアドホックコマンドを使用して作業用設定を検証
> - Ansible のアドホックコマンドを実行するシンプルなシェルスクリプトの作成
> - 静的インベントリと動的インベントリの両方を使用した、ホストのグループの定義
> - 既存の動的インベントリースクリプトの利用
> - Ansible の Play と Playbook の作成
>   - 一般的に使用される Ansible モジュールの処理方法についての知識
>   - 変数を使用したコマンド実行結果の取得
>   - 条件文を使用した Play の実行制御
>   - エラー処理の設定
>   - システムを特定の状態に設定するための Playbook の作成
> - 以下に対応する、Ansible モジュールを使用したシステム管理作業
>   - ソフトウェアパッケージとリポジトリ
>   - サービス
>   - ファイアウォールルール
>   - ファイルシステム
>   - ストレージデバイス
>   - ファイルコンテンツ
>   - アーカイブ
>   - スケジュールされたタスク
>   - セキュリティ
>   - ユーザーとグループ
> - テンプレートの作成および使用による、カスタマイズ済み設定ファイルの作成
> - Ansible の変数とファクトの処理
> - ロールの作成と処理
> - Ansible Galaxy からのロールのダウンロードと使用
> - 並列処理の管理
> - Playbook で Ansible Vault を使用した機密データの保護
> - 提供されたドキュメントを使用した、Ansible モジュールとコマンドに関する特定の情報の検索


## 試験を受けた感想

非常に難しかったです。

前提コースのDO407の演習問題と比べると、2段階ぐらい難しかった印象があります。DO407の演習問題解けるだけでは厳しいです。前提コースを知識として理解した上で、前提コースの演習問題をスラスラ解くだけでなく、実際のユースケースに応じて現場で悩みながらPlaybookを書いてきた方のほうが有利だなぁ、と感じました。（当たり前ですが）

ちなみに、Ansible モジュールの種類に精通している必要はなく、試験範囲を見て使いそうなモジュールさえ覚えておけば良さそうです。未知のモジュールは、ansible-doc コマンドを使って、その場で使いたいモジュールを探し出して、使い方を理解できればよいかな、と。

また、試験範囲と明記されている項目については、全ての項目をきっちり抑えておくことをおすすめします（当たり前のこと言っていますが…）。曖昧な箇所があるとそこから崩れて、試行錯誤でPlaybookを書くことができますが、それやってると時間が足りなくなりますので・・・。


その他詳細は 受験前に参考にさせていただいた [こちらの記述](https://qiita.com/ochiba/items/79057aa3989c1812042d#%E8%A9%A6%E9%A8%93%E3%81%AE%E6%84%9F%E6%83%B3)の通りでした。（ `ansible-inventory` は使えるようになってた気がします。）


## オススメの学習方法

私がオススメだと思う学習方法を上げていきます。

### DO407

公式の前提コースである [DO407 Automation with Ansibleコース](https://www.redhat.com/ja/services/training/do407-automation-ansible-i) がおすすめです。ただし有料で結構なお値段がします。。。

前提コースだけあって、EX407の試験範囲を網羅してくれています。必要な知識を一通り理解することができるでしょう。ただし、前述の通り、前提コースの演習問題の難易度が足りないので、「こんなケースだったらどう書けばいいだろうか」など自分で設問を考えてみることも有効です。

### Ansible Documentation

試験範囲とにらめっこしながら、Ansible Documentationの該当範囲を熟読し、サンプルのPlayをひたすら写経するのもとっても有効だと思います。

Ansible Documentation
https://docs.ansible.com/ansible/latest/index.html

### linuxacademy.com

linuxacademy.com にも EX407 の準備用コースがあります。DO407の代わりによいと思います。（ただし英語）
月間と年間のSubscriptionが用意されています。私は ７日間の試用版での利用にとどめました。

Red Hat Certified Specialist in Ansible Automation (EX407) Preparation Course
https://linuxacademy.com/course/linux-academy-red-hat-certified-specialist-in-ansible-automation/


## その他お伝えしたいこと

### vim の熟練度も非常に重要

普段お使いのような VSCodeのようなわかりやすいエディターは試験を受ける環境では使えません。ひたすら vim を使うことになります。Playbookを書く上でvimの練度が高いと、Playbookを書くスピードも上がります。逆に、vimの練度が低いと、ansibleの理解度が高くても、速くplaybookが書けません。

もしvimの練度が低いとお感じあれば、以下のようなサイトを参照して、vimのショートカットは手癖にしてしまったほうがよいでしょう。

vimの基本操作
https://qiita.com/tasaki-i3/items/49ebad1dca20c669ad25

playbook は yaml 形式なので、スペースによるインデントの数が重要です。yamlとしてミスなく、効率的に playbook を書くために以下のような設定をおすすめします。要はカレントディレクトリに vimのデフォルト設定が書かれた `.vimrm` ファイルをおけばOKです。

```configuration
set ai et sts=2 sw=2 number cursorline
```

## 最後に

これでやっと「Ansibleできます」と言えるようになりました。
ここからスタートラインだと思って、いろいろ実践していきたいと思います。