翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon SNS フィルターポリシーの制約
Amazon SNS でフィルターポリシーを設定する場合、注意すべき重要なルールがいくつかあります。これらのルールは、システムのパフォーマンスと互換性を維持しながら、フィルターポリシーを効果的に適用するのに役立ちます。
共通のポリシーの制約
Amazon SNS でフィルターポリシーを設定するときは、システムのパフォーマンスと互換性を維持しながら効果的に機能するように、次の重要なルールに従ってください。
-
文字列の一致 – フィルターポリシーでの文字の一致ルールでは、大文字と小文字が区別して比較されます。
-
数値マッチング – 数値マッチングでは、値は -109~109 (-10 億~10 億) の範囲で、小数点以下 5 桁の精度で指定できます。
-
フィルターポリシーの複雑さ — 値の組み合わせの合計が 150 を超えてはなりません。組み合わせの合計を計算するには、フィルターポリシーの各配列の値の数を乗算します。
-
キー数の制限 – フィルターポリシーには最大 5 つのキーを含めることができます。
追加の考慮事項
-
フィルターポリシーの JSON には以下のものが含まれます。
-
引用符で囲まれた文字列
-
数字
-
引用符なしのキーワード
true、false、およびnull
-
-
Amazon SNS API を使用する場合は、フィルターポリシーの JSON を有効な UTF-8 文字列として渡す必要があります。
-
フィルターポリシーの最大サイズは 256 KB です。
-
デフォルトでは、トピックごとに最大 200 個のフィルターポリシー、 AWS アカウントごとに最大 10,000 個のフィルターポリシーを持つことができます。
このポリシー制限によっても、
SubscribeAPI で Amazon SQS キューサブスクリプションが作成されるのを止めることはできません。ただし、SubscribeAPI コール (またはSetSubscriptionAttributesAPI コール) でフィルターポリシーをアタッチすると失敗します。このクォータを引き上げるには、[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
ペイロードベースのフィルタリングのポリシー制約
属性ベース (デフォルト) のフィルタリングからペイロードベースのフィルタリングに切り替えるには、サブスクリプションで FilterPolicyScope を MessageBody に設定する必要があります。
-
Amazon SNS は、ペイロードベースのフィルタリングに対してネストされたフィルターポリシーを受け入れます。
-
ネストされたポリシーの場合、リーフキーのみが 5 個のキー制限の対象としてカウントされます。
キー制限に関するポリシーの例:
次のポリシーの例について説明します。
-
リーフキーには、
key_cとkey_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 }