SAP-C02-080 · セクション 09 / タスク 2.4
Reliability要件からArchitectureを選択する
マルチAZ / マルチリージョン / Auto Scaling / 疎結合 / フェイルオーバー / サービスクォータ / 信頼性アーキテクチャ選択
ゴール
信頼性要件から、必要な制御を1つずつ選ぶだけでは十分ではありません。
例えば、
複数AZに配置
+
Auto Scaling
+
フェイルオーバー先を用意していても、
必須依存先が同じ障害範囲にある
切り替え先のデータ状態が要件を満たさない
障害後のキャパシティが不足する
サービスクォータで拡張できないなら、利用者から見たサービス継続は成立しません。
ここでは、これまで整理した信頼性条件を、
信頼性要件
↓
障害範囲
↓
復旧条件
↓
必要な信頼性制御
↓
制御間の不足を確認
↓
候補アーキテクチャ比較
↓
最適な構成へ変換します。
目標は、要件を満たすために、どの信頼性制御をどの組み合わせで採用するか判断できることです。
1. サービス名ではなく要件を分解する
最初に、シナリオから設計条件を抽出します。
| 条件 | 確認すること |
|---|---|
| 保護対象 | 障害時にも継続する必要がある業務 |
| 障害範囲 | インスタンス、AZ、リージョンなど、どこまで耐えるか |
| 可用性条件 | どの程度サービスを利用可能に維持するか |
| RTO | 復旧完了まで許容される時間 |
| RPO | 許容できるデータ損失 |
| 必須依存関係 | 利用できないと保護対象も停止するもの |
| 縮退可能な依存関係 | 停止しても主要業務を継続できるもの |
| 需要変化 | 通常時、ピーク時、障害時に必要な処理能力 |
| 運用条件 | 自動復旧や運用複雑性に関する条件 |
| コスト条件 | 必須要件を満たした候補間で比較する条件 |
ここで、
高可用性
↓
マルチAZのように単語だけで構成を決めません。
複数条件を同時に満たす構成を探します。
2. 障害範囲から配置の候補を決める
最初の大きな分岐は、どこまでの障害に耐える必要があるかです。
AZ障害まで
↓
マルチAZを中心に評価リージョン障害まで
↓
マルチリージョンを評価ただし、
マルチリージョン
>
マルチAZという優劣ではありません。
リージョン障害が要件に含まれないのにマルチリージョン化すれば、
データ同期
構成同期
切り替え制御
運用手順
コストなど、新しい設計条件が増えます。
したがって、要求された障害範囲を満たす候補だけを残すことが最初の判断です。
3. 信頼性制御は「単独効果」ではなく「残る不足」で比較する
各制御は、ある問題を解決しても、別の問題は残します。
そのため、次のように考えます。
| 要件・問題 | 主な制御 | その制御だけでは残る不足 |
|---|---|---|
| AZ障害へ耐える | マルチAZ | データ、依存関係、障害後キャパシティが成立するとは限らない |
| リージョン障害へ耐える | マルチリージョン | データ状態、切り替え、依存関係、復旧先容量が必要 |
| 需要増加へ対応 | Auto Scaling | データ層や依存先の単一障害点は解消しない |
| 異常リソースを置き換える | Auto Scalingによる自己修復 | 障害範囲全体の喪失には別の制御が必要 |
| 障害伝播を抑える | 疎結合 | 即時処理が必要な依存関係には適用できない場合がある |
| 正常な処理先へ切り替える | フェイルオーバー | 切り替え先にデータや容量がなければ復旧しない |
| 障害後の処理能力を確保 | キャパシティ設計 | サービスクォータや実キャパシティの制約を受ける |
| データ損失を抑える | データ保護 | アプリケーションの切り替えや依存関係までは解決しない |
ここで重要なのは、
ある制御を選んだ
↓
それで何が解決したか
↓
まだ何が解決していないか
↓
次に何を組み合わせるかと考えることです。
4. 「業務が最後まで成立するか」で候補を落とす
信頼性アーキテクチャでは、AWSリソースが残っているだけでは不十分です。
確認するのは、
利用者
↓
正常な接続先
↓
アプリケーション
↓
必須依存関係
↓
必要なデータ
↓
必要な処理能力
↓
業務完了までです。
例えばマルチAZ構成でも、
アプリケーション
→ 生存
データ
→ 生存
必須外部依存
→ 障害AZにしかないなら、業務は成立しません。
逆に、停止を許容できる機能であれば、必須経路から外すことで主要業務を継続できる場合があります。
したがって候補アーキテクチャは、保護対象の業務経路全体が障害後も成立するかで評価します。
5. 障害後の状態で再評価する
正常時に成立している構成でも、障害後に条件が変わります。
例えば、
正常時
AZ-A 50%
AZ-B 50%の構成でAZ-Aを失えば、
AZ-B
↓
100%の負荷を処理する必要がある可能性があります。
リージョン切り替えでも同じです。
通常時
リージョンA 100%
リージョンB 待機
障害時
リージョンB 100%となるなら、リージョンBについて、
必要台数まで増やせるか
サービスクォータは十分か
依存先も同じ負荷を処理できるか
必要なデータ状態を利用できるかまで確認します。
つまり、正常時の成立性ではなく、対象障害が発生した後の構成で成立するかを確認します。
6. RTO / RPOも構成全体で判定する
RTOやRPOも、特定の機能だけを見て判定しません。
例えば、
正常な接続先への切り替え
→ 2分
必要データ
→ RPOを満たす
必要キャパシティ確保
→ 20分であれば、利用者から見た復旧時間は2分ではありません。
逆に、
切り替え
→ 高速
キャパシティ
→ 十分
データ
→ RPO未達でも候補から外れます。
したがって、
切り替え
+
データ状態
+
依存関係
+
必要キャパシティがすべて成立して初めて、RTO / RPOを満たす候補として残します。
7. 候補を制御カバレッジで比較する
候補アーキテクチャを比較するときは、次のような表にすると判断しやすくなります。
| 確認軸 | 候補で満たすべき状態 |
|---|---|
| 障害範囲 | 要求された障害を失っても継続できる |
| コンピューティング | 生存側で必要な処理能力を維持できる |
| データ | 必要なデータ状態を利用できる |
| 必須依存関係 | 障害範囲と一緒に失われない |
| 縮退可能な依存関係 | 主要業務を停止させない |
| フェイルオーバー | 正常な処理経路へ移れる |
| サービスクォータ | 障害後の必要量を収容できる |
| 実キャパシティ | 必要なリソースを取得できる構成である |
| RTO / RPO | 業務経路全体として条件内に収まる |
| 運用複雑性 | 必須要件に対して過剰でない |
| コスト | 必須条件を満たした候補間で許容できる |
この表で、
一部だけ強い候補ではなく、
必須条件をすべて満たす候補を残します。
8. シナリオ1:AZ障害と需要急増を同時に扱う
次の要件があります。
注文受付は停止させたくない
リージョン障害は対象外
1つのAZ障害には耐える
大型セールで負荷が4倍になる
配送通知は10分遅延してよい
必要以上の運用複雑性は避ける候補A
2リージョン
+
固定キャパシティ
+
配送通知は同期処理リージョン障害は要件に含まれていません。
さらに、
負荷増加
配送通知障害の伝播
障害時キャパシティが解決していません。
候補B
複数AZ
+
Auto Scaling
+
配送通知を必須同期経路から分離
+
AZ障害後とセール時の必要量まで
サービスクォータを確保こちらは、
障害範囲
需要急増
依存障害
キャパシティ制約を同時に満たします。
したがって候補Bを選択します。
9. シナリオ2:リージョン障害を含む場合
次の条件があります。
注文受付はリージョン障害でも継続
短いRTO
小さいRPO
切り替え後は1リージョンで全負荷を処理
分析処理は遅延可能この場合、
2リージョンにリソースが存在するだけでは候補として不十分です。
評価するのは、
別リージョンだけで注文処理が成立
+
RPOを満たすデータ状態
+
RTO内に正常な処理先へ切り替え
+
障害リージョンへ残る必須依存がない
+
全負荷を処理可能
+
サービスクォータを満たす
+
遅延可能処理が主要業務を止めないことです。
1つでも欠ければ、その候補は除外します。
10. 似た候補は「足りない1条件」で落とす
SAP-C02では、複数の選択肢が一見すると高可用に見えることがあります。
その場合は、
どの候補が優れているかではなく、
どの候補が必須条件を1つ落としているかを探します。
例えば、
| 候補 | 不足 |
|---|---|
| マルチAZ + Auto Scaling | リージョン障害要件を満たせない |
| マルチリージョン + データ保護 | 復旧先キャパシティ不足 |
| マルチリージョン + 十分な容量 | 必須依存がプライマリリージョンに残る |
| 疎結合 + Auto Scaling | 正常な切り替え先がない |
| フェイルオーバー + 十分な容量 | RPOを満たすデータ状態がない |
このように、候補から1つずつ不足条件を消していくと、最適なアーキテクチャを選びやすくなります。
11. よくある誤判断
| 誤判断 | 正しい判断 |
|---|---|
| 高可用性なら必ずマルチリージョン | 要求された障害範囲から決める |
| マルチリージョンなら自動的に信頼性が高い | 切り替え後の業務経路全体を確認する |
| Auto Scalingがあれば障害に耐えられる | 他の単一障害点や依存関係は別に確認する |
| 非同期化すれば常に正しい | 遅延を許容できる依存関係か確認する |
| フェイルオーバー先があれば十分 | 切り替え後のデータ・依存関係・容量を確認する |
| サービスクォータは運用開始後に見る | 障害後の必要量を設計時に確認する |
| 信頼性機能を多く入れるほどよい | 必須条件を満たす必要十分な組み合わせを選ぶ |
| 個々のサービスが高可用なら全体も高可用 | 業務経路全体で判断する |
12. SAP-C02での判断フロー
信頼性要件を抽出
↓
何を保護する?
↓
どの障害範囲まで耐える?
↓
マルチAZ / マルチリージョン
の候補を決める
↓
障害後も必要な
アプリケーションとデータが残る?
↓
必須依存関係も生存する?
↓
停止可能な依存処理を
必須経路から外せる?
↓
正常な処理先へ
フェイルオーバーできる?
↓
障害後の必要負荷を
処理できる?
↓
Auto Scaling
サービスクォータ
実キャパシティ
は成立する?
↓
構成全体として
RTO / RPOを満たす?
↓
満たす候補だけ残す
↓
運用複雑性とコストを比較
↓
最適な信頼性アーキテクチャまとめ
信頼性アーキテクチャは、
マルチAZ
マルチリージョン
Auto Scaling
疎結合
フェイルオーバー
サービスクォータを個別に採用すれば完成するものではありません。
必要なのは、
要求された障害範囲
+
障害後に生存する業務経路
+
必要なデータ状態
+
依存関係の障害分離
+
正常な処理先への切り替え
+
障害後の必要キャパシティ
+
サービスクォータを同時に成立させることです。
判断するときは、
ある制御を入れた
↓
何が解決した?
↓
何がまだ不足している?
↓
どの制御を追加すれば成立する?と進めます。
SAP-C02では、「どのAWSサービスを使うか」ではなく、「この信頼性要件に対して、どの制御の組み合わせなら業務経路全体が生存するか」まで判断します。
主要AWS公式資料
- AWS Certified Solutions Architect - Professional(SAP-C02)試験ガイド
- AWS Well-Architected Framework Reliability Pillar
- REL10-BP01 複数の場所にワークロードをデプロイする
- REL04-BP02 疎結合の依存関係を実装する
- REL07-BP03 ワークロードにより多くのリソースが必要であることを検出した時点でリソースを取得する
- REL11-BP02 正常なリソースにフェイルオーバーする
- REL01-BP06 フェイルオーバーに対応するために、現在のクォータと最大使用量の間に十分なギャップがあることを確認する
理解確認
このページの内容を5問で確認します。
理解確認5問へ →