設定 SQS 事件來源映射的擴展行為 - AWS Lambda

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

設定 SQS 事件來源映射的擴展行為

您可以透過最大並行設定或啟用佈建模式來控制 Amazon SQS 事件來源映射的擴展行為。這些是互斥選項。

根據預設,Lambda 會根據訊息磁碟區自動擴展事件輪詢器。當您啟用佈建模式時,您可以配置最小和最大數量的專用輪詢資源,這些資源仍然準備好處理預期的流量模式。這可讓您以兩種方式最佳化事件來源映射的效能:

  • 標準模式 (預設):Lambda 會自動管理擴展,從少量輪詢器開始,並根據工作負載向上或向下擴展。

  • 佈建模式:您可以設定具有最小和最大限制的專用輪詢資源,使擴展速度加快 3 倍,處理容量提高 16 倍。

針對標準佇列,Lambda 會使用長輪詢來輪詢佇列,直至其處於作用中狀態。當訊息可用時,Lambda 會開始一次處理五個批次,而函數有五個並行調用。如果訊息仍然可用,Lambda 會增加讀取批次的程序數量,每分鐘最多增加 300 個並行調用。事件來源映射可同時處理的調用數目上限為 1,250。當流量較低時,Lambda 會將處理縮減為五個並行調用,並且可以最佳化為最少 2 個並行調用,以減少 Amazon SQS 呼叫和對應的成本。然而,如果啟用並行上限設定,將無法使用此最佳化。

針對 FIFO 佇列,Lambda 會按照其接收的順序傳送訊息到您的函數。當您傳送訊息到 FIFO 佇列時,您可以指定訊息群組 ID。Amazon SQS 可確保相同群組中的訊息依序傳遞至 Lambda。當 Lambda 將訊息讀取到批次時,每個批次可能包含來自多個訊息群組的訊息,但訊息的順序會保持不變。如果您的函數傳回錯誤,函數會先在受影響的訊息上嘗試所有重試,之後 Lambda 才會從相同群組接收到額外訊息。

使用佈建模式時,每個事件輪詢器最多可以處理每秒 1 MB 的輸送量、最多 10 個並行調用,或每秒最多 10 個 Amazon SQS 輪詢 API 呼叫。Lambda 會在您設定的最小值和最大值之間擴展事件輪詢器數量,快速新增高達每分鐘 1,000 個並行,以提供 Amazon SQS 事件的一致、低延遲處理。使用佈建模式會產生額外費用。如需詳細的定價,請參閱 AWS Lambda 定價。每個事件輪詢器對您的 SQS 佇列使用長輪詢,每秒最多 10 個輪詢,這會產生 SQS API 請求成本。如需詳細資訊,請參閱 Amazon SQS 定價。您可以透過這些最小和最大事件輪詢器設定來控制擴展和並行,而不是使用最大並行設定,因為這些選項無法一起使用。

注意

您無法同時使用最大並行設定和佈建模式。啟用佈建模式時,您可以透過事件輪詢器的最小和最大數量來控制 Amazon SQS 事件來源映射的擴展和並行。

設定 Amazon SQS 事件來源的並行上限

您可以使用最大並行設定來控制 SQS 事件來源的擴展行為。請注意,最大並行不能在已啟用佈建模式的情況下使用。並行上限設定限制了 Amazon SQS 事件來源可以調用的函數並行執行個體數。並行上限是事件來源層級的設定。如果您將多個 Amazon SQS 事件來源映射到一個函數,那麼每個事件來源都可以有個別的並行上限設定。您可以使用並行上限來防止一個佇列用完函數的所有預留並行配額,或其餘的帳戶並行配額。對 Amazon SQS 事件來源設定並行無需付費。

重要的是,並行上限和預留並行是兩項獨立的設定。請勿將並行上限設為超過函數的預留並行。若您設定了並行上限,請確定函數的預留並行大於或等於函數上所有 Amazon SQS 事件來源的總並行上限。若小於此上限,Lambda 可能會限流您的訊息。

當您帳戶的並行配額設定為預設值 1,000 時,除非您指定最大並行,否則 Amazon SQS 事件來源映射最高可以擴展至調用數量為該值的函數執行個體。

即便帳戶的預設並行配額增加,Lambda 也可能無法調用數量為新配額的並行函數執行個體。根據預設,對於一個 Amazon SQS 事件來源映射,Lambda 可以擴展為調用最多 1,250 個並行函數執行個體。如果這不足以滿足您的使用案例,請聯絡 AWS 支援,以討論增加您帳戶的 Amazon SQS 事件來源映射並行。

注意

對於 FIFO 佇列,並行調用的上限是訊息群組 ID (messageGroupId) 的數量或最大並行設定 (以較低者為準)。例如,如果您有六個訊息群組 ID,而最大並行設定為 10,則函數最多可以有六個並行調用。

您可以對新的和現有的 Amazon SQS 事件來源映射設定並行上限。

使用 Lambda 主控台設定並行上限
  1. 開啟 Lambda 主控台中的 函數頁面

  2. 選擇函數的名稱。

  3. 函數概觀下,選擇 SQS。這會開啟 Configuration (組態) 索引標籤。

  4. 選取 Amazon SQS 觸發條件,然後選擇編輯

  5. Maximum concurrency (並行上限) 請輸入介於 2 到 1,000 之間的數字。若要關閉並行上限,請將方塊保留空白。

  6. 選擇儲存

使用 AWS Command Line Interface (AWS CLI) 設定並行上限

使用 update-event-source-mapping 命令和 --scaling-config 選項。範例:

aws lambda update-event-source-mapping \ --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \ --scaling-config '{"MaximumConcurrency":5}'

若要關閉並行上限,請為 --scaling-config 輸入空值:

aws lambda update-event-source-mapping \ --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \ --scaling-config "{}"
使用 Lambda API 設定並行上限

使用 CreateEventSourceMappingUpdateEventSourceMapping 動作搭配 ScalingConfig 物件。