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でS3の利用料を節約するためにやって置いた方がよいこと

    AWS

    AWSでS3の利用料を節約するためにやって置いた方がよいこと

    AWSでファイルや画像などを配置する場所として利用する場所はS3ですが…

  2. AWS

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

    今回は、AWSのS3(ストレージサービス)を安全に使うためのポイン…

  3. AWS

    CloudFormationを効果的に使うための6つのルール

    あなたはAWSでEC2を作成する時にAWSコンソールから作っていますか…

  4. AWS

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

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

  5. AWS

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

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

  6. AWS

    AWSでOSの脆弱性対策をする方法

    今回はAWSで作成したEC2インスタンスのOSの脆弱性対策をする方…

最近の記事

  1. AWSコンソール用の安全なユーザーの作成方法

    AWS

    AWSコンソール用の安全なユーザーの作成方法
  2. AWS

    AWSでS3を安全に使うための2つのポイント
  3. AWSでS3の利用料を節約するためにやって置いた方がよいこと

    AWS

    AWSでS3の利用料を節約するためにやって置いた方がよいこと
  4. AWS

    AWSでRDSに安全にデータを保存するための5つのポイント
  5. Amazon Linux2でOSS版tripwireを使って改ざん検知する方法

    AWS

    Amazon Linux2でOSS版tripwireを使って改ざん検知する方法
PAGE TOP