本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立和設定 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 事件來源對應。
若要新增權限並建立觸發器
開啟 Lambda 主控台中的 函數頁面
。 -
選擇函數的名稱。
-
依序選擇 Configuration (組態) 索引標籤和 Permissions (許可)。
-
在 [角色名稱] 下,選擇指向您的執行角色的連結。此連結會在 IAM 主控台中開啟角色。
-
選擇新增許可,然後選擇連接政策。
-
在搜尋欄位中輸入
AWSLambdaSQSQueueExecutionRole
。將此原則新增至您的執行角色。這是一項 AWS 受管政策,其中包含函數需要從 Amazon SQS 佇列讀取的許可。如需有關此原則的詳細資訊,請參閱 AWSLambdaSQSQueueExecutionRole受AWS 管理的原則參考中的。 -
返回 Lambda 主控台中的函數。在 函式概觀 下,選擇 新增觸發條件 。
-
選擇觸發條件類型。
-
設定需要的選項,然後選擇 新增 。
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 傳送給函數的事件。