素人のAWS認定ソリューションアーキテクト – アソシエイト試験

## 概要

社内でAWSの重要度が高まっているのと、純粋にAWSに興味があったため受験しました。
振り返りの意味を込めて、その時に役に立ったこと、ポイントなどを紹介します。
(※2020年10月時点の情報です。)
あくまで、「試験合格」に絞っています。AWSを使う技術とはまた別物という認識でお願いします。

## 勉強前の自分の状態

・インフラ経験は2年程(オンプレミス)
・AWSはまったく触ってこなかった
・情報技術者試験持ちの知識量

「インフラの知識あるなら楽勝でしょ？」
これは良く言われていますが、少なくとも私はそれほど役に立たなかった・・・(インフラといっても幅広いから個人の意見です)
1番楽勝なのは、常に触り続けていること。

## 試験対策の期間

2020/8/20   : 自社でAWSの重要度が高まっていると聞く。じゃあ受けるか、と軽く決める
2020/8/21~ : 全然勉強できなかった。(子供、通勤、モチベ、etc・・・)
2020/9/15   : そろそろヤバいと思いだす。通勤時間と夜の数分を勉強に割り当てる。
2020/10/3   : 模擬試験で60%代を叩きだす。恥ずかしさで死にたくなる。ちょっとだけ焦りながら勉強する。
2020/10/10 : 合格

総勉強時間 : 18時間位

## 試験対策と勉強法

