AWSソリューションアーキテクト-アソシエイト試験にWell-Architectedが役立った話

## はじめに
https://aws.amazon.com/jp/certification/certified-solutions-architect-associate/

合格しました:raised_hands:

というわけで合格体験記です。~~こういうの一度書いてみたかったんだ~~
とはいえ勉強法に関する良質な記事はすでにたくさんありますし、私自身も「実務経験＋参考書＋問題集」という王道ド真ん中を通ってきたため、新しそうなことを書ける感じはしません。困った:tired_face:

で、少し違った視点から何か役立ちそうなトピックがないかと考えまして、今回は、
**「Well-Architectedも一緒に勉強するといいってみんな言うけど、実際どの部分がどんな感じで試験に役に立つの？」
「そもそもWell-Architectedって何？」**
という観点からまとめてみたいと思います。

## Well-Architected Frameworkとは
https://wa.aws.amazon.com/wellarchitected/2020-07-02T19-33-23/index.ja.html

AWS公式が提供する、AWSを利用する上でのベストプラクティス集です。
「これに則って実装すればOK！」 **というものではなく、** あくまでも「作ったものはベストプラクティスに沿っているか」「沿っていない時は、なぜ沿っていないのか（意図的なのか、考慮漏れなのか）」を検討するための指針となります。

## どう役に立ったのか
AWS SAA（ソリューションアーキテクト - アソシエイト）試験では、Well-Architected Frameworkの「5つの柱」にもとに問題が出題されています。

https://aws.amazon.com/jp/about-aws/whats-new/2020/02/new-version-of-aws-certified-solutions-architect-associate-exam-is-now-available/

> AWS 認定ソリューションアーキテクト – アソシエイトの認定では、顧客要件に合わせて AWS の Well-Architected ソリューションを設計およびデプロイする際に必要となる能力を備えていることを確認します。 

