AWS Well-Architected Tool でワークロードを定義しアーキテクチャをセルフレビューする

こちらは [AWS for Games Advent Calendar 2023](https://qiita.com/advent-calendar/2023/aws-for-games) の 20 日目の記事です。

今回は AWS が体系的に明文化したベストプラクティス集である AWS Well-Architected Framework に照らして、ワークロードのアーキテクチャをセルフレビューする際の主な流れについて書きます。
「ワークロード」や「アーキテクチャ」などの用語の意味については、次のセクションで触れます。

# AWS Well-Architected Framework とは？
[AWS Well-Architected Framework](https://aws.amazon.com/jp/architecture/well-architected/) は、お客様がクラウドでのワークロードの設計、実装、運用を評価して改善できるようにする、AWS が体系的に整理したベストプラクティスのコレクションです。AWS Well-Architected Framework は特定の概念領域毎にベストプラクティスが整理された「柱」によって構成され、2023 年現在では「[運用上の優秀性の柱](https://docs.aws.amazon.com/ja_jp/wellarchitected/latest/operational-excellence-pillar/welcome.html)」、「[セキュリティの柱](https://docs.aws.amazon.com/ja_jp/wellarchitected/latest/security-pillar/welcome.html)」、「[信頼性の柱](https://docs.aws.amazon.com/ja_jp/wellarchitected/latest/reliability-pillar/welcome.html)」、「[パフォーマンス効率の柱](https://docs.aws.amazon.com/ja_jp/wellarchitected/latest/performance-efficiency-pillar/welcome.html)」、「[コスト最適化の柱](https://docs.aws.amazon.com/ja_jp/wellarchitected/latest/cost-optimization-pillar/welcome.html)」、「[持続可能性の柱](https://docs.aws.amazon.com/ja_jp/wellarchitected/latest/sustainability-pillar/sustainability-pillar.html)」の 6 本の柱によって構成されています。
また、特定の技術領域や業界に焦点を当てて AWS のベストプラクティスがまとめられた「レンズ」も提供しています。レンズには、クラウドにおけるゲームの構築と運用に固有な特性を考慮してベストプラクティスが記載された「[ゲーム業界レンズ](https://docs.aws.amazon.com/ja_jp/wellarchitected/latest/games-industry-lens/games-industry-lens.html)」も含まれています。
柱とレンズにはそれぞれ「設計原則」が示されており、この設計原則に基づいて定義された「ベストプラクティス領域」に対応するように設置された複数の「質問」が設置されており、そして各質問の裏にある背景やその回答根拠につながる「ベストプラクティス」のコレクションがまとめられています。
AWS Well-Architected Framework に関連した取り組みは 2012 年からスタートしていますが、ビジネスや環境、ワークロードに対して正確で規範的なガイダンスや情報が提供できるように、AWS はその内容を継続的にアップデートしています。2023 年 10 月 3 日には 6 つの柱全てにアップデートがあり、2023 年 12 月 6 日にはさらにセキュリティの柱とコスト最適化の柱に含まれるベストプラクティスがアップデートされています。2023 年 10 月 3 日時点で、昨年 2022 年 10 月の内容と比較して 73% 以上のベストプラクティスが少なくとも 1 回変更されているデータがあります[^1]。

なお、本記事で使用する以下の用語は、この AWS Well-Architected Framework の文脈で定義されている意味として扱います[^2]。

| 用語 | 説明 |
|:-|:-|
| コンポーネント | 組み合わせて要件に対応するコード、設定、AWS リソース |
| ワークロード  | ビジネス価値を提供する一連のコンポーネント |
|アーキテクチャ| コンポーネントがワークロードで連携する方法 |
|マイルストーン| 製品ライフサイクルを通じたアーキテクチャの進化に伴うアーキテクチャの重要な変更点の記録 |

AWS Well-Architected Framework やレンズはどなたでも Web 上でアクセスして閲読可能なホワイトペーパーとして公開されています。この読み物を読むことでベストプラクティスの理解が深まることはさることながら、それだけでなく、ここに記載されているベストプラクティスに照らしてアーキテクチャを評価する Well-Architected Framework Review(WAFR) の実施の際に活用できます。

# Well-Architected Framework Review(WAFR) とは？
WAFR（ウェイファーと読みます）は、AWS Well-Architected Framework を活用してアーキテクチャを評価するレビューです。AWS Well-Architected Framework に記載されているベストプラクティスを学びながら、これらのベストプラクティスに照らしてアーキテクチャを計測してアーキテクチャのリスクを特定し、そのリスクに対処するための改善計画を作成する、という一貫したプロセスで進めます。この学習・計測・改善というプロセスのサイクルを繰り返し継続的に WAFR を実施することで、アーキテクチャを進化させていきます。

この WAFR は、問題を発見するためのフレームワークでよく取り上げられる「現状（As-Is）」と「あるべき姿（To-Be）」を洗い出し、その間にある「ギャップ（問題）」を特定していく「ギャップ分析」に類似している、と考えています。WAFR では、あるべき姿が AWS Well-Architected Framework に記載されているベストプラクティスによって裏付けできます。裏付けされ明文化されたあるべき姿に現状を照らし合わせることで、現状と問題に対する認識が捉えやすくなります。WAFR を通じて特定できた問題はアーキテクチャにおける潜在的なリスクとも言え、「なぜ今の状態はリスクがあると言えるのか」「そのリスクはお客様やビジネスにとってどのような影響があるのか」等、そのリスクに対して多角的に考察を深めるきっかけが生まれます。そのため、WAFR を実施した後は、実施前と比較してアーキテクチャそのものに対する認識や解像度が向上した状態になります。

特定できたリスクに対しては、影響度、難易度、緊急度、重要度のような複数の評価軸を用いて、リスクへの対応優先度を決め、改善計画を立てた上で実際に行動に移していく恰好となります。
このリスクへの対応を計画する際、他の柱で特定されたリスクへの対応とかち合い、トレードオフの関係になっていることに気づくことがあります。これは、本質的にアーキテクチャには正解や不正解が存在していないことの表れであり、様々なベストプラクティスがある中でも、最終的にはそのワークロードにおいて何が優先事項なのかを決める主体性がアーキテクティングには求められている、と考えています。トレードオフになっていると気づいた際には、改めて優先事項を整理・確認した上で、どのような意思決定をし、どのようなリスクを受け入れることにしたかを明確にしておくと、その他の改善計画を立てる際に役に立ちます。

このように WAFR は、AWS Well-Architected Framework に現状を照らして継続的にアーキテクチャの改善を図っていく活動となるわけですが、この WAFR の実施に役立つサービスが AWS Well-Architected Tool(AWS WA Tool) になります。

# AWS Well-Architected Tool(AWS WA Tool) とは？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/911060/0591f2d7-19ca-b54b-966b-d8bc370a4d17.png)
[AWS WA Tool](https://aws.amazon.com/well-architected-tool/?nc1=h_ls) は、WAFR の実施を支援するサービスです。AWS Well-Architected Framework に記載されている質問やベストプラクティスの各項目を精査に確認し、ワークロードのアーキテクチャを改善するためのアクションの特定をしやすくします。
WAFR の実施対象とするワークロードを AWS WA Tool 上で定義すると、AWS Well-Architected Framework における各柱に関する質問に回答するフォームが提供されます。AWS WA Tool 上に回答やメモなどの情報を記録していきながら WAFR を進行し、最終的に入力された回答が AWS WA Tool で評価され、改善計画とワークロードにおけるリスクの優先順位リストを表示できます。
AWS WA Tool は追加料金なしで利用でき、日本国内では現状東京リージョンがサポートされています。

# デモ：WAFR の実施に向けてワークロードを定義する
本記事の後半では、実際に AWS WA Tool を使用して、WAFR の実施に向けてワークロードを定義する様子を見ていただこうと思います。
例えば、次のような（ざっくりですが）開発状況とビジネス目標がある想定で WAFR の準備を進めることにします。
* 開発状況 - 開発中のオンラインゲームにおいて、AWS を使ってバックエンドサービスを構築
* ビジネス目標 - セキュリティのリスクを抑え、なるべくコストを最適化したい

AWS WA Tool は AWS マネジメントコンソール上からアクセスできます。画面上部の検索バーに ``WA`` と入力すれば最上位にヒットします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/911060/27aadfc7-21ca-b1cd-535f-41ce56401ba5.png)

画面遷移後に [ワークロードの定義] をクリック……といきたいところですが、今回は先に「プロファイル」を作成したいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/911060/56872ce0-5f1f-b36a-01cf-4efeefe67a01.png)

## プロファイルの作成
AWS WA Tool におけるプロファイルは、WAFR をカスタマイズできるリソースの 1 つであり、ビジネス目標に関する事前定義された一連の質問に回答することで作成します。プロファイルは新規または既存のワークロードに適用することで、希望する結果に沿って予め優先順位付けされた AWS Well-Architected Framework の一連の質問が抽出されます。これにより WAFR をビジネス目標に沿ってカスタマイズできます。

[プロファイルの作成] をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/911060/1964cc77-c900-0178-3e8d-1f79e9fc2225.png)

「プロファイルのプロパティ」に名前と説明を入力し、選択式の「プロファイルに関する質問」に回答します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/911060/2aedc22d-5eac-4da3-e627-0e5f54c93332.png)

