リージョン規模の障害が発生した時に Service Health Dashboard から障害情報の通知を受け取る方法

AWS が提供しているサービスヘルスダッシュボード通知ツールを使用して、Service Health Dashboard に記載されるリージョン規模の障害情報を SNS や Slack などを通じて受け取る方法を紹介します。
2021.04.27

困っていた内容

Personal Health Dashboard と CloudWatch Events を連携させてイベント通知設定を行いましたが、アカウント固有のイベントしか受け取れませんでした。 Service Health Dashboard (SHD) に記載されるリージョン規模の障害情報を受け取る方法について教えてください。

どう対応すればいいの?

Personal Health Dashboard と CloudWatch Events の連携ではリージョン規模の障害情報が送信されません。

そのため、AWS が提供しているサービスヘルスダッシュボード通知ツールの利用をご検討ください。

SHD通知ツールではポーリングアプローチが採用されているため、SHD の障害情報が更新されるたびに SNS トピックや Chime、 Slack へイベント情報を送信させることが可能です。

以下にてツールの利用開始方法を紹介します。

① shd-notifier をダウンロードしてインストール

以下のコマンドを実行して shd-notifier をダウンロードおよびインストールしてください。

$ git clone https://github.com/aws/aws-health-tools.git && cd aws-health-tools
$ git filter-branch --subdirectory-filter shd-notifier/ HEAD

② 通知先のエンドポイントや Webhook を設定する

イベント通知先(SNS トピックや Chime、 Slack)のエンドポイントや Webhook を設定します。
私は SNS を通知先としたかったので、SNS トピックを作成し、その ARN をひかえました。

※ Chime や Slack を選択される場合は、以下の URL を参考に Webhook の設定を行なってください。
Amazon Chime Webhook については、AWS ドキュメントのチャットルームへの Webhook の追加を、
Slack Webhook については、Slack ウェブサイトの Slack での Incoming Webhook の利用をご参照ください。

③ CloudFormation スタックをデプロイする

AWS が提供している、CloudFormation スタックをデプロイします。

テンプレートの準備完了が選択され、Amazon S3 URL の欄にて URL が表示されていることを確認したら、次へをクリックします。

SHD-stack-first-page

スタック名を記入し、パラメータを入力していきます。

CloudFormation-parameters

それぞれのパラメータについての解説は以下の通りです。

  • AppName:スタックデプロイ後に作成される、Lambda の関数名のベースとして使われます。

  • Bail: SHD に更新がない場合にメッセージを送信するかどうかを選択できます。
     ・0(15分ごとに「no update」というメッセージを送信します)
     ・1 (SHD の更新が入った時だけメッセージを送信します)

  • ChatClient: 前のステップで設定した通知先を選択します。
     ・chime
     ・slack
     ・sns

  • DEBUG:デバッグ設定の有効化を選択できます。
     ・0(デバッグ設定を無効化)
     ・1(デバッグ設定を有効化)

  • EndpointArray:前のステップで生成した通知先のエンドポイントや Webhook を入力します。
     ・chime:
    ["https://hooks.chime.aws/incomingwebhooks/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXX?token=XXXXXXXXXXXXXXXXXXXX"]
     ・slack:
    ["https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX"]
     ・sns:
    ["arn:aws:sns:us-west-2:XXXXXXXXXXXX:MY_TOPIC_NAME"]

  • LambdaRate:Lambda が新しい SHD イベントや更新の有無をどのくらいの頻度で確認しにいくかを設定します。
     ・rate(1 minute)
     ・rate(5 minutes)
     ・rate(10 minutes)

  • MessagePrefix:それぞれの更新メッセージに対するプレフィックスを設定します。

  • RegionFilter:障害イベント通知を受け取りたいリージョンを入力します。

入力および選択が終わったら、「次へ」を選択します。
オプションの設定は何も変更しない場合は、そのまま「次へ」を選択します。

レビューのページで「AWS CloudFormation によって IAM リソースが作成される場合があることを承認します。」を選択してスタック作成を行います。


スタック作成が完了した後に、作成された 4つの Lambda 関数を確認するといずれも index.py の中身が以下のようになっています。

import os
def lambda_handler(event):
    print("coming soon")

これを次の手順で修正します。

④ deploy.sh ファイルの実行

最初の手順でインストールした aws-health-tools 内の deploy.sh を実行する必要があります。

シンタックス:
シェル名 deploy.sh <前ステップで記載したAppName> <CloudFormation スタックをデプロイしたリージョン> 

私が使用しているシェルは zsh で AppName はデフォルトの名前(Health-Event)のまま、リージョンはオレゴンで立ち上げたので、対象ディレクトリに移動後に以下のようにコマンド実行しました。

$ zsh deploy.sh Health-Event us-west-2


再度 Lambda のコンソールを確認すると、無事に4つの Lambda 関数内にコードが記述されていました。
これで設定は完了となりますので、リージョン規模の障害が発生した際に無事に通知がされるかどうかをご確認いただければと思います。

追記

5/24 の12時頃(PDT)にオレゴンリージョンの EC2 にて API エラーレートが上昇していた旨の通知が SNS トピックで登録していたメールアドレスに入りました。

Gmailで確認できました

Service Health Dashboard のステータス履歴より、5/24 のオレゴンリージョンの EC2 のステータスを確認し、メールで受け取った内容と同一であることを確認しました。

SHDで確認

SHDで確認2

参照