Amazon SNS で Message だけを配信する方法を教えてください

2022.12.05

この記事はアノテーション株式会社 AWS Technical Support Advent Calendar 2022 | Advent Calendar 2022 - Qiita 5日目の記事です。

困っていた内容

Amazon SNS から自社ウェブアプリ(HTTPS)にメッセージを配信しています。
アプリ側のリクエストログを見ると次のような JSON 形式を受信しており、送られたメッセージがMessageの値に設定されているようでした。
値だけを配信して欲しいのですが、設定方法を教えてください。

{
  "Type" : "Notification",
  "MessageId" : "22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324",
  "TopicArn" : "arn:aws:sns:ap-northeast-1:123456789012:hato-sns-topic",
  "Subject" : "hato-test-title",
  "Message" : "hato-test-Message",
  "Timestamp" : "2012-05-02T00:54:06.655Z",
  "SignatureVersion" : "1",
  "Signature" : "EXAMPLEw6JRN...",
  "SigningCertURL" : "https://sns.ap-northeast-1.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem",
  "UnsubscribeURL" : "https://sns.ap-northeast-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:ap-northeast-1:123456789012:hato-sns-topic:d6a4f408-4021-4e66-82e3-920cb71bb5fe"
}

どう対応すればいいの?

サブスクリプションの設定で「raw メッセージ配信」を有効にしてください。

Amazon SNS raw メッセージの配信 - Amazon Simple Notification Service

Amazon Kinesis Data Firehose、Amazon SQS、およびHTTP/Sエンドポイントによるメッセージの JSON フォーマット処理を避けるため、Amazon SNS は raw メッセージの配信を許可します。

raw メッセージ配信が無効な状態では、メタデータを含む JSON 形式でメッセージが送信されます。raw メッセージ配信を有効にすると、HTTP POST リクエストの本文には Amazon SNS に送信したメッセージだけが含まれるようになります。デフォルトは無効です。

やってみた

Amazon SNS コンソール の「トピック」からサブスクリプションが含まれるトピックを選択します。

サブスクリプションを選択して「編集」をクリックします。

「raw メッセージ配信の有効化」を選択して「変更の保存」をクリックします。

変更が正常に完了されたことを確認します。

動作確認

「メッセージの発行」を選択します。

テストメッセージを入力して「メッセージの発行」を選択します。

Messageだけが配信されました。

受信した内容

hato-test-Message

参考資料