Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
Amazon SQS サブスクリプションで Amazon SNS トピックからの通知を正常に受け取る方法を教えてください。
Amazon Simple Queue Service (Amazon SQS) のサブスクリプションに、Amazon Simple Notification Service (Amazon SNS) トピックからの通知が届きません。
簡単な説明
開始する前に、SNS トピックの Amazon CloudWatch 配信ステータスのログ記録を設定します。詳細については、CloudWatch を使った Amazon SNS トピックのモニタリングをご参照ください。
注:
- しきい値違反に関するアラートについては、Amazon SNS メトリックスの CloudWatch アラームの設定」をご参照ください。
- エンドポイントへのメッセージ配信ステータスについては、AWS マネジメントコンソールを使用した配信ステータスのロギングの設定をご参照ください。
- 配信ステータスを確認するには、CloudWatch からトピックの配信ログにアクセスします。メッセージがキューに配信されたことを確認するには、SNS トピックのNumberOfMessagesPublishedとNumberOfNotificationsDeliveredメトリックスを、Amazon SQS キューのNumberOfMessagesSent CloudWatch メトリックスと比較します。
解決策
サブスクリプションのステータスを確認する
サブスクリプションが確認済み 状態にあり、確認待ちまたは、削除済み状態にないことを確認します。ステータスが確認待ちの場合は、サブスクリプションを確認します。ステータスが 削除済みの場合は、削除したサブスクリプションを再作成します。
サブスクリプションが 確認済み状態になってもメッセージがキューに配信されない理由は次のとおりです。
- SQS キューのアクセスポリシーまたは AWS キー管理サービス (AWS KMS) キーポリシーを設定していません。
- メッセージは除外されます
- メッセージは先入れ先出し (FIFO) トピックで重複排除されます。
- サブスクリプションの RAW メッセージ配信を有効にしました。
- メッセージは配信されましたが、Amazon SQS にメッセージが表示されません。
そうしないと、アクセス拒否エラーが表示されます。
Amazon SNS がメッセージを送信できるように SQS キューのアクセスポリシーを設定します
SQS キューのアクセスポリシーを表示するには、アクセスポリシーを設定します。
SQS キューのアクセスポリシーに SNS トピックのsqs:SendMessageアクションが含まれていない場合は、正しい権限でポリシーを更新してください。権限で Amazon SNS が SQS キューにメッセージを送信することが許可されている必要があります。
SQS キューの SSE と連携するように AWS KMS キーポリシーを設定します。
SQS キューのサーバー側暗号化 (SSE) が有効になっている場合は、次の手順に従ってください。
-
KMS キーがアクティブになっているかを確認します。
-
SQS キューがカスタマーマネージド KMS キーを使用しているかどうかを確認します。「はい」の場合、キーポリシーは SNS トピックへの kms:Decrypt と kms:GenerateDataKey* 権限を付与する必要があります。
注:AWS マネージドキー はクロスアカウントサブスクリプションでは使用できません。
- Amazon SNS サービスが kms:GenerateDataKey アクションと kms:Decrypt API アクションを実行できるようにするには、KMS キーポリシーに次のステートメントを追加します。
{ "Sid": "Allow Amazon SNS to use this key", "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey*" ], "Resource": "*" }
対応する KMS キーポリシーが SNS プリンシパルへのアクセスを許可していない場合、Amazon SNS メッセージ配信ステータスログには KMS.AccessDeniedException エラーが表示されます。
{ "notification": { "messageMD5Sum": "9ecb1c62c0de86ac894c5fd6c447fe1f", "messageId": "f762cbcb-8643-5ef3-95c8-9739fe5f07f6", "topicArn": "arn:aws:sns:::", "timestamp": "2023-06-01 10:41:32.114" }, "delivery": { "deliveryId": "f7a48fb3-1d98-5fe8-ae45-d34165842b39", "destination": "arn:aws:sqs:::", "providerResponse": "{\"ErrorCode\":\"KMS.AccessDeniedException\",\"ErrorMessage\":\"null (Service: AWSKMS; Status Code: 400; Error Code: AccessDeniedException; Request ID: 00df5c7d-1834-4cfb-bc05-e5a7fccfa816; Proxy: null)\",\"sqsRequestId\":\"Unrecoverable\"}", "dwellTimeMs": 59, "statusCode": 400 }, "status": "FAILURE" }
詳細については、Amazon SNS トピックに公開したメッセージが、サーバー側の暗号化が有効になっている Amazon SQS キューに配信されないのはなぜですか?を参照してください。
メッセージは除外されます
CloudWatch コンソールで、Amazon SNS の CloudWatch メトリクスを確認します。NumberOfNotificationsFilteredOut メトリクスをチェックして、メッセージがフィルターで除外されていることを確認します。メッセージがフィルターで除外されている場合は、SQS キューの SNS トピックサブスクリプションフィルターポリシーを確認してください。
SNS トピックサブスクリプションポリシーを確認するには、次の手順を実行します。
-
Amazon SNS コンソールを開きます。
-
ナビゲーションペインで、[サブスクリプション] を選択します。
-
サブスクリプションを選択し、**[編集]**を選択します。
-
[サブスクリプションフィルターポリシー]セクションを展開します。メッセージ属性またはメッセージ本文が SNS サブスクリプションフィルターポリシーの範囲と一致するかどうかを確認します。属性または本文が一致しない場合は、フィルターポリシーを更新してください。
-
[変更を保存] を選択します。
詳細については、Amazon SNS メッセージフィルタリングをご参照ください。
メッセージは重複排除されます
Amazon SNS FIFO トピックと Amazon SQS FIFO キューは、メッセージコンテンツまたは重複排除 ID に基づくメッセージ重複排除をサポートしています。トピックに ContentBasedDeduplication が設定されている場合、システムはメッセージの内容に基づいて MessageDeduplicationId を生成します。ContentBasedDeduplication が設定されていない場合、ピックに公開されるすべてのメッセージには一意の MessageDeduplicationIDが必要です。
**MessageDeduplicationID ** パラメータを使用すると、 5 分間の重複排除間隔内に SNS トピックに公開されたメッセージを重複排除することができます。詳細については、FIFO トピックのメッセージ重複排除をご参照ください。
サブスクリプションの RAW メッセージ配信を有効にしました
未加工のメッセージ配信を使用する場合は、公開された通知で送信するメッセージ属性が 10 個以下であることを確認してください。未加工のメッセージ配信でアクティブ化するメッセージの場合、Amazon SNS はメッセージ属性を SQS メッセージ属性にマッピングします。
次の例は、10 を超えるメッセージ属性を含む配信ステータスログです。
{ "notification": { "messageMD5Sum": "8fa14cdd754f91cc6554c9e71929cce7", "messageId": "22540375-973d-5c6d-8d9e-5f870de34c49", "topicArn": "arn:aws:sns:<region>:<account>:<topic name>", "timestamp": "2023-06-01 13:09:50.947" }, "delivery": { "deliveryId": "9ccf7066-19e5-5bbb-a973-2c94833bc5fc", "destination": "arn:aws:sqs:<region>:<account>:<queue name>", "providerResponse": "{\"ErrorCode\":\"InvalidParameterValue\",\"ErrorMessage\":\"Number of message attributes [13] exceeds the allowed maximum [10].\",\"sqsRequestId\":\"Unrecoverable\"}", "dwellTimeMs": 31, "statusCode": 400 }, "status": "FAILURE" }
メッセージは配信されたが、Amazon SQS にメッセージが表示されない
メッセージがキューに配信されても、次の理由によりポーリングできない場合があります。
- 現在送信中であるか、消費者がメッセージを受信して処理したためにメッセージが見えなくなっている。コンシューマーがメッセージを受信して処理したかどうかを確認するには、「受信したメッセージ数」または表示されないメッセージのおよその数」CloudWatch メトリクスを使用します。
- メッセージに遅延キューを設定したか、メッセージタイマーを使用してメッセージが送信されました。メッセージを確認するには、ApproximateNumberOfMessagesDelayed CloudWatch メトリックスを使用します。
**SNS サブスクリプションは SQS コンソールに表示されません **
SNS トピックアカウントから SQS サブスクリプションを作成した場合、そのサブスクリプションは SQS コンソールに表示されません。これは、SNS アカウントがサブスクリプションを所有しているため、サブスクリプションは SNS コンソールでのみ表示できるためです。
Amazon SQS コンソールから SNS サブスクリプションを作成した場合、SQS トピックアカウントがそのサブスクリプションを所有します。その後、SNS コンソールと SQS コンソールから SNS サブスクリプションを確認できます。
**SQS サブスクリプションが SNS トピックサブスクリプションの下に表示されない **
この問題は、同じ名前の SNS トピックを削除して再作成し、SQS サブスクリプションを削除しない場合に発生します。SQS サブスクリプションは、SNS コンソールのサブスクリプションリストまたは SNS リストサブスクリプション API 呼び出しで確認できます。オペレーションが実行されたタイムスタンプを確認するには、 DeleteTopic と CreateTopic の SNS API 呼び出しに関する AWS CloudTrail イベントを確認してください。
関連情報
クロスアカウントの Amazon SQS エンドポイントを Amazon SNS トピックに設定するにはどうすればよいですか?

関連するコンテンツ
- 質問済み 2年前lg...
- 質問済み 2年前lg...
- 質問済み 4ヶ月前lg...
- AWS公式更新しました 9ヶ月前
- AWS公式更新しました 4ヶ月前
- AWS公式更新しました 2年前