建立和設定 Amazon SQS 事件來源映射 - AWS Lambda

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

建立和設定 Amazon SQS 事件來源映射

若要使用 Lambda 處理 Amazon SQS 訊息,請使用適當的設定來設定佇列,然後建立 Lambda 事件來源對應。

配置要搭配 Lambda 使用的佇列

如果您還沒有現有的 Amazon SQS 佇列,請建立一個佇列作為 Lambda 函數的事件來源。然後設定佇列,讓 Lambda 函數有足夠的時間來處理每個批次的事件。

若要讓您的功能有時間處理每批記錄,請將來源佇列的可見性逾時設定至少為函數組態逾時的六倍。如果您的函數在處理上一個批次時被限制,則 Lambda 可以使用額外的時間來重試。

根據預設,如果 Lambda 在處理批次時發生錯誤,則該批次中的所有訊息都會返回佇列。在可見性逾時之後,Lambda 會再次看到訊息。您可以將事件來源對應設定為使用部分批次回應,僅將失敗的訊息傳回佇列。此外,如果您的函數無法多次處理訊息,Amazon SQS 可以將其傳送到無字母佇列。我們建議您將maxReceiveCount來源佇列的重新磁碟原則設定為至少 5。這可讓 Lambda 在將失敗訊息直接傳送至無效字母佇列之前,有幾次重試的機會。

設定 Lambda 執行角色權限

AWSLambdaSQSQueueExecutionRole AWS 管政策包括 Lambda 需要從您的 Amazon SQS 佇列讀取的許可。您可以將此受管理的原則新增至函數的執行角色

或者,如果您使用的是加密佇列,也需要將下列許可新增至您的執行角色:

建立 SQS 事件來源對映

建立事件來源映射,指示 Lambda 從您的佇列傳送項目至 Lambda 函數。您可以建立多個事件來源映射,使用單一函數處理來自多個佇列的項目。當 Lambda 調用目標函數時,事件可能包含多個項目,最多為可設定的最大批次大小

若要將函數設定為從 Amazon SQS 讀取,請將 AWSLambdaSQSQueueExecutionRole AWS 受管政策附加到執行角色。然後,使用下列步驟從主控台建立 SQS 事件來源對應。

若要新增權限並建立觸發器
  1. 開啟 Lambda 主控台中的 函數頁面

  2. 選擇函數的名稱。

  3. 依序選擇 Configuration (組態) 索引標籤和 Permissions (許可)。

  4. 在 [角色名稱] 下,選擇指向您的執行角色的連結。此連結會在 IAM 主控台中開啟角色。

    連結至執行角色
  5. 選擇新增許可,然後選擇連接政策

    在 IAM 主控台中附加政策
  6. 在搜尋欄位中輸入 AWSLambdaSQSQueueExecutionRole。將此原則新增至您的執行角色。這是一項 AWS 受管政策,其中包含函數需要從 Amazon SQS 佇列讀取的許可。如需有關此原則的詳細資訊,請參閱 AWSLambdaSQSQueueExecutionRoleAWS 管理的原則參考中的。

  7. 返回 Lambda 主控台中的函數。在 函式概觀 下,選擇 新增觸發條件

    Lambda 主控台的函數概觀區段
  8. 選擇觸發條件類型。

  9. 設定需要的選項,然後選擇 新增

Lambda 支援 Amazon SQS 事件來源的下列組態選項:

SQS 佇列

要從中讀取記錄的 Amazon SQS 佇列。

啟用觸發條件

事件來源映射的狀態。系統會預設選取 啟用觸發條件

批次大小

每個批次中要傳送至函數的記錄數量上限。若是標準佇列,這最高可達 10,000 個記錄。若是 FIFO 佇列,最大值為 10。批次大小若超過 10,您還必須將批次間隔 (MaximumBatchingWindowInSeconds) 設定為至少 1 秒。

設定您的函數逾時,以便有足夠的時間來處理整批項目。如果項目需要長時間處理,請選擇較小的批次大小。大型批次大小可提升效率,適用非常快速或開銷龐大的工作負載。如果您在函數上設定保留並行,應最少設定五個並行執行,藉此降低 Lambda 調用函數時的調節錯誤機率。

只要事件的總大小不超過同步調用的調用有效負載大小配額(6 MB),Lambda 會在單次調用中將批次中的所有記錄傳遞給函數。Lambda 和 Amazon SQS 兩者均會產生每筆記錄的中繼資料。這個額外的中繼資料會計入總酬載大小,並且可能會導致批次中傳送的記錄總數低於您設定的批次大小。Amazon SQS 傳送的中繼資料欄位長度可能有所不同。如需 Amazon SQS 中繼資料欄位的詳細資訊,請參閱 Amazon 簡單佇列服務 ReceiveMessageAPI 參考中的 API 操作文件。

批次視窗

調用函式前收集記錄的最長時間 (單位為秒)。這僅適用於標準佇列。

如果您使用的批次視窗超過 0 秒,則必須考慮佇列可見性逾時中增加的處理時間。我們建議將您的佇列可見性逾時設定為函數逾時的六倍,再加上 MaximumBatchingWindowInSeconds 的值。這可讓您的 Lambda 函數有時間處理每個事件批次,並在發生節流錯誤時重試。

當訊息可供使用,Lambda 會開始批次處理訊息。Lambda 會開始一次處理五個批次,而函數有五個並行調用。如果訊息仍可用,則 Lambda 每分鐘會再為函數增加最多 300 個執行個體,上限是 1,000 個函數執行個體。若要深入了解函數擴展與並行,請參閱 Lambda 函數擴展

若要處理更多訊息,您可以最佳化 Lambda 函數以達到更高的輸送量。如需詳細資訊,請參閱了解如何透過 Amazon SQS 標準佇列 AWS Lambda 擴展規模

最大並行數量

事件來源可以調用的並行函數上限。如需詳細資訊,請參閱 設定 Amazon SQS 事件來源的最大並行性

篩選條件

新增篩選條件來控制 Lambda 要傳送哪些事件給函數進行處理。如需更多詳細資訊,請參閱 控制 Lambda 傳送給函數的事件