[SAA-C03]AWS認定試験に合格するための頭の動かし方

AWSの認定資格のひとつ、「ソリューションアーキテクト アソシエイト(略称;SAA)」をテストセンターで受験してきました。
結果は合格(**853**点/1000点)。

この資格は有効期限があり、3年後に失効するのですが、また受け直すときにどんな勉強をしていたのかを思い出すための備忘録的な意味も兼ねてここに書いておこうと思います。

ただ使った教材を列挙するだけだと再現性がないので、少し掘り下げて、受かるべくして受かるために具体的に工夫した点も含めて詳しく記載することにしました。

## 小生について
* 社会人3年目
* AWSの実務経験は少しだけ
* 他に持ってるIT資格：IPAの[基本情報](https://www.ipa.go.jp/shiken/kubun/fe.html)、[応用情報](https://www.ipa.go.jp/shiken/kubun/ap.html)

# やったこと
## 1.udemyの動画でインプット
[【SAA-C03版】これだけでOK！ AWS 認定ソリューションアーキテクト – アソシエイト試験突破講座](https://www.udemy.com/course/aws-associate/)
まずAWSの概要をザラッと把握するため、udemyでインプット＋ハンズオンを始めました。
模擬試験が3つ付いていますが、本番の問題よりも難しいので、後述するCloudTechなどの本番と同レベルの問題集を一通り終えてからやる方が丁度良いかと思います。

「本番の問題よりも難しいならやらなくてもいいのでは？」という疑問を抱く方も居るかもしれませんが、良問なので難易度にかかわらず解くべきであると考えます。
というのも、問題自体を覚えることが目的ではなく、その裏にある本質・抽象論を理解することが初見の問題を解く際の対応力を身につけることにつながるからです。

## 2.教科書を読む

[AWSの基本・仕組み・重要用語が全部わかる教科書 (見るだけ図解)](https://www.amazon.co.jp/AWS%E3%81%AE%E5%9F%BA%E6%9C%AC%E3%83%BB%E4%BB%95%E7%B5%84%E3%81%BF%E3%83%BB%E9%87%8D%E8%A6%81%E7%94%A8%E8%AA%9E%E3%81%8C%E5%85%A8%E9%83%A8%E3%82%8F%E3%81%8B%E3%82%8B%E6%95%99%E7%A7%91%E6%9B%B8-%E8%A6%8B%E3%82%8B%E3%81%A0%E3%81%91%E5%9B%B3%E8%A7%A3-%E5%B7%9D%E7%95%91%E5%85%89%E5%B9%B3/dp/4815607850/)
AWS-SAA対策に特化した本ではないですが、網羅的にAWSの基本サービスを把握するのに便利です。
最初は読んでいて不明点も多かったのですが、問題演習を重ねて理解度が上がった試験直前期に再度読み返すと、理解できる部分が増えていました。
紙媒体で使用したのはこの本だけです。

[AWS認定資格 ソリューションアーキテクトアソシエイトの教科書: 合格へ導く虎の巻](https://www.amazon.co.jp/AWS%E8%AA%8D%E5%AE%9A%E8%B3%87%E6%A0%BC-%E3%82%BD%E3%83%AA%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%88%E3%82%A2%E3%82%BD%E3%82%B7%E3%82%A8%E3%82%A4%E3%83%88%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8-%E5%90%88%E6%A0%BC%E3%81%B8%E5%B0%8E%E3%81%8F%E8%99%8E%E3%81%AE%E5%B7%BB-CloudTech%E6%9B%B8%E7%B1%8D%E4%BD%9C%E6%88%90%E5%A7%94%E5%93%A1%E4%BC%9A-ebook/dp/B0BCPNZ9GJ)
Amazonで書籍を探していたときに発見したKindleの電子書籍で、無料で読むことができます。

## 3.CloudTechで問題演習＆動画学習
CloudTechは有料会員登録すると問題演習と解説動画の視聴ができる学習コンテンツです。
他の問題集と比べて解説が親切だったので、これをメインの教材にしていました。
udemyで既にインプットは済んでいたので、まず問題を解き始め、分からなかった問題はその都度対応する解説動画を視聴するアウトプット先行型で勉強を進めていました。

# 問題演習にあたって
## 間違えた問題への向き合い方
以下の3パターンがあります。

①. 根拠を持って正解の選択肢を選べた問題
②. 正解の選択肢は選べるけど、なぜ正解なのかは説明できない問題
③. 誤った選択肢を選んでしまった問題

問題集を繰り返し解いて、②や③をできるだけ多く①にしていきましょう。
目安としては、8割以上が①になれば安心して試験を受けられると思います。
問題の解説を読むときに、当然ですが「③>②>①」の順にたっぷり時間を掛けて、ちゃんと理解できたか確認します。
特に③の問題は解説を読むだけで終わらせるのではなく、ときには追加で調べることも必要です。逆に①の問題はサラッと解説を読んで次に進みます。
自分の理解度に応じて問題に優先順位を付けてトリアージするとメリハリが付いて良いと思います。

復習するタイミングですが、すぐに行うよりも「そろそろ忘れたかな」と思った頃にした方が長期記憶に移行しやすいです。
個人差もあるので一概には言えないのですが、翌日やるよりも1週間くらいは空けて解いてみると自分の場合は丁度良かったです。

## 関連付け＆再言語化
AWSには膨大な数のサービスがあるので1つ1つ用語を覚えていくときに「これはどのタイプのサービスなのか」を意識します。
ネットワーク系、コンピューティング系、ストレージ系、データベース系、セキュリティ系、etc...
HUNTER×HUNTERの念能力のように分類していきます。
すると、それぞれがどのサービスと関連があるサービスなのかがわかるようになっていきます。

以下の記事が参考になります。

https://qiita.com/KurokawaKouhei/items/3836802fc3a0286f668f

ストレージという大きな幹があって、そこにS3、EBS、EFS、FSxといった枝が付いている。EBSはコンピューティング系のEC2と密接に関連している…と、頭の中で樹形図を作るイメージです。

グルーピングするとどんなメリットがあるかというと、**各サービスの「違い」を意識する**ことで設問の紛らわしい選択肢を判断する際に役立ちます。
AWS試験は多岐選択式なので、不正解の選択肢は似たサービスの名前を入れることで作られています。
なので、正解の選択肢を選ぶためには似たサービスがどのように使い分けられるのかを正確に知っておくことが非常に重要になります。
* CloudFrontとGlobal Acceleratorの違いは？
* ALBとNLBの違いは？
* S3、EBS、EFS、FSxはどう選ぶの？

これらを自分の言葉に落とし込んで説明できるようになること(＝再言語化)で、根拠を持って選択肢を選べるようになります。
でもそのために問題の解説を読んだりGoogleで調べるだけでは、いまいち腑に落ちないこともよくあります。

そんなとき**ChatGPT**が便利です。

ChatGPTはマイナーな固有名詞などにはまだ弱く、平気で嘘をついたりするのですが、ことAWSのようなグローバルに広く利用されている技術の質問には滅法強く、サービスの概要程度のことであれば
>「Global Acceleratorはロードバランシングとグローバルネットワークルーティングに重点を置き、CloudFrontはコンテンツキャッシュと配信に重点を置いています。」

のように難なく答えてくれます。（ハルシネーションが起きにくい）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3559682/81f911c1-37d4-9da5-4dc7-bacc64e4234b.png)

ちなみに私はこの画像のような感じでChatGPTに質問したことはメモ帳にコピーしていつでも引き出せるようにまとめていました。

また、「再言語化」についてもう少し触れますが、例えば「DynamoDB Streamsって何だ？」となったときに[公式ドキュメント](https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/Streams.html)の説明を読んでみても
>DynamoDB Streams は、DynamoDB テーブル内の項目に加えられた変更に関する情報の順序付けされた情報です。テーブルでストリーミングを有効にすると、DynamoDB はテーブル内のデータ項目に加えられた各変更に関する情報をキャプチャします。

直訳されたこの文章をそのまま覚えて理解しようとしても正直キツいと思います。
なので、これを自分の理解しやすい言葉で簡潔に言い換えて、「要するに、S3イベント通知のDynamoDB版か！」と落とし込む事ができるようになれば問題文中で遭遇した際に対応しやすいです。(厳密にはS3イベント通知と1対1で対応している訳では無いのですが、問題を解く上で差し支えない範囲であれば問題ありません)

この要領で、
* Amazon DynamoDB Accelerator(DAX) → ElastiCacheのDynamoDB版
* AWS Shield → DDoS攻撃対策の専門家
* サービスコントロールポリシー(SCP) → IAMポリシーのOrganizations版

のように覚えていきましょう。

## 頻出パターンをストックする
問題演習を積み重ねていくと、与件文を読んだだけで選択肢を見なくても答えになるサービスの名前が分かるようになっていきます。
よく問われるサービスの名前、言葉の使われ方はパターンとしてストックしておき、問題文を読んだら思い浮かべられるようになれればある程度解けるようになってきている証拠です。
* コンテンツをエッジロケーションにキャッシュし、全世界に配信する → CloudFrontを思い浮かべる
* コンテナを使用し、運用上のオーバーヘッドを抑えたい → Fargateを思い浮かべる
* EC2インスタンスをコスト効率良くスケーリングし、中断・停止を許容できる → スポットインスタンスを思い浮かべる
* サービスを分割し、疎結合なアーキテクチャを構築したい → SQSを思い浮かべる
* S3バケットにパブリックインターネットを介さずにアクセスし、コストを最適化する → ゲートウェイ型のVPCエンドポイントを思い浮かべる

以上に挙げた例は多分5回以上は見ています。
結局のところ試験は慣れの部分が大きいので、AWSを実際に使った経験がない人であっても(もちろん論理的に理解した上で)反射レベルで想起できる問題を増やすことで合格率を上げることが可能です。

## 余談
試験を受けたのが9/16なのですが、まだ残暑も厳しく真夏日となることも多かったので半袖でテストセンターへ向かったのですが、冷房がキンキンに効いていたので着脱しやすい上着を持っていって正解でした。
空調対策もしておくと良いです。