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. Amazon Linux2でOSS版tripwireを使って改ざん検知する方法

    AWS

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

    改ざん検知はPCI DSSなどセキュリティを強化する際には、必ず必要に…

  3. AWS

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

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

  4. PCI DSSの12要件とAWSにおける対応方法

    AWS

    PCI DSSの12要件とAWSにおける対応方法

    今回は、AWSを使ってクレジットカード業界のセキュリティ基準であるPC…

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

    AWS

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

    AWSに最初にアカウントを作るとルートユーザーというものが作られます。…

  6. AWS

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

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

最近の記事

  1. PCI DSSの12要件とAWSにおける対応方法

    AWS

    PCI DSSの12要件とAWSにおける対応方法
  2. AWS

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

    AWSを利用してPCI DSS準拠のシステムを構築する3つのメリット
  4. AWSコンソール用の安全なユーザーの作成方法

    AWS

    AWSコンソール用の安全なユーザーの作成方法
  5. webサイトをhttps化するメリットと注意点

    PCI DSS

    webサイトをhttps化するメリットと注意点
PAGE TOP