質問と回答の選択肢は、執筆時点ですべて英語表記となっています。それぞれの質問と回答の補足情報については、[情報] をクリックすると詳細が確認できます。
今回は、想定のシナリオの開発状況とビジネス目標から、下記のスクリーンショットのような回答をしてみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/911060/6b592d38-a514-0f94-02a1-dc145ffed7ba.png)

これでプロファイルの作成は完了です！
﻿![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/911060/7f7e8d44-35e5-2976-1f69-e2d7688078c0.png)

## ワークロードの定義
プロファイルの準備ができた後は、WAFR の実施対象となるワークロードを定義します。
①レフトメニューにある [ワークロード] を選択後、② [ワークロードの定義] をクリックし、③ドロップダウンメニューにある [ワークロードの定義] をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/911060/a0309f7a-5d08-c492-8209-f20ebe26099c.png)

### ステップ 1. プロパティを指定
ワークロードのメタデータに相当するプロパティをそれぞれ指定していきます。名前、説明、レビューの所有者、環境、リージョンが必須項目となっており、それ以外の項目はオプションとなっています。入力したプロパティがどのように使われるのか気になる場合は、「ワークロードのプロパティ」と表示されている見出しのすぐ下にあるリンクから詳細を確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/911060/740946b1-23e2-e73e-808c-5af5bccd118c.png)

