SNSからAmazon Q Developer(旧称: AWS Chatbot)へのメッセージ連携でつまずいた話

SNSからAmazon Q Developer(旧称: AWS Chatbot)へのメッセージ連携でつまずいた話

Author image

facebook logohatena logotwitter logo
Clock Icon2025.05.09

データ事業本部の梅澤です。
Lambdaから送ったメッセージをSNSとAmazon Q Developer in chat applications(旧称: AWS Chatbot)を経由してSlackに通知をしようとしたところつまずいたので作業の備忘として記載します。

実現したかったこと

システムのエラーを検知するLambdaを定期的に実行して、Lambdaの実行結果でエラーを検知した場合SNS経由でAmazon Q Developerにメッセージを送りAmazon Q DeveloperがSlackに通知するという流れを実現したかった。

blog_2

つまずいた箇所

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通知が届きました。

slack通知


今回はversion、source、contentの項目を設定してメッセージを作成しましたが、
他にどのような項目をメッセージに含めることができるかは下記のAWSの公式ページを参照ください。
https://docs.aws.amazon.com/ja_jp/chatbot/latest/adminguide/custom-notifs.html#create-cns

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.