本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
實作 Lambda 事件篩選的最佳實務
以下設定 Amazon SQS 事件來源的 Lambda 事件篩選
-
熟悉 Lambda 服務的篩選規則語法,特別是 Lambda 用於 Amazon SQS 的篩選規則語法。然後,根據您的業務邏輯設計事件篩選條件。任何事件篩選條件的有效性都取決於其僅在應調用 Lambda 函數時的能力。為此,您必須對篩選規則套用正確的語法,以便規則反映應用程式業務邏輯的需求。
-
在應用程式的業務邏輯需要一系列更複雜的篩選條件的情況下,請確保使用多級篩選。如需詳細資訊和資料物件範例,請參閱《AWS Lambda 開發人員指南》中的多級篩選。
-
透過在 Amazon SQS 請求參數中定義 MessageRetentionPeriod 值,限制您希望 Amazon SQS 保留未處理訊息的時間長度。透過識別處理有效訊息通常需要的時間長度,確保您定義的值適合您應用程式的使用案例。如需詳細資訊,請參閱《Amazon SQS API 參考》中的 SetQueueAttributes。另請參閱本指南的避免不相符的訊息累積一節。
-
在 Lambda 函數無法使用可能導致無法處理有效訊息的情況下,設定 Amazon SQS 無效字母佇列。此額外的 Amazon SQS 佇列有助於避免在無伺服器應用程式架構中建立 snowball 反模式。如需詳細資訊,請參閱本指南的避免 snowball 反模式一節。
-
確保啟用 Lambda 服務上的事件篩選功能。當您最初建立 Lambda 函數時,必須啟用此功能。如需指示,請參閱《AWS Lambda 開發人員指南》中的將篩選條件附接至事件來源映射 (主控台) 或將篩選條件附接至事件來源映射 (AWS CLI)。
避免不相符的訊息累積
如果事件篩選條件設計不當,大量不相關訊息可能會很快淹沒 Lambda 函數的 Amazon SQS 佇列。在這種情況下,Lambda 函數會處理初始訊息批次中的所有訊息,即使其中很少有相關訊息。雖然函數需要更長時間處理額外的不相關訊息,但更多不相關訊息會新增至 Amazon SQS 佇列。這些新訊息會導致函數需要更長時間來處理下一個訊息批次,除非設定了 MessageRetentionPeriod 參數。隨著時間的推移,來源佇列中不相關訊息的數量超過了有效訊息的數量。
MessageRetentionPeriod 參數限制 Amazon SQS 佇列保留未處理訊息的時間長度 (以秒為單位)。例如,如果 MessageRetentionPeriod 值為 3,600 秒,則會在一小時後從佇列中移除所有未處理的訊息。
如需指示,請參閱《Amazon SQS API 參考》中的 SetQueueAttributes。