なお、業界の種類には "ゲーム" が含まれており、"ゲーム" を選択した上で [業界を選択] すると、いくつかのゲーム業界内のカテゴリーが指定できるようになっていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/911060/504e2966-8ac1-74c9-0b5c-56eae8c290f1.png)

AWS WA Tool は他の AWS サービスと統合できる機能もあり、その 1 つに AWS Trusted Advisor があります。Trusted Advisor との統合を有効化すると、Trusted Advisor によるチェック項目が AWS Well-Architected Framework に設置されている各質問にマッピングされ、実データを確認しながら WAFR を進めることができます。今回は詳細な説明を割愛し、有効化せずに進めます。

一番下までスクロールできたら [次へ] をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/911060/d9233b14-79f7-8afe-a777-508259a4c65f.png)

### ステップ 2. プロファイルの適用
このステップで先ほど作成したプロファイルを適用します。①作成したプロファイルを選択してから、② [次へ] をクリックします。なお、プロファイルの適用はオプションとなっているため、指定する必要がなければスキップして構いません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/911060/33b27dba-4e87-ad85-bd18-880e951639d6.png)

### ステップ 3. レンズの適用
最後にこのワークロードに適用するレンズを、「レンズカタログ」および「カスタムレンズ」から選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/911060/37f8a9e1-62d3-f787-25a1-5d5d9fe94ef1.png)

