為什麼我的 Lambda 函數在使用 Amazon SQS 事件來源時無法最佳擴展?

1 分的閱讀內容
0

對於我的 Amazon Simple Queue Service (Amazon SQS) 佇列事件來源,我希望我的 AWS Lambda 函數具有最佳並行性。

解決方法

**注意:**將 Amazon SQS 佇列設定為事件來源時,Lambda 函數可以最佳地擴展至每分鐘 300 個執行個體。標準佇列的並行調用數目上限為 1,000。如果您使用 FIFO 事件來源映射,則函數可以並行擴展到作用中訊息群組的數目。如需詳細資訊,請參閱擴展與處理

識別並解決任何 Lambda 函數調用錯誤

為防止在擴展時出現錯誤,在發生調用錯誤時 Lambda 會對函數擴展限流。解決錯誤後,Lambda 會繼續擴展函數。如需詳細資訊,請參閱失敗調用的退出策略。如需如何解決 Lambda 函數調用錯誤的最佳做法,請參閱 Lambda 中的問題疑難排解如何對 Lambda 函數失敗進行疑難排解?

針對您的使用案例為 Lambda 函數設定最佳並行

預留並行

如果您在函數上設定預留並行,則在函數達到預留值時 Lambda 會對您的函數限流。事件來源映射不會考慮預留並行,而且可以從佇列中處理比傳送到函數更多的訊息。

為函數預留的並行數量必須具有下列最小值:

  • 對於標準 Amazon SQS 佇列: 1,000
  • 對於 FIFO 佇列: 作用中訊息群組的數目

預留並行低於 FIFO 佇列中訊息群組數目並不是最佳做法。預留並行較低可能會導致 FIFO 佇列的處理延遲,並導致函數受到限流。

**重要:**若要限制並行調用的數目,請對 Amazon SQS 事件來源使用最大並行設定,而不是預留的並行。

未預留並行

如果您沒有在函數上設定預留並行,則函數的預設未預留並行配額為 1,000。此預設配額適用於同一 AWS 帳戶和 AWS 區域中的其他函數。如果函數的區域中至少有 1,000 個可用的未預留並行,則該函數會擴展,直至達到可用並行上限。當您帳戶的所有並行都在使用中時,Lambda 會對調用限流。

**注意:**Lambda 函數最初根據並行擴展率進行擴展。

為了防止因流量突發而發生過度擴展,Lambda 對函數可擴展的速度有限制。並行擴展率定義帳戶內的函數在回應增多的請求時可以提高的速度上限。

**重要:**並行擴展率是函數層級的限制。帳戶中的每個函數都可以獨立於其他函數擴展。並行擴展率也與帳戶層級並行限制不同,帳戶層級並行限制提供函數可用的並行總量。

最大並行設定

最大並行設定限制 Lambda 函數的並行執行次數上限不能超過設定的值。為一個事件來源設定最大並行時,該值僅適用於該特定事件來源。任何沒有並行上限的其他事件來源都會使用帳戶的剩餘並行配額或預留的並行。

並行設定上限和預留並行可同時使用。最佳做法是設定的並行設定上限不要大於函數的預留並行,因為這可能會導致限流。

確認 Amazon SQS 佇列中有足夠的訊息,以允許 Lambda 函數擴展

如果 Amazon SQS 佇列設定為調用 Lambda 函數,則僅當佇列中有訊息時,Lambda 才會擴展調用。

若要檢查 Amazon SQS 佇列中有多少訊息需要處理,請檢閱 ApproximateNumberOfMessagesVisible 指標。

如果指標低或為 0,則函數無法擴展。

如果指標高且沒有調用錯誤,則增加事件通知上的批次大小。增加批次大小,直到持續時間指標的提高速度快於批次大小指標。如需詳細資訊,請參閱監控 Lambda 主控台上的函數

**注意:**標準 Amazon SQS 佇列的批次大小上限為 10,000 筆記錄。對於 FIFO 佇列,批次大小上限為 10 筆記錄。如需詳細資訊,請參閱 ReceiveMessage

相關資訊

搭配 Amazon SQS 使用 Lambda

管理 AWS Lambda 函數並行

AWS 官方
AWS 官方已更新 1 個月前