SAA-C03:AWS Certified Solutions Architect - Associate 回復性のあるアーキテクチャの設計 問22
回復性のあるアーキテクチャの設計/スケーラブルで疎結合なアーキテクチャの設計ステートフルな Web アプリを Auto Scaling で水平スケールさせたところ、インスタンスがスケールインするとユーザーのセッション情報が失われる問題が起きています。どのインスタンスがリクエストを受けても一貫して処理できるようにしたい。最も適切な設計はどれですか。
当サイトのオリジナル問題(SAA-C03:AWS Certified Solutions Architect - Associateの出題範囲「回復性のあるアーキテクチャの設計」に対応。実際の試験問題ではありません)
- AAuto Scaling を無効化し、単一の大きなインスタンスで動かす
- Bロードバランサーを削除して、クライアントから各インスタンスへ直接アクセスさせる
- Cセッション情報を各インスタンスのローカルディスクに保存し、スティッキーセッションを強制する
- Dセッション情報を Amazon DynamoDB や Amazon ElastiCache などの外部ストアに保持し、アプリをステートレスにする
正解:D
解説
セッション状態をインスタンス外の DynamoDB や ElastiCache(Redis など)に保持してアプリをステートレスにすると、どのインスタンスがリクエストを受けても同じセッション情報を参照でき、スケールインでインスタンスが削除されてもセッションが失われません。ローカル保存+スティッキーセッションはインスタンス削除時に失われ、単一インスタンス化や LB 削除は可用性・スケーラビリティを損ないます。
下線の用語は 用語集 で意味を確認できます。
選択肢ごとの解説
- A誤り。単一の大きなインスタンスは単一障害点となり、スケーラビリティと可用性の要件に反します。
- B誤り。ロードバランサーの削除は負荷分散と可用性を損ない、問題の解決になりません。
- C誤り。ローカルディスク保存はスケールインでインスタンスが削除されるとセッションが失われ、根本解決になりません。
- D正しい。セッションを外部ストアに持たせてステートレス化すれば、どのインスタンスでも一貫して処理でき、スケールインにも強くなります。