レンズカタログは、今年の re:Invent 2023 の会期中に発表された AWS WA Tool の新しい機能であり、AWS 公式から提供しているレンズを集約したリポジトリです。今まさに説明しているこのワークロードの定義や、既存のワークロードの編集時に適用するレンズへのアクセス性を向上させることで、特定の技術領域や業界固有に焦点を当てたベストプラクティスの存在を認識しやすくなり、レビューのカスタマイズがさらにしやすくなっています。
また、レンズカタログ機能がリリースされる前までは、デフォルトで適用される AWS Well-Architected Framework 以外に 2 つのレンズが AWS 公式より提供されていましたが、レンズカタログ機能のリリースとともに 7 種類のレンズが新しく追加され、本記事の執筆時点で 10 種類のレンズが AWS 公式より提供されています。
しかし、本記事の執筆時点では前述した「ゲーム業界レンズ」を含む一部のレンズはレンズカタログには含まれておらず、今後の継続的な更新が期待されます。

なお、AWS WA Tool で提供されていなかったり、組織内で独自にまとめていたりするベストプラクティスに基づいてレビューをカスタマイズしたい場合、特定のフォーマットに合わせてレンズを自作できます。これが「カスタムレンズ」になります。
カスタムレンズの作成方法の詳細については、本記事では説明を割愛し、別の AWS ブログ[^3]に譲りたいと思います。

今回はデフォルトで適用されている AWS Well-Architected Framework 以外は選択せず、そのまま [ワークロードの定義] をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/911060/bf98a195-8fd2-cca4-a361-4771c5146c03.png)

これで WAFR を実施する対象のワークロードが定義できました！
実際にレビューを開始するには、① [レビューを開始] をクリックして、② 質問の参照先となるレンズ（今回は AWS Well-Architected Framework のみ選択しています）を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/911060/5ae64808-82a3-0ac7-29d2-23a522c4e9f0.png)

## WAFR を実施する
ワークロードのレビュー画面では、画面左側に各柱の質問を展開できる UI があり、画面中央にはその質問の詳細と回答やメモを行うフォームが表示されています。WAFR を実施する際は、この画面を使って進めていきます。

画面左側の一番上の項目に「優先度」と表示されている箇所があります。これを展開すると、プロファイルによって優先付けられ抽出された一連の質問を確認することができます。AWS Well-Architected Framework の質問は、本記事の執筆時点で合計で 57 種類がある中、今回定義したワークロードで「優先度」に含まれていた質問は 41 種類となっていました。セキュリティとコスト最適化の強化の優先を想定しているワークロードということもあり、その他の運用上の優秀性、信頼性、パフォーマンス効率、持続可能性の柱にある質問が一部省略されていることを確認しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/911060/27c39aad-b9fe-96aa-1635-2dad089248f8.png)

