web-dev-qa-db-ja.com

AWS Lambdaタスクが6.00秒後にタイムアウトした

サーバーレスフレームワークを使用しています。 Lambda関数はDynamoDBテーブルに接続して、テーブル内のアイテムを更新します。テーブルの読み取りと書き込みの容量単位は5で、auto_scalingは無効になっています。 AWS Lambda関数には128MBのメモリが割り当てられています。

私はパフォーマンステストにJmeterを使用しました.1000のリクエストを同時に送信し、一部の応答は完全な出力を提供し、他は内部サーバーエラー(502 Bad Gateway)を提供しました。 Cloudwatchでログを分析したところ、タスクタイムアウトエラーのみが発生しました。誰もが私にこのエラーが発生する理由とそれを解決する方法を提案できますか?

12
darshi kothari

サーバーレスフレームワークを使用する場合のAWS Lambda関数のデフォルトのタイムアウトは6秒です。 documentation に記載されているように、それをより高い値に変更するだけです。

functions:
  hello:
    ...
    timeout: 10 # optional, in seconds, default is 6
11
Dunedan

DynamoDBテーブルには5つのWCUのみがプロビジョニングされていると述べたので、これは1秒あたり5つの書き込みのみが許可されることを意味します。

DynamoDBはバースト容量を提供し、300秒に相当する累積容量(5 WCUでは合計1500の書き込みリクエストに相当)を使用できますが、それらが使い果たされるとすぐにスロットルが開始されます。

DynamoDBクライアントには、指数バックオフを備えた自動再試行機能が組み込まれており、スロットルを認識するのに十分なほどスマートであるため、再試行が遅くなり、単一の書き込みが繰り返しスロットルされている場合、正常に完了するまで数秒かかることがあります。

Lambda関数はDynamoへの再試行を待機しているため、6秒でタイムアウトする可能性があります。

したがって、負荷テストを行うときは、依存関係がすべて適切にスケーリングされていることを確認してください。 1秒あたり1000リクエストで、それに応じてDynamoDBテーブルまたはインデックス、あるいはその両方の読み取り/書き込み容量割り当てをスケーリングするようにしてください。

4
Mike Dinescu