Amazon Simple Notification Service (Amazon SNS) のサブスクリプションフィルタポリシーが機能しません。
解決策
**重要:**サブスクリプションフィルターポリシーへの追加または変更が完全に有効になるまでには最大で 15 分かかります。
サブスクリプションがメッセージを受け付けるのは次の条件下です。
- フィルタポリシースコープを MessageAttributes に設定すると、フィルターポリシー内の各プロパティ名はメッセージ属性名と一致します。フィルタポリシー内の一致するプロパティ名ごとに、少なくとも 1 つのプロパティ値がメッセージ属性値と一致します。
- フィルターポリシースコープを MessageBody に設定すると、フィルターポリシー内の各プロパティ名はメッセージ本文のプロパティ名と一致します。フィルタポリシー内の一致するプロパティ名ごとに、少なくとも 1 つのプロパティ値がメッセージ本文のプロパティ値と一致します。
フィルターポリシーがメッセージが拒否したのは属性が含まれなかったからかどうかを確認してください。属性ベースのメッセージフィルタリングについては、Amazon SNS の Amazon CloudWatch メトリクスのNotificationsFilteredout-NoMessageAttributes メトリックスを確認してください。
詳細については、「Amazon SNS メッセージフィルタリング」をご参照ください。
属性付きのメッセージを送信する方法のチュートリアルについては、「AWS マネジメントコンソールを使用して Amazon SNS トピックにメッセージを発行するには」をご参照ください。
ペイロードベースのフィルタリングを使用してメッセージを送信する方法のチュートリアルについては、「プラットフォーム固有のペイロードを使用した公開」をご参照ください。
Amazon SNS トピックに公開されたメッセージが、必要なフィルタポリシーの制約を満たしているかを確認します
制約の詳細なリストについては、「フィルターポリシーの制約」をご参照ください。
サブスクリプションフィルターポリシーが、属性ベースのフィルタリングまたはペイロードベースのフィルタリングに基づいて正しく構成されているかを確認します
メッセージに MessageAttributes フィールドが含まれている場合、FilterPolicy を設定するすべてのトピックサブスクリプションは、メッセージを選別して承認するか、拒否することができます。そうするためには、サブスクリプションの FilterPolicyScope を MessageAttributes に設定します。
同様に、FilterPolicy を含むすべてのトピックサブスクリプションは、サブスクリプションで FilterPolicyScope を MessageBody に設定すると、メッセージを選別しながらの承認、もしくは拒否が可能です。
適切なフィルターポリシー形式の詳細については、次のドキュメントをご参照ください。
属性の不一致または形式が正しくないためにフィルタポリシーで拒否されたメッセージを確認するには、Amazon SNS の次の CloudWatch メトリクスを確認してください。
- NumberOfNotificationsFilteredOut
- NumberOfNotificationsFilteredOut-InvalidAttributes
- NumberOfNotificationsFilteredOut-InvalidMessageBody
- NumberOfNotificationsFilteredOut-MessageBody
注:
- NumberOfNotificationsFilteredOut メトリックには、メッセージ属性がポリシー属性と一致しなかったためにフィルターポリシーで拒否されたメッセージが表示されます。
- NumberOfNotificationsFilteredOut-InvalidAttributes メトリックには、メッセージ属性が有効な形式ではなかったためにフィルターポリシーによって拒否されたメッセージが表示されます。
- NumberOfNotificationsFilteredOut-MessageBody メトリックは、ペイロードベースのフィルタリングのサブスクリプションフィルタポリシーによって拒否されたメッセージの数を決定します。
- NumberOfNotificationsFilteredOut-InvalidMessageBody は、メッセージ本文がフィルタリングに有効でないためにサブスクリプションフィルターポリシーによって拒否されたメッセージの数を示しています。たとえば、この場合は、 JSON メッセージ本文が有効ではなかったために拒否されました。