質問に回答するには、「以下から選択します」と記載されている各項目が該当するかどうかを判断し、チェックボックスにチェックを入れます。この各項目が、AWS Well-Architected Framework の最小構成単位である「ベストプラクティス」となっています。
ベストプラクティスの詳細は、Well-Architected Framework のホワイトペーパーに含まれる[付録: 質問とベストプラクティス](https://docs.aws.amazon.com/ja_jp/wellarchitected/latest/framework/appendix.html)、または各柱のホワイトペーパーから確認できます。「SEC 1. ワークロードを安全に運用するには、どうすればよいですか?」 の質問の場合であれば、下記が参照先になります。
- 付録: 質問とベストプラクティス > セキュリティ > セキュリティの基礎 > [SEC 1.ワークロードを安全に運用するには、どうすればよいですか?](https://docs.aws.amazon.com/ja_jp/wellarchitected/latest/framework/sec-01.html)
- セキュリティの柱 > [セキュリティの基礎](https://docs.aws.amazon.com/ja_jp/wellarchitected/latest/security-pillar/security.html)

ワークロードによっては、必ずしも尋ねられている質問がワークロードと関連しないものもあります。そのような場合には、「質問はこのワークロードには該当しません」と記載されたトグルスイッチを有効にすることで、質問への回答を省け、AWS WA Tool による質問への回答に対する評価もスキップされます。
該当しない場合には、その理由や背景を画面下部にあるメモ欄に記入して明確化しておくとよいでしょう。
﻿![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/911060/ce4a6222-6044-21cb-dcd2-691833b4c812.png)

質問には該当する一方で、質問に含まれるベストプラクティスが該当しない場合には、ベストプラクティス単位で該当しない旨をマーキングできます。こちらも該当しない理由や詳細を入力して明確化しておきます。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/911060/7e65cb07-ef68-9684-a896-f3410c3923b6.png)

質問への回答が完了したら画面最下部の [次へ] をクリックし、次の質問に移ります。
また、WAFR はいつでも画面最下部の [保存して終了] をクリックして中断でき、再開することができます。優先度付けられた質問の中から更に抜粋しても良いですし、特定の柱のみを対象に WAFR を進めることも問題ありません。大事なのは、適切な関係者と継続的に WAFR を実施して、学習・計測・改善のサイクルを回していくことだと考えています[^4]。

WAFR の実施にあたっては下記の 3 部構成のブログシリーズが参考になります。英語になりますが、下記ブログの筆者が多くの WAFR をお客様と運用して得た教訓が記載されています。
- How to perform a Well-Architected Framework Review
  - Part1 - https://aws.amazon.com/jp/blogs/mt/how-to-perform-a-well-architected-framework-review-part1/
  - Part2 - https://aws.amazon.com/jp/blogs/mt/how-to-perform-a-well-architected-framework-review-part2/
  - Part3 - https://aws.amazon.com/jp/blogs/mt/how-to-perform-a-well-architected-framework-review-part3/

## リスクを確認する
WAFR を実施して質問への回答の入力を保存し終了すると、回答内容が評価され、ワークロードの詳細画面に「高リスク」と「中リスク」が表示されます。リスクだと特定された質問の一覧は、下図の「レンズ」ペインに表示されているリスクの数のリンクを踏むことで確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/911060/85e1c5da-b128-d98b-3d72-86d4f3528845.png)

## マイルストーンを保存する
WAFR を実施した後は、その時点での回答やメモの記録を「マイルストーン」として保存しておきます。
マイルストーンを保存するには、ワークロードの詳細画面にある [マイルストーンを保存] をクリックした後、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/911060/d4edc08b-4607-0506-6f27-16f69dbe2821.png)

表示されたポップアップウィンドウ内にマイルストーン名を指定して [保存] をクリックするだけです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/911060/50f2511a-ef38-3375-d4e8-b4a24c6fd4db.png)

保存されたマイルストーンは、ワークロードの詳細画面にある [マイルストーン] タブをクリックすることで一覧表示されます。WAFR を実施したタイミングで保存しておくことで、レビューの進捗を可視化したり、マイルストーン間を比較したりできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/911060/4e6bd3f0-a126-15f0-e469-ae1ee64e2f75.png)

# まとめ
いざ書き上げてみると少々抽象的な内容になってしまったと感じつつ、本記事を通じて AWS Well-Architected Framework や WAFR に対する解像度が少しでも向上していたら幸いです。

ゲームのワークロードのアーキテクチャを対象に WAFR を実施することで考察が深まり、ゲームもアーキテクチャも、そしてそれらに関わる方々もさらに進化していく世界を期待しながら、今回はここで筆を置かせていただこうと思います。

最後までお読みいただきありがとうございました。


(免責) 本記事の内容はあくまでも個人の意見であり、所属する企業や団体とは関係がございません。

[^1]:https://aws.amazon.com/blogs/architecture/announcing-updates-to-the-aws-well-architected-framework-guidance/
[^2]:https://docs.aws.amazon.com/ja_jp/wellarchitected/latest/framework/definitions.html
[^3]:https://aws.amazon.com/jp/blogs/news/well-architected-custom-lenses-internal-best-practices/
[^4]:https://docs.aws.amazon.com/ja_jp/wellarchitected/latest/framework/the-review-process.html