View a markdown version of this page

Amazon SNS フィルターポリシーの制約 - Amazon Simple Notification Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon SNS フィルターポリシーの制約

Amazon SNS でフィルターポリシーを設定する場合、注意すべき重要なルールがいくつかあります。これらのルールは、システムのパフォーマンスと互換性を維持しながら、フィルターポリシーを効果的に適用するのに役立ちます。

共通のポリシーの制約

Amazon SNS でフィルターポリシーを設定するときは、システムのパフォーマンスと互換性を維持しながら効果的に機能するように、次の重要なルールに従ってください。

  • 文字列の一致 – フィルターポリシーでの文字の一致ルールでは、大文字と小文字が区別して比較されます。

  • 数値マッチング – 数値マッチングでは、値は -109~109 (-10 億~10 億) の範囲で、小数点以下 5 桁の精度で指定できます。

  • フィルターポリシーの複雑さ — 値の組み合わせの合計が 150 を超えてはなりません。組み合わせの合計を計算するには、フィルターポリシーの各配列の値の数を乗算します。

  • キー数の制限 – フィルターポリシーには最大 5 つのキーを含めることができます。

追加の考慮事項
  • フィルターポリシーの JSON には以下のものが含まれます。

    • 引用符で囲まれた文字列

    • 数字

    • 引用符なしのキーワード truefalse、および null

  • Amazon SNS API を使用する場合は、フィルターポリシーの JSON を有効な UTF-8 文字列として渡す必要があります。

  • フィルターポリシーの最大サイズは 256 KB です。

  • デフォルトでは、トピックごとに最大 200 個のフィルターポリシー、 AWS アカウントごとに最大 10,000 個のフィルターポリシーを持つことができます。

    このポリシー制限によっても、Subscribe API で Amazon SQS キューサブスクリプションが作成されるのを止めることはできません。ただし、Subscribe API コール (または SetSubscriptionAttributes API コール) でフィルターポリシーをアタッチすると失敗します。

    このクォータを引き上げるには、[AWS Service Quotas] を使用できます。

属性ベースのフィルタリングのポリシー制約

属性ベースのフィルタリングがデフォルトのオプションです。FilterPolicyScope は、サブスクリプションでは MessageAttributes に設定されています。

  • Amazon SNS は属性ベースのフィルタリングに対して、ネストされたフィルターポリシーを受け入れません。

  • Amazon SNS は、以下のデータ型に該当するメッセージ属性とのみポリシーのプロパティを比較します。

    • String

    • String.Array

    重要

    Amazon SNS で属性ベースのフィルタリングを使用する場合は、特定の特殊文字、特に次の文字を二重エスケープする必要があります。

    • 二重引用符 (")

    • バックスラッシュ (\)

    これらの文字を二重エスケープしないと、フィルターポリシーが公開されたメッセージの属性と一致しなくなり、通知は配信されません。

追加の考慮事項

  • オブジェクトを配列で渡すことはお勧めしません。属性ベースのフィルタリングではサポートされていないネストが原因で、予期しない結果が発生する可能性があるためです。ネストされたポリシーにペイロードベースのフィルタリングを使用する

  • Number は数値の属性値でサポートされています。

  • Amazon SNS は、バイナリデータ型のメッセージ属性を無視します。

複雑さに関するポリシーの例:

次のポリシーの例では、最初のキーには 3 つの一致演算子、2 番目のキーには 1 つの一致演算子、3 番目のキーには 2 つの一致演算子があります。

{ "key_a": ["value_one", "value_two", "value_three"], "key_b": ["value_one"], "key_c": ["value_one", "value_two"] }

組み合わせの合計数は、フィルターポリシーに含まれる各キーの一致演算子の数の積として計算されます。

3(match operators of key_a) x 1(match operators of key_b) x 2(match operators of key_c) = 6

ペイロードベースのフィルタリングのポリシー制約

属性ベース (デフォルト) のフィルタリングからペイロードベースのフィルタリングに切り替えるには、サブスクリプションで FilterPolicyScopeMessageBody に設定する必要があります。

  • Amazon SNS は、ペイロードベースのフィルタリングに対してネストされたフィルターポリシーを受け入れます。

  • ネストされたポリシーの場合、リーフキーのみが 5 個のキー制限の対象としてカウントされます。

キー制限に関するポリシーの例:

次のポリシーの例について説明します。

  • リーフキーには、key_ckey_e の 2 つがあります。

  • key_c にはネストされたレベルが 3 の一致演算子が 4 つあり、key_eにはネストされたレベルが 2 の一致演算子が 3 つがあります。

{ "key_a": { "key_b": { "key_c": ["value_one", "value_two", "value_three", "value_four"] } }, "key_d": { "key_e": ["value_one", "value_two", "value_three"] } }

組み合わせの合計数は、フィルターポリシーに含まれる各キーの一致演算子の数とネストされたレベルの積として計算されます。

4(match operators of key_c) x 3(nested level of key_c) x 3(match operators of key_e) x 2(nested level of key_e) = 72

ワイルドカードパターンの使用に関するガイドライン

Amazon SQS は、ワイルドカードを含むフィルターポリシーを登録する際の保護機能を実装しており、複雑すぎるフィルターポリシーが作成されないようにしています。こうしたフィルターポリシーは、アプリケーションのパフォーマンスに影響を与えるためです。

パターン構造

フィールドには 1 つ以上のパターンが含まれます。次の例は、2 つのパターンを使用するフィールドを示しています。

{ "greeting": [ {"anything-but": {"prefix": "Hello"}}, {"wildcard": "H*"} ] // 2 patterns }

複雑さのルール

  • すべてのフィールドにおけるワイルドカードの複雑さの合計は、100 ポイントを超えることはできません

  • パターンあたりのワイルドカードの最大数は 3 つです

複雑さの計算

  • フィールドの複雑さ = (Sum of pattern points) × (Number of patterns)

  • パターンポイント:

    単一のワイルドカード: 1 ポイント

    複数のワイルドカード: 各 3 ポイント

    anything-but ワイルドカード: 1 ポイント

    複雑さの計算例を次に示します。

    { "filename": [ {"wildcard": "*.txt"}, // 1 point {"wildcard": "log*"} // 1 point ] // Total: (1 + 1) × 2 = 4 points }