本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要使用 Lambda 處理 Amazon SQS 訊息,請正確設定佇列,然後建立 Lambda 事件來源映射。
配置要搭配 Lambda 使用的佇列
如果您還沒有建立 Amazon SQS 佇列,請建立一個來做為 Lambda 函數的事件來源。Lambda 函數和 Amazon SQS 佇列必須位於相同的 中 AWS 區域,雖然它們可以位於不同的 AWS 帳戶 中。
為讓您的函數有時間處理每個記錄批次,請將來源佇列的可見性逾時設定為函數設定之逾時的至少六倍。萬一您的函數在處理前一個批次時遭到調節,額外的時間可允許 Lambda 重試。
根據預設,只要 Lambda 在處理批次的過程中遇到錯誤,則該批次中的所有訊息都會傳回佇列。在可見性逾時時間到了之後,這些訊息會再次對 Lambda 可見。您可以將事件來源映射設定為使用部分批次回應,從而僅將失敗的訊息傳回佇列。此外,如果函數多次處理訊息失敗,Amazon SQS 可將訊息傳送到無效字母佇列。我們建議將來源佇列的再驅動政策 的 maxReceiveCount
設定為 5 或更大。這讓 Lambda 在將失敗的訊息傳送到無效字母佇列之前,有機會重試幾次。
設定 Lambda 執行角色許可
AWSLambdaSQSQueueExecutionRole AWS 受管政策包含 Lambda 從 Amazon SQS 佇列讀取所需的許可。您可以將此受管政策新增至函數的執行角色。
或者,如果您使用的是加密佇列,也需要將下列許可新增至您的執行角色:
建立 SQS 事件來源映射
建立事件來源映射,指示 Lambda 從您的佇列傳送項目至 Lambda 函數。您可以建立多個事件來源映射,使用單一函數處理來自多個佇列的項目。當 Lambda 調用目標函數時,事件可能包含多個項目,最多為可設定的最大批次大小。
若要將函數設定為從 Amazon SQS 讀取,請將 AWSLambdaSQSQueueExecutionRole AWS 受管政策連接至您的執行角色。然後,透過以下步驟從主控台建立 SQS 事件來源映射。
若要新增許可並建立觸發條件
開啟 Lambda 主控台中的 函數頁面
。 -
選擇函數的名稱。
-
依序選擇 Configuration (組態) 索引標籤和 Permissions (許可)。
-
在角色名稱下面,選擇執行角色連結。此連結會在 IAM 主控台中開啟該角色。
-
選擇新增許可,然後選擇連接政策。
-
在搜尋欄位中輸入
AWSLambdaSQSQueueExecutionRole
。將此政策新增至您的執行角色。這是受 AWS 管政策,其中包含您的函數從 Amazon SQS 佇列讀取所需的許可。如需此政策的詳細資訊,請參閱《AWS 受管政策參考》中的 AWSLambdaSQSQueueExecutionRole 一節。 -
在 Lambda 主控台中返回您的 Lambda 函數。在函數概觀下,選擇新增觸發條件。
-
選擇觸發條件類型。
-
設定需要的選項,然後選擇新增。
Lambda 支援 Amazon SQS 事件來源的下列組態選項:
- SQS 佇列
-
要從中讀取記錄的 Amazon SQS 佇列。Lambda 函數和 Amazon SQS 佇列必須位於相同的 中 AWS 區域,雖然它們可以位於不同的 AWS 帳戶 中。
- 啟用觸發條件
-
事件來源映射的狀態。系統會預設選取啟用觸發條件。
- 批次大小
-
每個批次中要傳送至函數的記錄數量上限。若是標準佇列,這最高可達 10,000 個記錄。若是 FIFO 佇列,最大值為 10。批次大小若超過 10,您還必須將批次間隔 (
MaximumBatchingWindowInSeconds
) 設定為至少 1 秒。設定函數逾時
以允許足夠時間來處理整個項目批次。如果項目需要長時間處理,請選擇較小的批次大小。大型批次大小可提升效率,適用非常快速或開銷龐大的工作負載。如果您在函數上設定保留並行,應最少設定五個並行執行,藉此降低 Lambda 調用函數時的調節錯誤機率。 Lambda 會將批次中所有記錄以單一呼叫傳送至函數,前提是事件的總大小不超過同步調用的調用承載大小配額 (6 MB)。Lambda 和 Amazon SQS 兩者均會產生每筆記錄的中繼資料。這個額外的中繼資料會計入總酬載大小,並且可能會導致批次中傳送的記錄總數低於您設定的批次大小。Amazon SQS 傳送的中繼資料欄位長度可能有所不同。如需 Amazon SQS 中繼資料欄位的詳細資訊,請參閱 Amazon Simple Queue Service API 參考中的 ReceiveMessage API 操作文件。
- 批次視窗
-
調用函式前收集記錄的最長時間 (單位為秒)。這僅適用於標準佇列。
如果您使用的批次間隔大於 0 秒,則必須考慮佇列可見性逾時中增加的處理時間。我們建議將您的佇列可見性逾時設定為函數逾時的六倍,再加上
MaximumBatchingWindowInSeconds
的值。這可讓您的 Lambda 函數有時間處理每個事件批次,並在發生節流錯誤時重試。當訊息可供使用,Lambda 會開始批次處理訊息。Lambda 會開始一次處理五個批次,而函數有五個並行調用。如果訊息仍可用,則 Lambda 每分鐘會再為函數增加最多 300 個執行個體,上限是 1,000 個函數執行個體。若要深入了解函數擴展與並行,請參閱 Lambda 函數擴展。
若要處理更多訊息,您可以最佳化 Lambda 函數以達到更高的輸送量。如需詳細資訊,請參閱了解 Amazon SQS 標準佇列的 AWS Lambda 擴展
方式。 - 最大並行數量
-
事件來源可以調用的並行函數上限。如需詳細資訊,請參閱設定 Amazon SQS 事件來源的並行上限。
- 篩選條件
-
新增篩選條件來控制 Lambda 要傳送哪些事件給函數進行處理。如需詳細資訊,請參閱控制 Lambda 將哪些事件傳送至您的函數。