

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

# Amazon SNS フィルターポリシーの制約
<a name="subscription-filter-policy-constraints"></a>

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

## 共通のポリシーの制約
<a name="subscription-filter-policy-common-constraints"></a>

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** 個のフィルターポリシーを持つことができます。

  このポリシー制限によっても、[https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html](https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html) API で Amazon SQS キューサブスクリプションが作成されるのを止めることはできません。ただし、`Subscribe` API コール (または [https://docs.aws.amazon.com/sns/latest/api/API_SetSubscriptionAttributes.html](https://docs.aws.amazon.com/sns/latest/api/API_SetSubscriptionAttributes.html) API コール) でフィルターポリシーをアタッチすると失敗します。

  このクォータを引き上げるには、[[AWS Service Quotas]](https://docs.aws.amazon.com/servicequotas/latest/userguide/intro.html) を使用できます。

## 属性ベースのフィルタリングのポリシー制約
<a name="subscription-filter-policy-attribute-constraints"></a>

属性ベースのフィルタリングがデフォルトのオプションです。[https://docs.aws.amazon.com/sns/latest/api/API_SetSubscriptionAttributes.html#API_SetSubscriptionAttributes_RequestParameters](https://docs.aws.amazon.com/sns/latest/api/API_SetSubscriptionAttributes.html#API_SetSubscriptionAttributes_RequestParameters) は、サブスクリプションでは `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
```

## ペイロードベースのフィルタリングのポリシー制約
<a name="subscription-filter-policy-payload-constraints"></a>

属性ベース (デフォルト) のフィルタリングからペイロードベースのフィルタリングに切り替えるには、サブスクリプションで [https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeprovisionIpamPoolCidr.html](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeprovisionIpamPoolCidr.html) を `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
```

## ワイルドカードパターンの使用に関するガイドライン
<a name="filter-policy-constraints-wildcard"></a>

 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
  }
  ```