Amazon SQS イベントソースの Lambda 関数が最適にスケーリングされないのはなぜですか?

所要時間1分
0

Amazon Simple Queue Service (Amazon SQS) キューをイベントソースとして使用する場合、AWS Lambda 関数の同時実行数が最適になるようにしたいと考えています。

解決策

注: Amazon SQS キューをイベントソースとして設定すると、Lambda 関数は 1 分あたりさらに 300 インスタンスまで最適にスケールアップできます。標準キューの同時呼び出しの最大数は 1,000 です。FIFO イベントソースマッピングを使用する場合、関数はアクティブなメッセージグループの数まで同時にスケールインできます。詳細については、「スケーリングと処理」を参照してください。

Lambda 関数呼び出しエラーを特定して解決する

スケーリング時のエラーを防ぐため、Lambda は呼び出しエラーが発生したときに関数のスケーリングを制限します。エラーが解決されると、Lambda は引き続き関数をスケーリングします。詳細については、「](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html#services-sqs-backoff-strategy)失敗した呼び出しのバックオフ戦略[」を参照してください。Lambda 関数呼び出しエラーを解決するためのベストプラクティスについては、「Lambda の問題のトラブルシューティング」と「Lambda 関数が失敗する場合のトラブルシューティング方法を教えてください」を参照してください。

ユースケースに最適な同時実行で Lambda 関数を設定する

予約された同時実行数

関数に予約された同時実行数を設定した場合、Lambda は予約された値に達すると関数を調整します。イベントソースマッピングでは、予約された同時実行を考慮しないため、関数に送信できるよりも多くのメッセージをキューから処理できます。

関数に割り当てられている同時実行数には、次の値以上である必要があります。

  • 標準 Amazon SQS キューの場合: 1,000
  • FIFO キューの場合: アクティブなメッセージグループの数

予約した同時実行数を FIFO キュー内のメッセージグループの数より少なくすることはベストプラクティスではありません。予約された同時実行数が少ないと、FIFO キューからの処理が遅れ、関数がスロットリングされる可能性があります。

重要: 同時呼び出しの数を制限するには、予約された同時実行ではなく、Amazon SQS イベントソースの最大同時実行設定を使用します。

予約されていない同時実行数

関数に予約された同時実行数を設定しない場合、その関数のデフォルトの予約されていない同時実行クォータは 1,000 になります。このデフォルトクォータは、同じ AWS アカウントと AWS リージョンの他の機能に適用されます。関数のリージョンで利用できる予約されていない同時実行が 1,000 件以上ある場合、関数は利用可能な最大同時実行数に達するまでスケーリングされます。アカウントの同時実行がすべて使用されると、Lambda は呼び出しを制限します。

**注:**Lambda 関数は、最初は同時実行スケーリングレートに基づいてスケーリングされます。

トラフィックの突然の急増による過度なスケーリングを防ぐために、Lambda では関数のスケーリング速度に制限を設けています。同時実行スケーリングレートは、リクエストの増加に応じてアカウント内の関数がどれだけ速く増やすことができるかの上限を定義します。

重要: 同時実行スケーリングレートは、関数レベルの制限です。アカウント内の各関数は、他の関数とは独立してスケーリングできます。同時実行スケーリングレートは、関数で使用できる同時実行の合計量を提供するアカウントレベルの同時実行制限とも異なります。

最大同時実行数の設定

最大同時実行数の設定では、Lambda 関数の最大同時実行回数が設定値を超えないように制限します。1 つのイベントソースの最大同時実行数を設定すると、その値はその特定のイベントソースにのみ適用されます。同時実行数が上限に達していない追加のイベントソースは、残りのアカウントの同時実行クォータまたは予約済み同時実行数を使用します。

最大同時実行数の設定と予約済み同時実行数は一緒に使用できます。スロットリングが発生する可能性があるため、最大同時実行数を関数の予約済み同時実行数より大きく設定しないことをお勧めします。

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ヶ月前