また、[SAA-C02の試験ガイド](https://d1.awsstatic.com/ja_JP/training-and-certification/docs-sa-assoc/AWS-Certified-Solutions-Architect-Associate-Exam-Guide_v1.1_2019_08_27_FINAL.pdf)においても、テスト分野として5つの柱（から運用上の優秀性の柱を除いたもの）をベースにしたテスト分野が紹介されています。

つまり、AWS SAAを参考書等で勉強をすることでWell-Architectedに沿ったシステム構築ができるようになり、一方で**Well-Architectedを理解することで、AWS SAAの出題に対して「なぜその選択肢がベストプラクティスなのか」という観点で解答できるようになる**、という相互の関係があります。

ここでは例として、「テスト環境を作りたい」というシチェーションへの対応を考えてみます。
これに関連するWell-Architected Frameworkの項目は以下のページです。

https://wa.aws.amazon.com/wellarchitected/2020-07-02T19-33-23/wat.question.OPS_5.ja.html

> コードとしてインフラストラクチャを使用したり、構成管理システムを使用したりして本番環境に存在するコントロールに準拠して設定された環境をデプロイし、システムがデプロイ時に予想どおりに動作することを確認します。

「複数の環境を使用する」の項では、本番に近い環境を**IaC（Infrastructure as Code）で作成して**テストすることが推奨されており、あわせて運用上のポイントやメリットについても説明されています。また、この項の関連項目として**CloudFormation**が紹介されています。

もちろん参考書や問題集を何周かすれば難なく答えにたどり着けるような例ではありますが、

- 参考書：CloudFormationの機能がわかる
- 問題集：CloudFormationを使うシチュエーションがわかる
- Well-A：ベストプラクティスとしてCloudFormationを使うべき理由がわかる

の3点セットで覚えられると**よく定着しますし、試験中に思い出すためのきっかけにもなりますし、何より確信をもって解答できるようになる**ため、大変自信につながります。ここが一番の役立ちポイントだったかと思います。

## Well-Architectedの5つの柱と試験分野
ここからはWell-Architected Frameworkと試験分野について、関連するAWSサービスを抜粋しながら紹介していきます。
私なりの解釈で噛み砕いた内容のため、一部ざっくりしすぎて不正確な点があるかもしれません。予めご了承ください。

### 運用上の優秀性の柱
組織の構築などマネジメント側の話も多い柱ですが、アーキテクトの観点から身も蓋もない表現をするならば **「いかに運用をラクにするか」** という話がこの柱の主な話題になるかと思います。
手間を省いたり、障害を防止したり、安全にテストをしたりするにはどうするのがよいのか、という分野になります。

https://wa.aws.amazon.com/wellarchitected/2020-07-02T19-33-23/wat.pillar.operationalExcellence.ja.html

Well-Architectedの「設計原則」から引用すると **"運用をコードとして実行する"** 、すなわち**CloudFormationやOpsWorksなどのIaC**などがこの柱のポイントとして挙げられています。

また、**Elastic Beanstalk**などを使用して**環境構築の手間を省いたり**する話もこのカテゴリに含まれています。

https://wa.aws.amazon.com/wellarchitected/2020-07-02T19-33-23/wat.question.OPS_6.ja.html

> デプロイ管理システムを使用して変更を追跡および実装します。これにより、手動プロセスによって発生するエラーと、変更をデプロイする労力が減ります。

**「労力が減ります。」** いい言葉ですね。**労力が減ることで** ~~仕事をしなくて済む~~ **[より価値のある作業に人的リソースを割り当てられる](https://pages.awscloud.com/rs/112-TZM-766/images/JP_Business_Value_on_AWS.pdf)** というような表現は、AWSの資料では頻繁に見かけるイメージがあります。

そのほか、障害検知（Well-Architectedでは「ワークロードの正常性の把握」といったりする）の観点で、**CloudWatch**や**CloudTrail**なども関連サービスとして名前が出てきます。
ちゃんとログを取り、ちゃんと障害検知を仕掛けておけば、のちのち何か起きたときに**面倒なことにならなくて済む**と考えれば、これも一種の労力の削減でしょうか。

なお、運用上の優秀性の柱に関してはSAA-C02のテスト分野に対応するカテゴリが無いので、配点上はどこか別の分野に吸収されているものと思われます。さよなら……:wave:

### セキュリティの柱 / セキュアなアプリケーションとアーキテクチャの設計
「セキュリティ要件への準拠」「ストレージと転送データの暗号化」「リソースの権限管理」といった内容の柱です。

https://wa.aws.amazon.com/wellarchitected/2020-07-02T19-33-23/wat.question.SEC_8.ja.html

非常に範囲が広く勉強が大変な分野ですが、幸いWell-Architectedの上記ページではプラクティスごとに関連項目としてサービスが紹介されていますし、内容も一問一答といった粒度のためいくらか飲み込みやすくなっています。

それでもセキュリティのためのサービスとして**WAF, GuardDuty, ACM, KMS, Shield, IAM**などを押さえたうえで、セキュリティ関連の設定について**S3, RDS, EBS, ALB, VPC, CloudFront**などなどへの個別への対応も考えないといけない分野ではありますので、それはそれはもう巨大な知識領域になります。
（個別に[AWS Certified Security - Specialty](https://aws.amazon.com/jp/certification/certified-security-specialty/)の試験ができるのも納得ですね……）

あとは実際の構成例として「適切なユーザーにのみデータを配信する方法」などもこのカテゴリに入るかと思います。
例えば **いにしえの呪文「直リン禁止です！」** は、WAFでリファラ制限をかけて画像リンクを外部から利用できないようにするといった方法で対応可能です。例えが古すぎますかね？

ともかく繰り返しになりますが、範囲が広く、それでいて実践的な分野ですので、Well-Architectedと参考書の合わせ技でしっかり習得できればAWSの活用の幅がかなり広がってくるかと思います。

### 信頼性の柱 / レジリエントアーキテクチャの設計
「可用性」「フェイルオーバー」などがキーワードになる柱です。早い話が分散させたりスケールさせたりしましょうね、という内容です。

https://wa.aws.amazon.com/wellarchitected/2020-07-02T19-33-23/wat.question.REL_4.ja.html

分散やスケールというと、**Route 53のフェイルオーバールーティングやELBとAuto Scalingの組み合わせ、RDSのマルチAZ構成に[Aurora Serverless](https://aws.amazon.com/jp/rds/aurora/serverless/)** などが思い浮かぶところですが、Well-Architected Frameworkでは**SQS**が頻繁に登場してくる印象があります。

「データが壊れる」「サーバーが落ちる」以上に、「メッセージ（処理の命令）が失われる」というトラブルは頻発します。「SNSからLambdaに連係したがLambdaが[3連続でエラーを吐いた](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/invocation-retries.html)」とか、「DynamoDBのキャパシティに引っかかって書き込みがコケた」とか、「たまたまプライマリが落ちてセカンダリへ切り替えているタイミングだった」とか、「スケールが間に合わなかった」とか、とにかくあちこちでメッセージはロストします。
そんなときでも、メッセージを一度SQSに入れておくことで、処理に失敗したメッセージをキューに保持して再試行したり、後続処理だけスケールして性能低下を防いだりといった手段で信頼性を高められる、というメリットがあります。
さすが[最古のAWSサービス](https://aws.amazon.com/jp/blogs/news/amazon-sqs-15-years-and-still-queueing/)とでもいうべきか、ベストプラクティスな設計の中心にはしばしばSQSが存在しているようです。

また、「壊れる前に検知する」「壊れたときに復旧しやすくする」という観点で、**CloudWatch**や**X-Ray**などの利用もこの柱では推奨されています。

https://wa.aws.amazon.com/wellarchitected/2020-07-02T19-33-23/wat.question.REL_6.ja.html

### パフォーマンス効率の柱 / 高パフォーマンスアーキテクチャの設計
「レイテンシー」「オートスケーリング」「キャッシュ」あたりがこの柱のキーワードです。必要な性能を実現するために、適切なサービスを必要な分だけ使いましょうというテーマです。

https://wa.aws.amazon.com/wellarchitected/2020-07-02T19-33-23/wat.pillar.performance.ja.html

このあたりはセキュリティの柱と同じく、Well-Architected Frameworkでサービス名を挙げながら細かく触れられている部分ですので、「試験対策としてのWell-Architected」の効果が高い部分ではないか思います。
（そして、セキュリティの柱と同じく範囲がデカいです。）

ところで、パフォーマンスとコストのバランスをどう取っていくかという点は実際の設計でもしばしば話題に上がるところです。費用を安く抑えるためのポイントは次の「コスト最適化の柱」で触れられますが、一方で小規模な開発ではなかなか出番のないような高額で高性能なサービス（**ElastiCache**や**DynamoDB Accelerator**など）の出番を学べるのがこの「パフォーマンス効率の柱」でもあります。

https://wa.aws.amazon.com/wellarchitected/2020-07-02T19-33-23/wat.question.PERF_4.ja.html

### コスト最適化の柱 / コスト最適化アーキテクチャの設計
お安くAWSを使うためのノウハウが詰まった柱です。みんな大好きコスト最適化。

https://wa.aws.amazon.com/wellarchitected/2020-07-02T19-33-23/wat.question.COST_9.ja.html

Well-Architected Frameworkでは「使う分だけ払う」「使う量が分かっている時は先払いで割引を受ける」という観点で、**（主にEC2の）オートスケーリングとキャパシティー予約**について触れられています。そのほか、**Organizationの一括請求**や、マネージドサービスの活用による **「人的コスト」の削減** などもこの柱の話題です。

このあたりの話は、他の柱と内容が重複している部分も多いのかなというように感じます。
人的コストの削減は「運用上の優秀性の柱」と近いものがありますし、EC2のオートスケーリングは「信頼性の柱」「パフォーマンス効率の柱」でも触れられている内容です。
**あるAWSサービスに対して複数の観点からメリットや意義を説明できるようになる**（例：Auto Scalingについて「可用性」「パフォーマンス」「コスト」の観点で説明できるようになる）という点は、Well-Architectedが試験準備に役立つ大きなポイントかと思います。

また、**1つの「やりたいこと」に対して複数のアーキテクチャを比較検討する**という観点もコスト最適化やパフォーマンス効率での重要なポイントです。

https://wa.aws.amazon.com/wellarchitected/2020-07-02T19-33-23/wat.question.COST_5.ja.html

RDSの性能が足りていないとひとくちで言っても、解決策として**垂直スケーリングする、リードレプリカを配置する、Auroraに移行する、ElastiCacheを導入する**などさまざまな方法を取ることができます。
その中から「要件（コスト・性能・耐久性など）に合わせて検討し、適切な方法を選びましょう」というのがWell-Architectedの重要なテーマであり、そして試験で問われる部分でもあります。

## おわりに

というわけで、Well-Architected Frameworkを読んでおくと、

- AWSのベストプラクティスを踏まえた設計が分かる
- ユースケースごとに関連するサービスが分かる

というメリットがあるよというお話でした。

[受験者行動規範](https://aws.amazon.com/jp/certification/certification-agreement/)があるため出題内容には触れられませんでしたが、試験対策としては **Well-Architectedを知っておくと「設問の意図が分かる」「解答の手がかりが増える」「シチュエーションとサービスが紐づく」** というメリットがあるという点をお伝えできていれば……と思います。

もちろん最速合格とは程遠い、ある意味で試験対策としては回り道な方法ではありますが、実際に仕事などでAWSを使っていく上でWell-Architectedの考え方は非常に役に立つ内容になっています。
「資格取得を急がず、かつ取得がゴールではない方」「今後もAWSを実務で使っていく方」「少しでも試験に自信と安心感を持って臨みたい方」は、ぜひ参考書等と合わせてWell-Architected Frameworkに目を通してみてはいかがでしょうか。

https://wa.aws.amazon.com/wellarchitected/2020-07-02T19-33-23/index.ja.html

## 余談1: どれくらい時間かかった？
この手のエントリだと取得までの時間も記載するのが一般的ですよね！（偏った知見）
ただ私の場合相当遅めで、4月に[クラウドプラクティショナー](https://aws.amazon.com/jp/certification/certified-cloud-practitioner/)を取得してから8月までと考えると実質3～4か月くらいかけたことになります。

とはいえ勉強自体も本腰入れてガッツリ取り組んだというよりは、ヒマなときに参考書をつまみ読みして……というくらいの熱量でのんびり進めていましたので、**トータルの「勉強時間」としては30～50時間くらい**に収まるかと思います。
少し期間をあけて反復学習したほうが覚えやすいって[エビングハウスさん](https://ja.wikipedia.org/wiki/%E5%BF%98%E5%8D%B4%E6%9B%B2%E7%B7%9A)も言っていますし……？

## 余談2: 資格取得して実務で役立ってる？
**バッチリです。** 1つ例をご紹介します。

先日マネジメントコンソールでEC2関連の作業を行っている際、io1タイプのEBSボリュームがなぜかポツンと1つだけあることに気づきました。試験の参考書知識で「io1は結構高い」と分かっていたので確認してみたところ、「しばらく前に作ったボリュームで、DB処理のために不定期に1,000IOPSくらいの性能が必要になる。容量が小さいのでgp2だとバーストを使い切ってしまう。」ということでこの設定になっている模様でした。

これを **「データベースをEC2でホストしています。ストレージには1,000 IOPS程度の性能が必要です。この要求を満たすコスト最適なストレージタイプは何ですか。」** というような問題だと考えるならば……現時点での答えは**gp3**です。IOPSはベースラインで3,000もありますし、なによりio1よりずっと低コストです。

スループットもベースラインで足りそうでしたが、もしもっと必要だとしてもなおio1よりは安くなる計算でした。ということでボリュームタイプを変更し、これだけで月70ドル以上のコスト削減を実現することができました。

……とこんな感じで、試験勉強もなかなか活きてくるなぁと感じている今日この頃です。普段EC2はあまり触らないほうですので、この辺りは受験勉強しなければ気づけなかった部分かなと思います。
**自分が普段あまりやらない範囲のサービスを勉強するきっかけ**として、SAA試験の受験はなかなか役に立っているなと感じています。
ソリューションアーキテクト試験、おすすめです。皆様もぜひいかがでしょうか。

https://aws.amazon.com/jp/certification/certified-solutions-architect-associate/