タダです.
AWS のサービスの状態やメンテナンス情報を知るために Personal Health Dashboard(以下 PHD) を使うのは有効です.PHDは通常 AWS マネジメントコンソール上から確認できますが,今回は PHD の通知を Slack に自動投稿するための設定方法を紹介します.
PHD の通知を受け取る方法
PHD の通知を受け取るには CloudWatch Events を使います.イベントソースパターンでサービス名に Health
,イベントタイプを すべてのイベント
に設定します.ターゲットに SNS を指定します.これで PHD からのすべての通知が SNS で設定したプロトコル(例 Eメール等)利用者に通知できます.
なお,PHD の CloudWatch Events は次の JSON 形式で通知があるため通知内容をカスタマイズしたい場合は別途 Lambda 等を挟む必要があります.この記事ではデフォルトの通知内容で設定を進めます.
{ "version": "0", "id": "7bf73129-1428-4cd3-a780-95db273d1602", "detail-type": "AWS Health Event", "source": "aws.health", "account": "123456789012", "time": "2016-06-05T06:27:57Z", "region": "us-west-2", "resources": [ "i-abcd1111" ], "detail": { "eventArn": "arn:aws:health:us-west-2::event/AWS_EC2_INSTANCE_STORE_DRIVE_PERFORMANCE_DEGRADED_90353408594353980", "service": "EC2", "eventTypeCode": "AWS_EC2_INSTANCE_STORE_DRIVE_PERFORMANCE_DEGRADED", "eventTypeCategory": "issue", "startTime": "Sat, 05 Jun 2016 15:10:09 GMT", "eventDescription": [ { "language": "en_US", "latestDescription": "A description of the event will be provided here" } ], "affectedEntities": [ { "entityValue": "i-abcd1111", "tags": { "stage": "prod", "app": "my-app" } } ] } } { "version": "0", "id": "7bf73129-1428-4cd3-a780-95db273d1602", "detail-type": "AWS Health Abuse Event", "source": "aws.health", "account": "123456789012", "time": "2018-08-01T06:27:57Z", "region": "global", "resources": [ "arn:aws:ec2:us-east-1:123456789012:instance/i-abcd1111", "arn:aws:ec2:us-east-1:123456789012:instance/i-abcd2222" ], "detail": { "eventArn": "arn:aws:health:global::event/AWS_ABUSE_DOS_REPORT_92387492375_4498_2018_08_01_02_33_00", "service": "ABUSE", "eventTypeCode": "AWS_ABUSE_DOS_REPORT", "eventTypeCategory": "issue", "startTime": "Wed, 01 Aug 2018 06:27:57 GMT", "eventDescription": [ { "language": "en_US", "latestDescription": "A description of the event will be provided here" } ], "affectedEntities": [ { "entityValue": "arn:aws:ec2:us-east-1:123456789012:instance/i-abcd1111" }, { "entityValue": "arn:aws:ec2:us-east-1:123456789012:instance/i-abcd2222" } ] } }
AWS Chatbot での Slack の連携設定
もう一歩踏み込んで Slack 通知の設定を行いましょう.AWS では Slack と連携可能な「AWS Chatbot」があります.現在ベータ版のサービスです.なお,AWS Chatbot は Slack の他に Amazon Chime とも連携可能です.
AWS Chatbot では PHD イベント(Health イベント) を受け取ることができるので今回活用します.
Q: AWS Chatbot を使うとどのような通知を受け取ることができますか? AWS Chatbot を使用すると、CloudWatch アラーム、Health イベント、Security Hub の検出結果、Budgets アラート、CloudFormation スタックイベントに関する通知を受け取ることができます。
AWS Chatbot で Slack 連携するメリットは次の2点があると考えます.1つは 上記のように PHD のイベントを受け取るように対応したサービスであることです.2つ目は料金の観点でのメリットです.AWS Chatbot 登場以前は Slack の Eメールアプリを使っていたかと思いますが,Slack の Eメールアプリはスタンダードプランまたはプラスプランじゃないと使えないのですが,AWS Chatbot はプランを気にせず Slack 連携できるのもメリットです.
AWS Chatbot 設定
1. Slack との連携承認
サービス画面から順次設定していきます.まずは Slack との連携承認を行います.
チャットクライアントに Slack を設定して連携先のワークスペースと連携承認を行います.
設定完了したら次に「新しいチャネル設定」をクリックします.
2. チャネル設定
チャネル設定の詳細をさらっていきます.
最初にチャネル名と Slack の通知チャンネルを指定します.
次に,IAM ロールの作成を行います.デフォルト設定で作ります.
IAM ポリシーは次の内容で自動生成されます. CloudWatch に関するものですね.
カスタム管理ポリシー: AWS-Chatbot-NotificationsOnly-Policy-乱数
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "cloudwatch:Describe*", "cloudwatch:Get*", "cloudwatch:List*" ], "Effect": "Allow", "Resource": "*" } ] }
信頼関係ポリシー
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "chatbot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
そして,SNS 通知設定を行います.AWS Chatbot はSNS からの通知との統合可能なので PHD の CloudWatch Events で設定したターゲットの SNS を設定して準備完了です.
指定した SNS トピックのサブスクリプションに AWS Chatbot の設定が入っています.
3. テストイベントによる動作確認
以上で PHD の通知を Slack に通知する設定が完了しました.最後に次のサンプルイベントを SNS 通知してみましょう.SNS のメッセージにサンプルイベントを入れて送信してみます.
{ "version": "0", "id": "7bf73129-1428-4cd3-a780-95db273d1602", "detail-type": "AWS Health Event", "source": "aws.health", "account": "123456789012", "time": "2016-06-05T06:27:57Z", "region": "us-west-2", "resources": [ "i-abcd1111" ], "detail": { "eventArn": "arn:aws:health:us-west-2::event/AWS_EC2_INSTANCE_STORE_DRIVE_PERFORMANCE_DEGRADED_90353408594353980", "service": "EC2", "eventTypeCode": "AWS_EC2_INSTANCE_STORE_DRIVE_PERFORMANCE_DEGRADED", "eventTypeCategory": "issue", "startTime": "Sat, 05 Jun 2016 15:10:09 GMT", "eventDescription": [ { "language": "en_US", "latestDescription": "A description of the event will be provided here" } ], "affectedEntities": [ { "entityValue": "i-abcd1111", "tags": { "stage": "prod", "app": "my-app" } } ] } }
Slack の指定したチャンネルにポストされました!アカウント番号,リージョンのほかに影響あるリソースもカスタマイズ不要で自動でいい感じに通知されています.
まとめ
PHD の通知を AWS Chatbot で Slack 連携してみました.AWS Chatbot のおかげでノーコーディングで Slack への通知ができました.Slack を使っていて AWS Chatbot で対応しているイベントを拾いたい場合,運用中のシステムに関連するイベントは感知しやすくすると良いと感じました.AWS Chatbot を初めて使いましたが積極的に使いたいです.