

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

# 實作 Lambda 事件篩選的最佳實務
<a name="best-practices-event-filtering"></a>

以下設定 [Amazon SQS 事件來源的 Lambda 事件篩選](https://aws.amazon.com//about-aws/whats-new/2021/11/aws-lambda-event-filtering-amazon-sqs-dynamodb-kinesis-sources/)的最佳實務：
+ 熟悉 [Lambda 服務的篩選規則語法](https://docs.aws.amazon.com//lambda/latest/dg/invocation-eventfiltering.html#filtering-syntax)，特別是 [Lambda 用於 Amazon SQS 的篩選規則語法](https://docs.aws.amazon.com//lambda/latest/dg/invocation-eventfiltering.html#filtering-sqs)。然後，根據您的業務邏輯設計事件篩選條件。任何事件篩選條件的有效性都取決於其僅在應調用 Lambda 函數時的能力。為此，您必須對篩選規則套用正確的語法，以便規則反映應用程式業務邏輯的需求。
+ 在應用程式的業務邏輯需要一系列更複雜的篩選條件的情況下，請確保使用多級篩選。如需詳細資訊和資料物件範例，請參閱《AWS Lambda 開發人員指南》**中的[多級篩選](https://docs.aws.amazon.com//lambda/latest/dg/invocation-eventfiltering.html#multi-level-filtering)。
+ 透過在 Amazon SQS 請求參數中定義 **MessageRetentionPeriod** 值，限制您希望 Amazon SQS 保留未處理訊息的時間長度。透過識別處理有效訊息通常需要的時間長度，確保您定義的值適合您應用程式的使用案例。如需詳細資訊，請參閱《Amazon SQS API 參考》**中的 [SetQueueAttributes](https://docs.aws.amazon.com//AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html)。另請參閱本指南的[避免不相符的訊息累積](#avoiding-non-matching-message-accumulation)一節。
+ 在 Lambda 函數無法使用可能導致無法處理有效訊息的情況下，設定 Amazon SQS 無效字母佇列。此額外的 Amazon SQS 佇列有助於避免在無伺服器應用程式架構中建立 snowball 反模式。如需詳細資訊，請參閱本指南的[避免 snowball 反模式](best-practices-partial-batch-responses.md#snowball-anti-patterns)一節。
+ 確保啟用 Lambda 服務上的事件篩選功能。當您最初建立 Lambda 函數時，必須啟用此功能。如需指示，請參閱《AWS Lambda 開發人員指南》**中的[將篩選條件附接至事件來源映射 (主控台)](https://docs.aws.amazon.com//lambda/latest/dg/invocation-eventfiltering.html#filtering-console) 或[將篩選條件附接至事件來源映射 (AWS CLI)](https://docs.aws.amazon.com//lambda/latest/dg/invocation-eventfiltering.html#filtering-cli)。

## 避免不相符的訊息累積
<a name="avoiding-non-matching-message-accumulation"></a>

如果事件篩選條件設計不當，大量不相關訊息可能會很快淹沒 Lambda 函數的 Amazon SQS 佇列。在這種情況下，Lambda 函數會處理初始訊息批次中的所有訊息，即使其中很少有相關訊息。雖然函數需要更長時間處理額外的不相關訊息，但更多不相關訊息會新增至 Amazon SQS 佇列。這些新訊息會導致函數需要更長時間來處理下一個訊息批次，除非設定了 **MessageRetentionPeriod** 參數。隨著時間的推移，來源佇列中不相關訊息的數量超過了有效訊息的數量。

**MessageRetentionPeriod** 參數限制 Amazon SQS 佇列保留未處理訊息的時間長度 (以秒為單位)。例如，如果 **MessageRetentionPeriod** 值為 3,600 秒，則會在一小時後從佇列中移除所有未處理的訊息。

如需指示，請參閱《Amazon SQS API 參考》**中的 [SetQueueAttributes](https://docs.aws.amazon.com//AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html)。