【AWS】Well-Architected Frameworkについておさらいする【再学習】

## はじめに
 - 学習を通してまとめたもの
 - 学習の目的
     - ベストプラクティスを知った上で取捨選択する
     - 要件に沿ったインフラ環境を根拠を持って作れるようになる

## 対象の読者
 - AWSを学び始め、各サービスは理解したがインフラの設計はまだ難しい
 - AWS Well-Architected Frameworkを学びたい
 - AWS Well-Architected Frameworkを知った上でどういうことが出来るのか知りたい
 - AWS Well-Architected Frameworkを学ぼうと思ったが資料の量が膨大で挫折しかけた

## Well-Architected Framework(以下W-A)とは
 - クラウドベースのアプリケーションとインフラストラクチャの最適な設計と運用のためのベストプラクティスとガイドラインをまとめたフレームワーク
 - W-A Frameworkは6つの柱でベストプラクティスがまとめられている

### W-Aの目的
 - 最適なクラウドアーキテクチャを設計し、ビジネスの成功に寄与すること
 - ビジネスの成果を最大化しつつリスクを最小限に抑えることを目指す

### W-Aの重要性
 - クラウドの可能性を最大限に引き出すための最善の方法を理解し、実証済みの設計原則とベストプラクティスを知ることで、高品質のシステムを設計し、継続的に改善することを可能にする

### W-Aの構成要素
W-Aには上述にある通り、6つの柱でベストプラクティスをまとめており、各柱のベストプラクティスに対応するサービスを学ぶことで、高品質のシステムを設計し、運用することが出来る。

#### 6つの柱
 1. 運用上の優秀性
     - 自動化とプロセスの最適化により、運用効率の向上
 1. セキュリティ
     - リスクの評価とリスクの軽減戦略を立て、ビジネス価値を生み出しながら情報やシステムを保護
 1. 信頼性
     - ワークロードが意図された機能を正確に一貫して実行できること
     - ライフサイクル全体を通してワークロードを運用・テストをすること
     - 障害発生時の回復性を高めること
 1. パフォーマンス効率
     - コンピューティングリソースを効率的に使用し、需要の変化と技術の進化に応じてその効率性を維持
 1. コスト最適化
     - 最も低いコストでビジネス価値を最大化する
 1. 持続可能性(サステナビリティ)
     - 環境に対する影響、特にエネルギーの消費と効率性に配慮

### 各柱の解説

#### 1. 運用上の優秀性
- ビジネスの要求を満たすための操作手順を設計、実行、改善する
- 意思決定と改善活動を行うためのデータを収集する
- プロジェクトに対しての変更は段階的に導入され、プロセスを定期的に評価する


##### 1-1. ベストプラクティス
- 変更管理のプロセスを作成して実行する(CI/CD, IaC)
- アプリケーションのパフォーマンスと予測可能性を監視する
- システム全体を通じて追跡可能な作業ログを確保する

##### 1-2. 対応するサービス
- 変更管理のプロセスを作成して実行
    - AWS CloudFormation（インフラストラクチャーのテンプレート化、変更管理）や AWS CodePipeline（継続的インテグレーションと継続的デリバリー）
- アプリケーションのパフォーマンスと予測可能性を監視
    - Amazon CloudWatch（監視とログの管理）
    - Amazon Athena(データ分析)
- システム全体を通じて追跡可能な作業ログを確保
    - AWS CloudTrail（AWS アカウントのアクティビティと履歴のトラッキング）

#### 2. セキュリティ
- すべてのレベルで情報保護とシステム保護を行う
- セキュリティを適用するための機能と強制力
- セキュリティを強化するための知識を向上させるために、定期的なセキュリティ評価と監査

##### 2-1. ベストプラクティス
- 最小特権の原則に基づいてアクセスを制御する
- データとリソースを隔離する
- データを暗号化し、秘密鍵を保護する

##### 2-2. 対応サービス
- 最小特権の原則に基づいてアクセスを制御
    - AWS Identity and Access Management（IAM）
    - Amazon Cognito（ユーザー認証とアクセス制御）
    - Service Control Policy(AWS Organizations内の機能)
- データとリソースを隔離
    - Amazon VPC（仮想プライベートネットワーク）
    - AWS Organizations（AWS アカウント管理とポリシー制御）
- データを暗号化し、秘密鍵を保護
    - AWS Key Management Service（KMS）
    - AWS Secrets Manager（秘密情報管理と保護）

#### 3. 信頼性
- システムは変更要求に対して柔軟に対応できること
- システムは事業規模の拡大・縮小に応じて変更が可能なこと
- 障害に対して回復力があること


##### 3-1. ベストプラクティス
- 冗長性を持つコンポーネントとサービスを使用
- 適切なモニタリングを設置し、自動修復の仕組みの作成
- 障害発生時の対応策を準備し、定期的にテストをする

