AWS

AWSで大規模障害発生時に被害を最小限にする方法

先日、AWSで大規模障害が発生し、多くのサービスが影響を受けました。このようなトラブルが発生した場合に、被害を最小限にするため、事前にどのような対策がとれるかについてご説明します。

アベイラビリティゾーン(AZ)とは

AWSで大規模障害発生時に被害を最小限にする方法

AWSにはアベイラビリティゾーン(AZ)という概念があり、簡単に言うと、データセンターのようなものです。東京リージョンの中には3つのAZが現在利用可能です。それぞれのAZは自然災害やデータセンター単位の障害などビジネスに影響を与えるリスクを最小にするよう、地理的にも十分離れた場所に配置されています。AZは完全に独立しており、お互いに影響を与えないようになっており、複数のAZにサーバーを分散して配置することにより耐障害性を高めることができます。

AWSで大規模障害発生時に被害を最小限にする方法

現在は東京リージョンには3つのAZが利用可能になっていますが、最後にできたap-northeast-1dが追加されたのが2018年1月で比較的新しいため、それ以前に構築されたシステムでは2つしか使用していないという場合もあるかと思います。

ですが、もし2つのAZしか使用していなければ、1つでトラブル発生した場合には半分のサーバが停止してしまいますが、3つを使用することで、影響を1/3に減らすことができます。

AWSの大規模障害障害について

先日のAWSの大規模障害はAWSの公式のHPによるとトラブルは東京リージョンに3つあるAZのうちの1つでのみ発生したようです。

東京リージョン (AP-NORTHEAST-1) で発生した Amazon EC2 と Amazon EBS の事象概要

ですので、複数のAZにサーバを分散することで影響を小さくすることができます。

Auto Scaling Groupを使用したマルチAZ構成

AWSにはAuto Scaling Groupという複数のAZに分散してサーバを自動的に分散して配置できる仕組みがあります。これを使用して下記のようにロードバランサー配下のサーバを複数AZに分散して配置することができます。AWSで大規模障害発生時に被害を最小限にする方法VPC内にAZごとにサブネットを作成します。次にAuto Scaling Groupを作成する際に、その3つのサブネットを指定してEC2インスタンスが起動するように設定を行います。

Auto Scaling Groupを使用した冗長化の注意点

上記のような3つのAZを使用するように設定した場合の注意点として、もし先日のAWSの障害のように1つのAZが停止してしまった場合に、Auto Scaling GroupはEC2インスタンスが正常な状態ではないことを検知し、インスタンスを破棄し、新しいものを起動しようとします。ただ、Auto Scalingの機能では、3つのAZに均等にインスタンス数を分散させようとするため、またトラブルがあったAZで起動しようとしてしまい、起動しないという事象が発生する可能性があります。その場合には、問題のあるAZを使用しないようにAuto Scaling Groupの設定変更が必要になってしまいます。

RDSを使用したマルチAZ構成

データベースは、データベースのマネージドサービスであるRDSを使用した場合には、簡単にマルチAZの構成が作成でき、おすすめです。もしRDSを使用せずにMySQLなどのデータベースをEC2インスタンスに自分で作成する場合には、自分で複数AZのサブネットにEC2を配置したり障害発生時の切り替えなど自分で考えなければいけませんが、RDSを使用した場合には、そういった考慮をする必要がありません。ですので、AWSを使用する場合はできる限りマネージドサービスを使用した方が良いと思います。

AWSで大規模障害発生時に被害を最小限にする方法

RDSを使用した場合はRDSのインスタンス作成時に「別ゾーンにレプリカを作成します」というオプションを有効にするだけで別のAZにスレーブを作成することができ、AZの障害発生時には自動的に切り替わりが起きます。

マルチAZ構成にした場合の注意点

AWSで大規模障害発生時に被害を最小限にする方法

マルチAZ構成にした場合の注意点として、応答速度の低下があります。AZ間はpingで数ミリ秒くらい離れていますので、同一AZ内の通信に比べてAZをまたいだ場合には遅延が発生します。ですので、単一AZのみを使用した場合のリスクを十分把握した上で、応答速度を改善するために単一のAZを使用するという判断はすることもあり得ると思います。ただその場合には、先日のようなAZの障害により数時間の停止が発生する可能性があることを理解して選択してください。

関連記事

  1. AWSで安全なネットワーク設計を行うポイント

    AWS

    AWSで安全なネットワーク設計を行うポイント

    今回は、AWSにおいて安全なネットワーク設計を行いポイントについて…

  2. AWS

    AWSでコンプライアンスのための監査ログを取得する方法

    PCI DSSやIT内部統制などのコンプライアンスの観点でAWS上で監…

  3. AWS

    CloudFrontでLambda@Edgeを本番運用してわかった注意点

    CloudFrontでLambda@Edgeを一年間運用しまして、気づ…

  4. AWS

    AWSでLinuxサーバ上のログを自動的にS3に保存する方法

    AWSでLinuxサーバ上のApacheのアクセスログやアプリケーショ…

  5. AWS

    AWSでRDSに安全にデータを保存するための5つのポイント

    今回はAWSのRDSにデータを安全に保存する方法についてお話したい…

  6. AWS

    AWSでEC2インスタンスを安全に使うための3つの注意点

    今回はAWSでEC2インスタンスを起動した際に、安全に使うために行った…

最近の記事

  1. AWS

    AWSでS3を安全に使うための2つのポイント
  2. AWS

    AWSでOSの脆弱性対策をする方法
  3. AWSで安全なネットワーク設計を行うポイント

    AWS

    AWSで安全なネットワーク設計を行うポイント
  4. AWS

    CloudFrontでLambda@Edgeを本番運用してわかった注意点
  5. PCI DSS準拠するためにAWSのセキュリティグループを使うためのポイント

    AWS

    PCI DSS準拠するためにAWSのセキュリティグループを使うためのポイント
PAGE TOP