##概要
AWSのPersonal Health DashboardをトリガーとしてSlackへ通知を促す構成を考える。
方法は以下のパターン
トリガー → Amazon eventbridge → AWS SNS → AWS Chatbot → Slack
AWS SNSの代わりにLambdaを採用することもでき、
柔軟なメッセージのカスタマイズができるが料金がすこし高くなる想定
料金
・EventBridge
https://aws.amazon.com/jp/eventbridge/pricing/
AWS のサービスによって発行されたすべての状態変更イベントは無料
・SNS
毎月最初の 100 万 Amazon SNS リクエストは無料
この上限を超えた後の料金は 100 万 リクエストごとに 0.50USD
https://aws.amazon.com/jp/sns/pricing/
・Chatbot
https://aws.amazon.com/jp/chatbot/pricing/
無料
##構築方法
リージョンをバージニア北部に選択する
Amazon SNSより「トピックの作成」をクリック
タイプをスタンダードに選択
名前と表示名を適当なものに
暗号化の有効化にチェックを付ける
あとの設定項目はデフォルトで作成
Amazon EventBridgeより「ルールを作成」をクリック
名前を適当なものに
イベントパターンにチェックを付け
サービスごとの事前定義パターンにチェック、サービスプロバイダーにAWS、サービス名にhealth、イベントタイプにすべてのイベントを選択
ターゲットに作成したSNSを選択し
機能に作成したSNSの名前を選択する
あとの設定項目はデフォルトで作成
AWS Chatbotより「新しいクライアントを設定」をクリック
Slackを選択し、認証ページより認証する
設定済みクライアントより「Slack ワークスペース: 【クライアント名】」をクリックし新しいチャネルを作成をクリックする
設定名を適当なものに
Slack チャネルより通知したいチャネル名を選択
アクセス許可にてロール名を入力する
Channelガードレールのポリシー名には「CloudWatchReadOnlyAccess」ポリシーを選択する
通知 - オプションのSNS トピックより作成したSNSがあるリージョンを選択し、トピックより作成したSNSを選択する
あとの設定項目はデフォルトで作成
##説明
リージョンをバージニア北部に選択する
https://docs.aws.amazon.com/ja_jp/health/latest/ug/cloudwatch-events-health.html
グローバルサービスからのイベント(Statusが-のもの)を受信するためには、
米国東部 (バージニア北部) リージョンのルールを作成する必要がある。
東京リージョンなどのイベントを受信したい場合は、東京リージョンにEventBridgeとSNSのみ追加で作成する。
タイプをスタンダードに選択
FIFOはSQSのみサポートされているのでFIFOにしようとすると下記のようなエラーが出る
FIFO SNS Topics are not supported (arn:aws:sns:ap-northeast-1:414400812947:test.fifo)
暗号化の有効化にチェックを付ける
とりあえず有効化
Channelガードレールのポリシー名には「CloudWatchReadOnlyAccess」ポリシーを選択する
https://aws.amazon.com/jp/about-aws/whats-new/2021/11/aws-chatbot-management-resources-slack/
ガードレールポリシーはSlack チャネルから直接 AWS リソースを管理する際のアクセス許可のための機能
通知しかしないのであれば特に権限を持たせる必要なしで適当につけているだけ
##テスト
Personal Health Dashboardに通知を出すことはできないため、気長に通知が来るのを確認するしかないです。。。
ですが上記構築方法に従って実装すれば問題ありません!!