AWS EC2のシステムトラブルのこと
2019年8月23日、AWSで大規模なシステム障害が起きました。これに伴い複数のゲームやWebサイト、サービス等が一時使えなくなり、結構大きな問題になったようです。
今回はこの問題について、むかつくけど何が起きたのかわからん…という人もなるべくわかるように、そこそこ丁寧に書いてみます。
超基本知識
AWS (Amazon Web Service)とは、Amazonが提供するクラウドコンピューティングサービスです。
普通、ゲームなりWebサイトなりを提供するには、自前でサーバーを用意し、この中でサービスを実行、お客さんにはこのサーバーにアクセスしてもらう必要があります。
しかし、サーバーを管理するのは手間もお金もかかります。そこで、AmazonやGoogleのような会社が土地と計算資源を用意し、細心の注意を払って管理、利用者は利用する計算資源の分だけ料金を負担するのが「クラウドコンピューティング」です。
サービスもただのサーバーやDB、ストレージ等に留まらず、機械学習やらk8sやらブロックチェーンやら、利用者がやりたそうなことを実現しやすいように、多種多様なサービスが展開されています。
基本知識
AWSは様々なリージョン(地域)に拠点を持っています。利用者はこのリージョンを決め、その地域のサーバーを利用します。
更にAWSでは、リージョン内に、複数のデータセンター(サーバが置いてあるビル)を持っています。なので、特定のビルで火災や異常が発生した場合でも、他のビルでサーバが生きていれば、サービス自体は提供できるということになります。
で、もう一つ、AZ(アベイラビリティーゾーン)という概念があります。これはデータセンターとイコールではないのですが、何となく近い概念だと思っていただければいいかと思います。詳しくは以下のリンクに書いてあります。
何が起きたのか
どうも東京リージョンのどこかのデータセンターで冷却装置が故障してサーバーが高温になり、深刻なダメージを受けて落ちたようです。これによって特定のAZが一時的に死んでしまい、そこを利用しているサービスが軒並み利用できなくなった、ということみたいですね。
サーバートラブルとしてはごくごく一般的なものですが、数多くのサービスに用いられているAWSで発生したことにより、影響範囲がとても大きくなりました。
どうすればよかったのか① マルチAZ対応
今回は特定のAZが落ちてしまったということで、「マルチAZ対応」を行っていれば障害は防げたという声があります。
マルチAZというのは、複数のAZでサービスを展開することで、特定のAZで問題が生じてもサービス自体は止めないようにする障害対策です。確かにこうすれば、一つのAZで障害が起きても問題無さそうに見えます。
ただ、今回障害の起きたサービスが、必ずしも単一のAZでサービスを提供していたとは限りません。マルチAZでも、以下のようなケースでは障害が起こりえます。
複数AZに処理を分散させているだけで、特定のAZでエラーが起きた場合に異なるAZに接続するような処理がされていない
障害を考慮したキャパシティ確保をしておらず、利用できるAZが減ることでサービスの負荷に耐え切れなくなる
複数のAZに処理を振り分けるELB(Elsatic Load Balancer)自体が障害の起きたAZにある
どうすればよかったのか② サーバーレス
今回主に障害が起きたのはEC2(Elastic Compute Cloud)という、「アマゾンが持っているサーバーを借りて、自分で管理して自分で使う」ようなサービスです。
これに対して、「サーバーレス」という概念で提供されるサービス群があります。
「サーバーレス」と言っても本当にサーバーが無くなるわけではなく、「アマゾンが持っているサーバーをアマゾンが管理し、借りて自分が使う」ような感じです。
アマゾンがサーバールームの管理をするだけでなく、OS、容量、障害対策といった管理までしてくれるため、利用者の手間がだいぶ減ります。
そもそもクラウドサービスが「面倒な管理を一手に引き受けて、利用者には製品開発に注力してもらう」というものなので、あるべき方向に進化した姿ともいえます。
EC2だと、どこのAZのサーバーを利用するか、複数利用するか、どれくらい領域を確保するか、どう振り分けるかは利用者任せです。障害対策も自分たちで行わないといけません。
一方、サーバーレスで開発を行っておけば、利用者が特別な準備を行わなくても、障害が起きたAZを避ける、必ず複数のAZで実行する、といった障害対策は取ってくれます。もちろん、サーバーレスにしたら障害のことを考えなくていいとか、AZ障害の影響を受けないとか、そういうわけではありませんが。
おわり
アマゾン側の問題なのは間違いないんですが、全く想像もつかない障害ではなく、想定としてはこういうこともあるよね…っていう障害です。
今回の件でサーバーレスの強さを改めて実感しました。今後より一層そういう方向に進んでいきそうですね。
あと、こういうことがあると「やはりクラウドサービスは信頼ならん、オンプレだ!」みたいな偉い人もいるのでしょうか?オンプレでやっても同じことが起こる確立が上がるだけのように思いますが。