#### 1. 公式ドキュメントを読む

   とりあえずガイドを読んでみる。

   [AWSドキュメント](https://docs.aws.amazon.com/index.html)

   なんか聞き覚えがあるようなサービス名があるな〜。すごい一杯あるし...覚えられるのかなこれ〜(心配)
   結果、時間もないので主要なサービスを見返す時に活用する程度で終了。

   すぐさま、こっちへ逃げました。

   [AWS クラウドサービス活用資料集トップ](https://aws.amazon.com/jp/aws-jp-introduction/)

   こっちもいいけど、流石に時間が溶けるので程々に。

   [AWS ホワイトペーパーとガイド](https://aws.amazon.com/jp/whitepapers/?whitepapers-main.sort-by=item.additionalFields.sortDate&whitepapers-main.sort-order=desc)

   

#### 2. 試験対策本の購入

   [徹底攻略 AWS認定 ソリューションアーキテクト – アソシエイト教科書](https://www.amazon.co.jp/dp/4295005495)

   黒本ってやつですね。JavaSilver取得の時にお世話になりました。
   しかしAWS試験はいわゆる「暗記問題」とも言い難いため、中身はサービスの紹介が主になっていました。
   入門書としては最適かもしれません。
   試験対策としては、ちょっと物足りなさを感じました。

   

#### 3. AWSで実際に構築

   文字を読んでも良く分からん！我は実際に手を動かして覚えるタイプよ！
   って方も、それ以外もオススメ。
   当たり前ですけどお金が掛かるので注意。(無料枠もあるけど直ぐ飛び出る)
   必ずCloudWacthで課金アラームをセットしよう。
   [AWS の予想請求額をモニタリングする請求アラームの作成](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/monitor_estimated_charges_with_cloudwatch.html)

   自分はWebサービスを構築してみて、各種必要な設定などを確認しました。
   やはり、自分で操作すると覚えが違いますね。

   [AWSにWEBアプリの最小構成環境を作る](https://qiita.com/okoppe8/items/dc1de147a36797442e4c)

   とはいえ、試験範囲のサービスは膨大で、全てを自前で用意したりすると、結構なお金が掛かるので現実的ではないです。

   

#### 4. WEB問題集でスキマ時間を活用

   [AWS WEB問題集で学習しよう](https://aws.koiwaclub.com/exam/)

   これに凄く助けられました。
   通勤時間の合間に。休憩時間の合間に。
   まとまった時間が中々とれない自分にとって、このお手軽さは魅力的でした。
   むしろ合格するだけなら、これをひたすらやることをオススメします。

## 試験のポイント

問題の内容は、サービスのユースケース、もしくは要件に対するコストパフォーマンスを問うものが主となっていました。
つまりサービスをどれだけ触ってきたかがモロに出ます。
もちろん、冒頭でも書きましたが私もAWSはまったく触ってない素人から合格したので、どこがポイントが紹介します。


#### 1. キーワードによる暗記

   AWS試験は暗記ではないとは書きましたが、実際サービスに関連する「問題のキーワード」があります。それを覚えることによって、問題の難易度は大幅に下がります。
   以下に幾つか列挙していきますので、ご参考にどうぞ。

| Keyword | Answer | Comment |
|:-:|:-:|:-:|
| [ 大量の静的コンテンツ ] [ ユーザへの応答時間が長い ] | S3をオリジンとしてCloudFrontディストリビューションを設定する。 | SAA試験ではCloudFrontをめっちゃ使わせようとします。まぁ便利なんですけどね。 |
| [ RDS ] [ 読み取りのレイテンシー ]                    | リードレプリカを作成する。                                   | RDSで読み取りときたら8割これ。                               |
| [ データベース ] [ 構造化データ ] [ 拡張性・可用性 ]  | Amazon Aurora                                                | 答えにMysqlとかPostgresqlとか入ってたら確実。AWS以外のサービスは幸福になれない。 |
| [ セッションデータ ]  [ 一貫性・可用性・耐久性 ]      | Amazon DynamoDB                                              | セッションデータだとDynamoDBが6割。時々ElasticCacheだったりする。 |
| [ POSIX準拠 ]  [ 共有ストレージ ]                     | Amazon EFS                                                   | POSIX準拠がきたら確定演出。                                  |
| [ S3 ]  [ 操作ミスによる削除防止]                     | バージョニング有効化                                         | MFA認証が付属する場合もある。                                |

   

   これらは一例ですが、複数の問題を解いていく内に自分の中で掴んでいくはずです。
   しかし暗記だけだと辛いのも事実・・・。
   そのため複数の活用例を理解し、自分の中で噛み砕く必要があります。

   

#### 2. 頻出するパターン

   AWSのサービスを組み合わせたものでも問題中で頻出するものがあります。(ほとんどが活用集に書いてあるもの)
   それも3ケースのみですが紹介していこうと思います。

   
##### ◇◇ ケース1 ◇◇
```
   VPCのセキュリティを設定して、バックエンドのDBインスタンスがインターネットからアクセスできないようにし、
   アプリケーション層からのみアクセスできるようにする。
```
   

   データベースのネットワークセキュリティを設定する問題です。
   具体的には以下のことが必要です。
1. DBインスタンスのプライベートサブネットを作成する。
2. セキュリティグループを設定してアプリケーションのセキュリティグループからのリクスエストのみ許可する。
   ![](https://storage.googleapis.com/zenn-user-upload/qxnx66xcqp3s4452hy4lv0ea29zg)
   
プライベートサブネット、セキュリティグループ、ネットワークACLはセキュアな構成を作成する上で、必ずと言っていいほど出ます。
   
- プライベートサブネット: インターネットゲートウェイを指定してないサブネット。
- セキュリティグループ: インスタンス単位。ステートフルな制御。
- ネットワークACL: サブネット単位。ステートレスな制御。
   
##### ◇◇ ケース2 ◇◇
   ```
   単一のアベイラビリティゾーン(AZ)に2つのEC2インスタンスが実行されている。
   このアーキテクチャの可用性を高めたい。
   ```
   可用性を高める問題です。
   SAAには可用性を問うものが大多数を占めますが、そのなかでもAuto Scalingはかなり頻出するサービスです。
   あと単一AZと出たら、複数AZに分散させるのが定石です。
   またAuto Scalingで増えたインスタンスを負荷分散するためApplication Load Balancer(ALB)も併用します。
   
1. 複数のAZで同一のインスタンスが起動するように構成されたAuto Scalingグループにインスタンスのターゲットグループを追加する。
2. ALBをAuto Scalingグループのフロントに配置する。

   ![](https://storage.googleapis.com/zenn-user-upload/p5a19t0u862ed9l6df9430zl37ns)
   
   この構成はかなりメジャーらしく、AWSも推してくる。
   Auto ScalingはCloud Watchを使ったリソース閾値のトリガーや、スケジュールでのスケールアウトが可能。どの方式でAuto Scalingを設定できるかも覚えておきたい。
   
- Auto Scaling: スケーリングプランの設定値によりEC2インスタンスのスケールアウトが可能。リージョン間でグループ設定出来ないので注意。
- ALB: 標準的なロードバランシングの機能を持っていることに加え、設定したパスで振り分けることが可能。動的マッピング。こちらもリージョン間は不可能。
   
##### ◇◇ ケース3 ◇◇
   ```
   インフラストラクチャの管理する運用オーバーヘッドなしで、マイクロサービスを実行でき、
   リクエスト数が急激に変化しても対応できるように、短時間でスケーリング可能なソリューションは？
   ```
   書いてて思うのですが、凄い良いとこどりですね。
   いわゆるサーバレスな構成を選びとる問題です。
   最初はスケーリングって単語でAutoScalingとか選びがちです。
   
   1. API GateWayを配置し、背後でLamdbaを実行する。
   
   ![](https://storage.googleapis.com/zenn-user-upload/1cxwydeyd9jq18q0qb0536gtjs77)

サーバレスって良く分かっていなかったですが、AWSを通して理解できた気がします。

- AWS Lamdba: サーバを起動することなくコード実行可能。可用性、スケーリングはLamdba自身で自動管理。実行した分だけ料金発生。
- API GateWay: APIの管理を簡潔に行うサービス。Lamdba以外にもEC2インスタンスとも組合わせ可能。
   
   上記を3ケースを紹介しましたが、これはAWSのほんの一部であり、試験ではもっと要件を長ったらしくしたものが出ます。
   活用集や問題をこなし、組み合わせの引き出しを多くすることをオススメします。
   
## 最後に


試験は日本語で書かれていますが、翻訳が所々おかしいところがあります。
原文が表示できるので、適宜英語の方で読むと謎な日本語が解決するかもしれません。

AWSの試験を受ける理由は人それぞれかと思いますが、せっかく学んだ技術、個人でも仕事でも積極的に活用していきたいですよね。
そして試験合格で満足せず、継続的にAWSを学んでいくことが大事だと思います。
恐ろしいことにAWSの世界はこれからも広がっていくのでしょうから・・・。