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 個のフィルターポリシーを設定できます。

    このポリシー制限により、Amazon SQS キューサブスクリプションが API で作成されるのが停止されることはありません。 Subscribeただし、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_cと の 2 つがありますkey_e

  • key_c には、ネストされたレベルが 34 つのマッチ演算子があり、ネストされたレベルが 23 つのマッチ演算子key_eがあります。

{ "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 }