AWS SNS 配信ステータスログの設定手順(初心者向け完全ガイド)
公式ドキュメントに書かれているConfiguring message delivery status attributes using the AWS Management Consoleを事細かにまとめる。 AWSのコンソール画面を使って設定します。
🔰 前提条件
この手順を実行する前に、以下の準備が整っている必要があります:
- AWS アカウントにログインできる
- SNS のプラットフォームアプリケーション(例:FCM用)が作成済みである
- IAM ロール作成などの操作権限がある(”AdministratorAccess” 権限があればOK)
✅ 手順1:SNS コンソールへアクセスし、対象アプリを選ぶ
- Sign in to the Amazon SNS console.
- 左のメニューから「Mobile」>「Push notifications」をクリックします。
- 表示された「Platform applications(プラットフォームアプリケーション)」の一覧から、設定対象のアプリをクリックします。
✅ 手順2:Delivery Status Logging タブを開く
- 選択したPlatform applicationsの詳細画面が開いたら、右上のEditボタンをクリックします。
- 「Delivery status logging - optional Info」のアコーディオンを開きます。
- まだ設定されていない場合、”Success sample rate” や “IAM role for successful deliveries” や “IAM role for failed deliveries” の欄は空欄です。
✅ 手順3:CloudWatch Logs に出力するための IAM ロールを作成
- 「Create new roles」ボタンをクリックします。
- IAM ロール作成画面が表示されます。
- デフォルトのロール名(
SNSSuccessFeedback
,SNSFailureFeedback
)のままで OK です。 - IAM ロールに割り当てられるポリシーは以下のようになります:
SNSSuccessFeedback
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:PutMetricFilter",
"logs:PutRetentionPolicy"
],
"Resource": [
"*"
]
}
]
}
SNSFailureFeedback
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:PutMetricFilter",
"logs:PutRetentionPolicy"
],
"Resource": [
"*"
]
}
]
}
- 最後に画面右下の「Create Roles」ボタンをクリックしてロールを作成します。
- これが完了するとPlatform applicationsのEdit画面に戻り”IAM role for successful deliveries” や “IAM role for failed deliveries”は作成したIAMのARNが設定されているはずです。
- うまく反映されていない場合は、IAMからARNをコピーして手動で設定してください。その際は「Use existing service role」のラジオボタンを選択してください。
✅ 手順4:成功ログのサンプリング設定
- SNS の設定画面に戻ると、IAM ロールが選択された状態になっているはずです。
- 「Success sample rate」という項目に
100
と入力します(これですべての成功メッセージがログに記録されます)。 - 画面右下の「Save changes」をクリックして保存します。
✅ 手順5:CloudWatch Logs でログを確認する
- AWS マネジメントコンソールのサービス検索で「CloudWatch」と検索し、CloudWatch を開きます。
- 左のメニューから「ロググループ」をクリックします。
- SNS プラットフォームアプリ用のロググループ(例:
sns/{region}/{accountid}/app/{PlatformType}/{Platform applications Name}
)を探してクリックします。 - 一覧の中に「ログストリーム」が表示されているので、最新のものをクリックします。
- ログイベントが JSON 形式で表示されます。
✅ 実際のログ例と意味
{
"notification": {
"messageMD5Sum": "...",
"messageId": "...",
"timestamp": "2025-05-08 01:36:08.085"
},
"delivery": {
"deliveryId": "...",
"destination": "...",
"providerResponse": "{\"name\": \"projects/...\"}",
"dwellTimeMs": 89,
"token": "...",
"statusCode": 200
},
"status": "SUCCESS"
}
項目名 | 意味 |
---|---|
status |
成功(SUCCESS)か失敗(FAILURE)か |
statusCode |
HTTP レスポンスコード(200 = 成功) |
dwellTimeMs |
配信にかかった時間(ミリ秒) |
destination |
送信先エンドポイント(ARN) |
providerResponse |
Firebase などの応答内容 |