クラウドサービスへの依存が招く脅威
多くの企業が利用するクラウドサービスとしてAWS、GCP、Azureが挙げられます。それらは極めて高い可用性ではありますが障害が発生する可能性はゼロではありません。昨年も各クラウドサービスの障害が発生してITの現場は阿鼻叫喚の地獄絵図となりました…
そしてこれから更にクラウドへの依存度は高まり、障害の影響も大きくなっていきます。
晩酌時に起きた悲劇
2020年12月某日、日本時間の21時頃にGoogleのサービスにて障害が発生し、ほとんどのサービスが利用できない状態となりました。私も仕事上Googleのサービスと密に連携するシステムを担当しているため対岸の火事では無いのですが、なんとそれに気づいたのは子供が寝た後に呑気に晩酌していた22時頃です。スマホでスマートニュースを見ていたらGoogleがなんか大変な事になっていると気づき冷や汗だくだくでした…
検知はタイムリーが鉄則
今回の失敗は、タイムリーにクラウドの障害を検知できる仕組みを構築していなかった点にあります。
クラウドを使うという選択肢をとったのであれば、自社のサービスはもちろんのことクラウドの障害も検知しなければいけません。
という反省をもとに、MicrosoftPowerautomate(以下MSPA)を利用してクラウドサービスの障害を検知する仕組みを構築しました
作ったものと構成
・MSPAを利用する
・クラウドサービス側が提供しているRSSフィードを検知する
・RSSのアップデートを検知してMSPAを起動
・Slackに通知
MSPAフロー
MSPAのフローはこんな感じです。トリガにはRSSフィードを設定し検知した内容をSlackの指定したチャンネルに送っています。
特に注目していただきたいのが赤枠の部分で、詳細は次章で説明します。
障害検知にはRSSフィードを利用
ほとんどのクラウドサービスは、自社サービスのステータスダッシュボード画面を用意しています。主要クラウドサービスのステータスダッシュボードは以下です。
Google Workspace ステータス ダッシュボード
https://www.google.com/appsstatus#hl=ja&v=status
Google Cloud Status Dashboard
https://status.cloud.google.com/
AWS Service Health Dashboard
https://status.aws.amazon.com/
Azure の状態
https://status.azure.com/ja-jp/status
そして、それぞれのサービスで漏れなくRSSフィードのURLが用意されています。これは例えば何か障害が発生してサービスステータスに更新があった場合、こちらのRSSフィードが更新される仕組みとなっています。したがってMSPAのRSSフィードのURLに箇所にこれらのURLを指定しておくことでクラウド障害をリアルタイムで検知することができます。
例えばGoogleではページ最下部のここです。ここをクリックした後にジャンプするページのURLがRSSフィードのURLになります
ちなみにAWSでは各サービス/リージョン毎にRSSが用意されています…さすがクラウドナンバーワン企業ですね…
実際の通知
初めに述べたGoogleの障害収束後、実際に通知されたGCPのステータスアップデートです。この時RSSフィードが更新されたのは23日の0時49分でしたがMSPAを介して通知が届いたのは0時51分(UTC)だったのでほぼリアルタイムにクラウドの状況を検知できた(検知できる)といえます。
(諸事情によりメール画面のスクリーンショットですが、サンプルフローの通りに作ればSlackに通知されます)
まとめ
クラウドの高可用性の上に胡坐をかかず、こういった仕組みを利用して障害検知することが大事だと思いました。でもできれば(いい意味で)使わないフローになって欲しいと願うばかりです。。。
最後に
「えっ?でもMSPAのサービスも一緒に落ちたら通知届かないよね?」と思ったあなた。素晴らしい着眼点ですね。そんなときはZaiperでも同じフローを組んでおきましょう。なんちゃって多重構成です(笑)