はじめに
AWS の運用で
何らかの AWS サービス → SNS → Chatbot → Slack チャンネル
という具合に、通知をSlack チャンネルに流すユースケースは色々あると思いますが、
設定をしていざ上流でトリガーされてもSlackまで流れなくて、SNS - Chatbot 間で止まってしまっている3つのケースがこれまでにありました。
たまに忘れるので備忘録として残しておきます。
SNS トピックが バージニア北部 (us-east-1) になかった
これは
AWS Cost Anomaly Detection → SNSトピック → Chatbot → Slack チャンネル
の流れで構築した際に、いつものように 東京リージョン (ap-northeast-1) で作成していました。
Chatbot が Cost Anomaly Detection と連携するためには、SNS Topic を us-east-1 リージョンで作成する必要がある(※)ようで、そのため以下のエラーが出ていました。グローバルサービスは us-east-1 リージョンでホストされているからでしょうか。
(※公式ドキュメントに記載は見当たりませんでしたが、このときはこれで回避しました)
We were unable to publish to your SNS topic arn:aws:sns:ap-northeast-1:999999999999:xxxxx-slack-notification for the alert subscription xxxxx-immediate. As a result, you won’t be notified of all of the anomalies that have been configured with that alert subscription.
To resolve the issue, check that you’ve entered the correct SNS ARN, or follow the user guide (https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/ad-SNS.html) to ensure the alert is set up correctly to work with AWS Cost Anomaly Detection.
If you have any questions, contact us at https://aws.amazon.com/support.
エラーメッセージやドキュメントにも特に記載はありませんでしたが、試しにバージニア北部リージョンにSNSトピックを作成し直し試したところ流れるようになりました。
Cost Anomaly Detection に限らず、グローバルサービスのものは当てはまるかもしれません。
Chatbot には対応していない AWS サービスだった
RDS の OSアップデート関連の通知を Slack で受け取りたいユースケースがありました。
RDS には、インスタンスやデータベースに発生する特定のイベントを監視し、それらのイベントに対して通知を受け取るための「イベントサブスクリプション」という仕組みがあります。
これには「OS のアップデートが可能になった」というイベントの監視も可能で、このときはそれを使用し、SNS, ChatBot を介して Slack まで通知する機構を構築しました。
しかし、Chatbot が RDS イベントサブスクリプションに対応していませんでした。最初からこれを見とけばよかった。。
そのため EventBridge を介して通知するパターンに変更しました。
OS のアップデートが可能になった場合に発生するイベント RDS-EVENT-0230
を EventBridge で検知し、SNS, ChatBot を介して Slack まで通知する機構を構築しました。
RDS <--(検知)-- EventBridge →SNS → Chatbot → Slack チャンネル
カスタム通知のメッセージフォーマットが不正だった
前述の対応サービス以外(Lambda や Fargate の中などから)でも、カスタム通知として SNS トピック - Chatbot 経由で送れますが、フォーマットに準規していないとエラーとなります。
ただ単に test
と送ろうとしていましたが、フォーマットに準規していなくてエラーとなっていました。
以下のフォーマットである必要があります。
{
"version": "1.0",
"source": "custom",
"content": {
"description": "test"
}
}