當我們使用 AWS 設計 serverless 架構時,可以使用 AWS SQS 搭配 Lambda ,確保 message 被保存在 queue 裡面,確實被程式執行,在執行失敗後也能夠被 retry ,接下來會介紹如何在 Lambda 設定 SQS 當 trigger 。
要使用 SQS 當 trigger ,綁在 Lambda 上的 role 必須要有執行 SQS message 的權限,所以在 Permissions
的 Execution role
找到 role 之後,就可以進入 role 的權限設定頁面加權限。
加上 AWSLambdaSQSQueueExecutionRole
這個 policy ,就可以加上 SQS 當 trigger 和取得 SQS 的 message 。
點進其中一個 Lambda 之後,可以看到 Add trigger
,按下去就可以開始新增 trigger 。
進到加 trigger 頁面,選擇使用 SQS 當 trigger ,並指定要當 trigger 的 queue 。
設定 trigger 的時候,可以設定 Batch size 和 Batch window , Batch size 是指 Lambda 最多一次可以處理多少個 SQS 的 message , Batch window 是指 Lambda 最多可以等待多久,再一次處理該時間區間內的 message 。
以下面這張圖為例,共有 40 個 message ,被切分為 5 個 batch ,每個 batch 的 message 數量,不能超過上面圖片設定的 20 ,每個 batch 涵蓋的時間區段,不能超過 20 秒,這些 message 被處理的情形大概會像下面這張圖。
實際上用 SQS 的 API 送 40 個 message ,並在 lambda 印出 log ,可以看到每次 batch 處理的 message 數量都不同,但都沒有超過設定的 Batch size ,時間也沒有超過 20 秒。
How Lambda processes records from stream and queue-based event sources