Design for failureとは何か
Design for failure(障害前提で設計する)とは、「システムはいつか必ず壊れる」という前提で、壊れてもサービス全体が止まりにくく、止まっても早く戻せるように設計する考え方です。
AWS Certified Cloud Practitionerでは、細かな実装手順よりも、なぜその設計が信頼性を高めるのかを理解していることが重要です。AWSの認定ページでも、この試験はAWSクラウドやサービスの基礎的・高レベルな理解を問う試験として案内されています。
まず結論:試験で覚えるべき一文
Design for failure = 障害をゼロにする考え方ではなく、障害が起きても影響を小さくし、自動で復旧しやすくする考え方です。
なぜ「障害前提」が必要なのか
クラウドでも、次のようなことは起こり得ます。
- EC2インスタンスが停止する
- 特定のAvailability Zone(AZ)で問題が起きる
- アプリケーションが一時的に応答しなくなる
- アクセス急増で処理が追いつかなくなる
- 人為的な設定ミスが発生する
そのため、AWSでは信頼性の考え方として、障害を検知し、自動的に切り離し、復旧できる構成が重視されます。
Cloud Practitioner向けに理解する「Design for failure」の中身
1. 単一障害点(SPOF)を作らない
単一障害点(Single Point of Failure)とは、そこが壊れるとシステム全体が止まる箇所です。
たとえば、Webサーバーが1台だけなら、その1台が落ちた時点でサービス停止です。これは障害前提の設計ではありません。
対策としては、複数のサーバーを用意し、ロードバランサーで分散します。
2. 複数AZに分散する
AZ(Availability Zone)は、同一リージョン内にある、互いに分離されたロケーションです。AWSでは、1つのリージョンに複数のAZがあります。
つまり、1つのAZで障害が起きても、別のAZでサービスを継続しやすくなります。
試験では、高可用性を高める代表的な方法が「Multi-AZ」だと押さえておくと得点しやすいです。
3. 自動復旧できるようにする
AWS Well-Architected Frameworkの信頼性設計原則では、Automatically recover from failure(障害から自動復旧する)が重要な考え方として示されています。
これは、監視で異常を見つけたら、人が毎回手作業で直すのではなく、自動で置き換えたり切り替えたりするという考え方です。
たとえば、EC2 Auto Scalingでは異常なインスタンスを置き換える動きができます。Application Load Balancer(ALB)はヘルスチェックで正常なターゲットだけにトラフィックを送る設計が可能です。
4. 疎結合にして、障害の影響を広げない
疎結合とは、システムの部品どうしを強く依存させすぎないことです。
たとえば、注文受付と在庫更新を完全に同時・直結で行うと、在庫側が遅いだけで注文受付も止まりやすくなります。
ここでAmazon SQSのようなキューを使うと、処理をいったんためて後で処理できるため、片方の障害が全体停止に直結しにくくなります。
5. 復旧手順をテストする
設計図の上では強そうに見えても、実際に障害が起きた時に戻せなければ意味がありません。
AWS Well-Architected Frameworkでは、障害を意図的に起こして回復を確認するような、定期的で自動化されたテストの重要性も示されています。
Cloud Practitionerでは深追い不要ですが、「復旧できることを事前に確認する」のもDesign for failureの一部だと理解しておくと整理しやすいです。
試験でよく出るAWSサービスとの結びつき
EC2 Auto Scaling
サーバー数を自動調整し、異常なインスタンスの置き換えにも役立ちます。
→ 障害時の自動復旧につながるサービスです。
Elastic Load Balancing(特にALB)
ヘルスチェックを使って、正常なターゲットにだけリクエストを送れます。
→ 壊れたサーバーに通信を流し続けないための仕組みです。
Amazon RDS Multi-AZ
高可用性とフェイルオーバーのための代表例です。
→ RDS Multi-AZは主に可用性向上のためであり、障害時に別AZ側へ切り替えられるようにする考え方です。
Amazon SQS
システムを疎結合にし、処理の一時的な失敗や混雑を吸収しやすくします。
→ 障害の連鎖を防ぐ設計でよく使われます。
Amazon Route 53
ヘルスチェックやフェイルオーバールーティングにより、正常な宛先へ誘導する設計ができます。
→ 障害時の切り替えを支えるサービスとして理解しておくと便利です。
イメージで理解する簡単な例
EC2を1台だけ置いたWebサイトを考えます。
- 1台構成:そのEC2が落ちるとサイト停止
- 2台以上 + ALB:1台落ちても残りに振り分け可能
- さらにAuto Scaling:異常な1台を新しいインスタンスに置き換えやすい
- さらに複数AZ:1つのAZ障害でも継続しやすい
このように、「壊れないように祈る設計」ではなく、「壊れても続けられる設計」に変えていくのがDesign for failureです。
試験で混同しやすいポイント
- バックアップがあることと、サービスが止まらないことは同じではありません。
- 1台だけ高性能なサーバーより、複数台に分散した構成の方が障害に強い場合があります。
- Multi-AZは、主に高可用性やフェイルオーバーの文脈で理解します。
- 疎結合は、性能だけでなく障害の広がりを抑えるためにも重要です。
試験対策としての覚え方
次の流れで覚えると理解しやすいです。
- 障害は起こる
- だから単一障害点を減らす
- 複数AZ・ロードバランシング・Auto Scalingで継続しやすくする
- SQSなどで疎結合にし、障害の影響範囲を小さくする
- 監視と自動復旧、復旧テストまで含めて考える
このテーマで最重要の一言まとめ
Design for failureとは、障害を避けることだけを目指すのではなく、障害が起きても業務を続けやすい構成にすることです。
AWS Certified Cloud Practitionerでは、これを具体例で結び付けて理解できると強いです。たとえば、ALB + Auto Scaling + Multi-AZ + SQSという組み合わせを見ると、「障害前提の考え方だ」と判断しやすくなります。
参考にしたAWS公式情報
- https://aws.amazon.com/jp/certification/certified-cloud-practitioner/
- https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/design-principles.html
- https://docs.aws.amazon.com/wellarchitected/latest/framework/rel-failmgmt.html
- https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-availability-zones.html
- https://docs.aws.amazon.com/elasticloadbalancing/latest/application/target-group-health-checks.html
- https://docs.aws.amazon.com/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html
- https://docs.aws.amazon.com/autoscaling/ec2/userguide/replace-unhealthy-instance.html
- https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html
- https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html
- https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover-configuring.html
- https://docs.aws.amazon.com/fis/latest/userguide/what-is.html
