Amazon SNS 中的篩選政策限制條件 - Amazon Simple Notification Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon SNS 中的篩選政策限制條件

當您在 Amazon SNS 中設定篩選政策時,請注意幾個重要的規則。這些規則有助於確保有效套用篩選政策,同時維持系統效能和相容性。

常見政策限制條件

在 Amazon SNS 中設定篩選政策時,請遵循下列重要規則,以確保它們有效運作,同時維持系統效能和相容性:

  • 字串比對 – 對於篩選政策中的字串比對,比較區分大小寫。

  • 數值比對 – 對於數值比對,值的範圍可以從 -109 到 109 (-10 億到 10 億),在小數點後有五位數的準確性。

  • 篩選政策複雜性 – 篩選政策中值的總組合不得超過 150。若要計算總組合,請乘以篩選政策中每個陣列的值數目。

  • 金鑰數量限制 – 篩選政策最多可有五個金鑰。

其他考量事項
  • 篩選政策的 JSON 可以包含下列項目:

    • 用引號括住的字串

    • 數字

    • 關鍵字 truefalsenull (不含引號)

  • 使用 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 會使用二進位資料類型忽略訊息屬性。

複雜性政策範例:

在下列政策範例中,第一個索引鍵有三個相符運算子,第二個則有一個相符運算子,第三個則有兩個相符運算子。

{ "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 接受以承載為基礎的巢狀篩選政策。

  • 對於巢狀政策,只有分葉索引鍵會計入五個索引鍵限制。

金鑰限制的政策範例:

在下列政策範例中:

  • 有兩種分葉索引鍵: key_ckey_e

  • key_c四個巢狀層級為 3 的配對運算子,key_e三個巢狀層級為 2 的配對運算子。

{ "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 會實作 的保護,以確保不會建立過於複雜的篩選政策,因為這會影響您的應用程式效能。

模式結構

欄位包含一或多個模式。下列範例顯示使用兩種模式的欄位:

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

複雜性規則

  • 所有欄位的總萬用字元複雜性不得超過 100 點

  • 每個模式最多 3 個萬用字元

複雜性計算

  • 欄位複雜性 = (Sum of pattern points) × (Number of patterns)

  • 模式點:

    單一萬用字元:1 點

    多個萬用字元:每個 3 點

    任何項目:1 點

    以下是複雜度計算的範例:

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