##### 3-2. 対応するサービス
- 冗長性を持つコンポーネントとサービスを使用
    - Amazon ECS or AWS Fargate（コンテナの冗長性と自動スケーリング）、Amazon Route 53（DNS サービスとドメイン登録）
- 適切なモニタリングを設置し、自動修復の仕組みの作成
    - Amazon CloudWatch（監視とログの管理）、AWS CloudFormation（自動修復機能のインフラストラクチャー定義）
- 障害発生時の対応策を準備し、定期的にテストをする
    -  AWS Fault Injection Simulator（システムの耐障害性のテスト）

#### 4. パフォーマンス効率
- リソースの使用を最大化させる
- 技術的な柔軟性を維持する
- パフォーマンス効率を向上させるための技術的な改善を行う

##### 4-1. ベストプラクティス
- サービスとリソースの選択はパフォーマンス目標に基づいて行う
- 自動化とスケーリングを利用
- クラウドネイティブテクノロジーを積極的に活用する

##### 4-2. 対応するサービス
- サービスとリソースの選択はパフォーマンス目標に基づいて行う
    - Amazon ECS or AWS Fargate（パフォーマンス目標に合わせたリソースの選択と最適化）
- 自動化とスケーリングを利用
    - AWS Auto Scaling（自動スケーリング）、Amazon ECS or AWS Fargate（アプリケーションのデプロイとスケーリング）
- クラウドネイティブテクノロジーを積極的に活用する
    -  Amazon EKS（マネージドKubernetesサービス）、AWS Lambda（サーバーレスアーキテクチャー）

#### 5. コスト最適化
- コスト(予算)に対するパフォーマンス効率を最大化する
- コストを監視し、適切なコントロールを適用
- コストを削減するための機会を探し、利用

##### 5-1. ベストプラクティス
- 使用量と必要性に応じてリソースを選択
- 不要なコストの削減
- コストの効率性を確保するための定期的なレビューの実施

##### 5-2. 対応するサービス
- 使用量と必要性に応じてリソースを選択
    -  Amazon ECS or AWS Fargate（スポットインスタンスやスケーラブルなリソースの利用）、Amazon S3（ストレージクラスの選択）
- 不要なコストを削減
    - AWS Trusted Advisor（リソース使用の最適化とコスト削減のアドバイス）
    - AWS Budgets（コストと使用量の監視）
- コストの効率性を確保するための定期的なレビューの実施
    - AWS Cost Explorer（コスト分析ツール）
    - AWS Cost and Usage Report（詳細なコストレポート）

#### 6. 持続可能性(サステナビリティ)
- クラウドワークロードの影響を計測し、ワークロードの将来の影響をモデル化する
- クラウドワークロードごとに、持続可能性の長期目標を立てる
- トランザクションごとのコンピューティングリソースやストレージリソースの削減する
- ワークロードのサイズを適正化し効率的な設計を実装して、使用率を高く保ち、基盤となるハードウェアのエネルギー効率を最大化する
- マネージドサービスを使用し、リソースを共有することで、リソースの使用率を最大化する
- サービスを使用するために必要なエネルギーやリソースの量を削減する

### W-Aを通じて何をしていけばいいのか
#### 6つの柱の中で何を最重視するか
1. 目標設定
     - 最初に、W-Aを通じて達成したい具体的な目標を設定する
         - 6つの柱のどれを最重視するかを決める際の基準となる
         - 目標設定のために、事前にビジネスインパクトが大きいものは何かを知る必要がある
1. 6つの柱の優先順位付け
      - 6つの柱それぞれについて、目標達成にどの程度貢献するかを評価し、優先順位を付ける
      - 最も重要な柱を明確にし、リソースや時間の配分を決定する
1. 計画策定
1. 実行
1. 評価とフィードバック
     - 一つのプロダクトやプロジェクトだけでなく、横展開していくことが重要
1. 継続的な改善
     - 一度見直した後やW-Aを取り組んでいてもビジネスのスケールに合わせた考慮が必要

#### 組織全体で改善に取り組む
 - 先述の通り、ビジネスの成果を最大化するためにどの柱を最重視するかを決めなければいけない
 - ビジネスと密に紐づくため、決裁権がある人を巻き込んで組織全体で取り組む必要がある

#### AWSを知る
 - 資格の取得
 - AWS Builders
 - 公式ハンズオン
 - 過去のセッションの動画や資料
 - 実際に手を動かす


## 参考資料
 - [AWS Well-Architected Framework](https://docs.aws.amazon.com/ja_jp/wellarchitected/latest/framework/welcome.html)
 - [AWS Skill Builder](https://explore.skillbuilder.aws/learn/course/internal/view/elearning/15581/aws-well-architected-considerations-for-financial-services-japanese-vo-ri-ben-yu-chuiki-tie-ban)

## おわりに
W-Aについて学習しつつ、まとめてみました。1から学習すると、膨大な資料を読み込み理解するのにかなり時間がかかると思います。学習の一助となれば嬉しいです。