SNSからAmazon Q Developer(旧称: AWS Chatbot)へのメッセージ連携でつまずいた話
データ事業本部の梅澤です。
Lambdaから送ったメッセージをSNSとAmazon Q Developer in chat applications(旧称: AWS Chatbot)を経由してSlackに通知をしようとしたところつまずいたので作業の備忘として記載します。
実現したかったこと
システムのエラーを検知するLambdaを定期的に実行して、Lambdaの実行結果でエラーを検知した場合SNS経由でAmazon Q Developerにメッセージを送りAmazon Q DeveloperがSlackに通知するという流れを実現したかった。
つまずいた箇所
LambdaからSNSにメッセージを送ってもSlackにメッセージが投稿されない。
ログを確認したところLambdaからSNSにメッセージが届いていることは確認できましたが、
SNSからのメッセージをAmazon Q Developerが受け取ってくれていないということがわかりました。
Amazon Q DeveloperのログをCloudWatchで確認をしたところ下記のようなメッセージが出ていました。
Event received is not supported (see https://docs.aws.amazon.com/chatbot/latest/adminguide/related-services.html ):
原因と解消方法
原因としては、SNSからAmazon Q Developerに連携する際にメッセージのフォーマットが決まっており、そのフォーマット通りにメッセージを作成しないとAmazon Q Developerが受け取ってくれないというものでした。
下記の形式でメッセージを作成することでAmazon Q Developerがメッセージを受け取ってくれてSlackに通知をすることができました。
import boto3
import os
import json
sns = boto3.client("sns")
def lambda_handler(event, context):
topic = os.environ["sns_topic_arn"]
subject = "test subject"
message: str = json.dumps(
{
※下記の設定項目を決まったフォーマット通りに設定する必要がある。
"version": "1.0",
"source": "custom",
"content": {"title": "test title", "description": "test description"},
}
)
try:
sns.publish(TopicArn=topic, Message=message, Subject=subject)
except Exception as e:
raise e
下記のようにSlack通知が届きました。
今回はversion、source、contentの項目を設定してメッセージを作成しましたが、
他にどのような項目をメッセージに含めることができるかは下記のAWSの公式ページを参照ください。