SAA-C03 · LESSON 2

レジリエントなアーキテクチャの設計26% · 2項目

スケーラブルで疎結合なアーキテクチャと、高可用性・耐障害性のアーキテクチャの設計を学びます。

2.1スケーラブルで疎結合なアーキテクチャを設計する

2.1 Design scalable and loosely coupled architectures.

概念

疎結合は、構成要素の間に SQS(キュー)・SNS(通知)・EventBridge(イベント)を挟み、一方の遅延や障害が他方に波及しないようにする設計です。処理はステートレスにしてセッションを ElastiCache や DynamoDB に置き、Auto Scaling で水平に拡張します。サーバーレス(Lambda・API Gateway・Step Functions)や、コンテナ(ECS・EKS・Fargate)も選択肢です。

仕組み・手順

  1. 同期の呼び出しを、必要に応じて SQS を挟んだ非同期の処理にする
  2. 1 つのイベントを複数の処理に配るときは SNS から複数の SQS へ(ファンアウト)
  3. アプリをステートレスにして、セッションを外部に置く
  4. SQS のキューの長さなどを指標に Auto Scaling する
  5. 複数の手順は Step Functions で制御し、失敗時の再試行を定義する

業務での例

注文を SNS に発行し、在庫・請求・通知の各 SQS にファンアウトして、各処理を独立に拡張する。請求の処理が停止しても注文はキューに残る。

紛らわしい点・試験の注意

ミニクイズ

Q1. EC2 で動く Web アプリを Auto Scaling で水平スケーリングしたい。ログイン状態がサーバーのメモリに保存されているため、台数が変わるとログアウトされてしまう。最も適切な対策はどれか。

  1. セッション情報を ElastiCache や DynamoDB に保存して、サーバーをステートレスにする
  2. 利用者にログイン状態を保存しないよう、ブラウザの設定変更を依頼する
  3. ALB のヘルスチェックを無効にして、Auto Scaling でサーバーが入れ替わらないように固定する
  4. Auto Scaling をやめて、最も大きなインスタンス1台で運用する
答えと解説を見る

正解:A セッション情報を ElastiCache や DynamoDB に保存して、サーバーをステートレスにする

セッションを外部のデータストアに置くと、どのサーバーでも同じセッションを扱えるため、台数を自由に増減できる。スティッキーセッションは一時的な回避策にとどまる。

Q2. ECS で動くコンテナ化された受注アプリのタスク数を、SQS キューに溜まったメッセージの数に応じて増減させたい。最も適切な方法はどれか。

  1. CPU の使用率を目標にしたターゲット追跡で、ECS のタスクを増減する
  2. ECS の容量プロバイダーで、EC2 のインスタンスの数だけを増減する
  3. キューのメッセージ数をもとに、ECS サービスの Auto Scaling を設定する
  4. EventBridge のスケジュールで、平日の昼だけタスク数を増やす
答えと解説を見る

正解:C キューのメッセージ数をもとに、ECS サービスの Auto Scaling を設定する

ECS サービスの Auto Scaling は、CloudWatch のメトリクス(キューの深さなど)に基づいてタスク数を増減できる。 【他の選択肢】CPU の使用率はキューの溜まり具合を反映しないことがある。スケジュールでは実際の流量に追従しない。容量プロバイダーは基盤のインスタンスの調整で、タスク数は増えない。

参考リンク

2.2高可用性・耐障害性のアーキテクチャを設計する

2.2 Design highly available and/or fault-tolerant architectures.

概念

高可用性の基本は複数の AZ への分散(ALB+Auto Scaling グループ、RDS マルチ AZ)です。リージョン規模の災害への対策(DR)には、コストと RTO・RPO に応じて、バックアップと復元 → パイロットライト → ウォームスタンバイ → マルチサイト(アクティブ/アクティブ)の 4 つの戦略があります。Route 53 のヘルスチェックとフェイルオーバーのルーティングで切り替えます。

仕組み・手順

  1. RTO(復旧までの時間)と RPO(失ってよいデータの期間)を決める
  2. Web・アプリは複数 AZ の Auto Scaling グループと ALB で構成する
  3. DB は RDS マルチ AZ(同期レプリケーション・自動フェイルオーバー)にする
  4. DR の戦略を RTO・RPO とコストで選び、別リージョンにレプリケーションする
  5. Route 53 のフェイルオーバーで DR のリージョンに切り替え、定期的に訓練する

業務での例

RTO 1 時間・RPO 15 分の要件に対し、別リージョンに縮小した構成を常時動かすウォームスタンバイと Aurora グローバルデータベースを採用する。

紛らわしい点・試験の注意

ミニクイズ

Q1. Web アプリの可用性を高めるため、単一障害点をなくしたい。最も適切な構成はどれか。

  1. 性能の高いインスタンス1台に、すべての処理を集約する
  2. ALB と Auto Scaling グループを複数の AZ に配置し、データベースはマルチ AZ にする
  3. 2台の EC2 を同じ AZ に置き、片方は停止しておく
  4. データベースを1台の EC2 のインスタンスストアに置き、毎日の業務終了後に手作業で別のサーバーへコピーする
答えと解説を見る

正解:B ALB と Auto Scaling グループを複数の AZ に配置し、データベースはマルチ AZ にする

複数の AZ に分散し、ロードバランサー・自動スケーリング・マルチ AZ の DB で、どこか1か所の障害でもサービスを続けられるようにする。

Q2. RPO と RTO の説明として正しいものはどれか。

  1. RPO は許容できるデータ損失の時間幅、RTO は停止から復旧までに許容できる時間である
  2. RPO は復旧までの時間、RTO は保存できるデータの量である
  3. RPO は利用するリージョンの数、RTO は利用するアベイラビリティーゾーンの数を表す指標である
  4. RPO と RTO は同じ意味で、どちらも費用の上限を表す
答えと解説を見る

正解:A RPO は許容できるデータ損失の時間幅、RTO は停止から復旧までに許容できる時間である

RPO(目標復旧時点)はどこまで遡ってデータを失ってよいか、RTO(目標復旧時間)はどれだけの時間で復旧すべきか。これらで DR の方式を選ぶ。

参考リンク

レッスンは当サイトがAWS 認定の公式ページと公式試験ガイドをもとに独自に作成したもので、試験の内容を保証するものではありません。製品の仕様は変わることがあるため、参考リンク先の最新情報を確認してください。

ご利用上の注意(非公式・独自問題・合格保証なし)