はじめに
GMOコネクトの永田です。
とある案件で、Amazon Q Develoer(旧AWS Chatbot)を経由したAlartのSlack通知でハマったので、当時解析した内容や、解決方法をまとめます。
技術的に凝った内容ではないですが、こんな事例もあったよ、ぐらいで見てもらえると嬉しいです。
まとめ
- コンポーネント毎に動作確認し切り分けしよう
- ログがでるサービスはログも確認しよう
- 今回は作り直したら(再設定したら)解決したので、1から作り直すのも手段としてはあり
発生した事象
上記のような構成で、LambdaからSNS Topicに通知した内容が、Slackまで届かないという事象が発生しました。
試したこと・解析したこと
ということで、早速debugです。
- AWSサービス単体で、それぞれ動作しているか?の検証
- クリーンな環境で1から構築して再試
AWSサービス単体で、それぞれ動作しているか?の検証
AWS Management Consoleでは、サービス単体での動作検証に使える機能があったりします。
そのため、Slackに近い側から順番に検証を進めます。
AWS Chatbot
Console上からテストメッセージを送ることが出来るため、まずはこれを試しました。
これは特に問題なくSlackに通知されました。
念の為、設定済みチャネルから設定名をクリックし、ログ記録レベルが「すべてのイベント」となっていることを確認し、CloudWatch Logsを確認します。
テストメッセージの成功ログも記録されており、ここまでは正常に動いていそうでした。
SNS Topic
次に1つ前に戻って、SNSTopicを確認します。
SubscriptionにChatbot用のHTTPSエンドポイントが登録されているのを確認し、念の為debug用にEMAILも登録しました。
さて、SNSもテストメッセージの発行が出来ますので、Chatbot向けのテストメッセージを投げてみます。
Chatbotが扱えるフォーマットでSNSTopicにメッセージを送る必要があるので、仕様を確認します。
「Minimalist custom notification」を参考に以下でメッセージを送ってみましょう。
{"version": "1.0", "source": "custom", "content": {"title": "test title", "description": "test description"}}
メールには通知は来ましたが、Slackには通知が来ないですね。😇
その後、AWS ChatbotのLogsも確認しましたが、成功もエラーも、何もログが出ていない状態でした。
トラブルシューティングを確認したところ、SNSメッセージのフォーマットがおかしくてChatbotが扱えない形式の場合にはChatbotにエラーログが出るようなのですが、今回のケースでは、全く何もログが出力されていない状態でした。
チャットアプリケーションの CloudWatch Logs に "Event Received is not supported" というエラーメッセージが表示されていないか確認します。"Event Received is not supported" というエラーメッセージが存在する場合、Amazon Q Developer は、トピックに発行された AWS サービスメッセージをサポートしていないことが示唆されます。
クリーンな環境で1から構築して再試
うーん、これはお手上げですね!ってことで、別のAWSアカウントと別SlackWSを用意して同じ資材(CloudFormation)で再構築してみました。
するとどうでしょう、すんなりと動きました😇
その後、問題の発生していた環境から、正常に動作していたSlackWSへの通知も正しく動作したことから、SNSTopicのSubscriptionが何かおかしくなっている(BlackBoxなので詳細不明)のでは?ということで、ChatBot用のSubscriptionを同じ設定で再作成したところ、通知したいSlackへのメッセージ通知も正しく流れるようになりました。
(再掲)まとめ
- コンポーネント毎に動作確認し切り分けしよう
- ログがでるサービスはログも確認しよう
- 今回は作り直したら(再設定したら)解決したので、1から作り直すのも手段としてはあり
弊社では、AWSを使ったサービスの開発や技術支援をはじめ、幅広い支援を行っておりますので、何かありましたらお気軽にお問合せください。