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

最終更新日: 2021 年 6 月 21 日

AWS Lambda 関数を呼び出すように Amazon Simple Queue Service (Amazon SQS) キューを設定しました。しかし、Lambda 関数が期待どおりにスケーリングされません。Amazon SQS キューをイベントソースとして使用している場合、関数が最適な同時実行数に合わせてスケールされるようにするにはどうすればよいですか?

解決方法

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

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

スケールでエラーが発生するのを防ぐため、Lambda は呼び出しエラーが発生したときに関数のスケーリングをスロットリングします。エラーが解決されると、Lambda は関数のスケールを継続します。

Lambda 関数の呼び出しエラーを特定して解決する方法に関するベストプラクティスについては、以下を参照してください。

Lambda 関数がユースケースに最適な同時実行数で設定されていることを確認する

予約された同時実行数

関数に予約された同時実行数を設定した場合、その関数が予約値に達したときにスロットリングされます。関数に予約された同時実行の数が少なくとも次のものであることを確認することをお勧めします。

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

プロビジョニングされた同時実行数

ご使用の関数で予約されたの同時実行数を設定していない場合、予約されていない同時実行数 (プロビジョニングされた同時実行数) のデフォルトクォータは 1,000 です。このデフォルトクォータは、同一の AWS アカウントやリージョン内の他の機能と共有されます。関数のリージョンで少なくとも 1,000 のプロビジョニングされた同時実行数が使用可能である場合、関数は最大同時実行数に達するまでスケールを続けます。呼び出しは、プロビジョニングされた同時実行数がすべて使用されているときにスロットリングされます。

詳細については、「Lambda 関数の同時実行数の管理」を参照してください。

重要: 追加の同時呼び出しをスケールアップするには、アカウントがリージョンでのスケーリングまたはバースト同時実行のサービスクォータに近づいていない必要があります。リージョンでさらに高い同時実行数が必要であると判断した場合は、Service Quotas コンソールサービスクォータの引き上げをリクエストできます。

Amazon SQS キューに十分なメッセージがあることを確認して、Lambda 関数をスケーリングできるようにする

Amazon SQS キューが Lambda 関数を呼び出すように設定されている場合、Lambda はキューにメッセージがある場合にのみ呼び出しをスケーリングします。

Amazon SQS キューでまだ処理する必要があるメッセージの数を確認するには、ApproximateNumberOfMessagesVisible メトリクスを確認します

メトリクスが低い場合や 0 の場合、関数はスケーリングできません。

メトリックが高く、呼び出しエラーがない場合は、イベント通知のバッチサイズを大きくしてみてください期間メトリックがバッチサイズメトリックよりも速く増加するまで、バッチサイズを増やします。詳細については、「AWS Lambda コンソールで関数をモニタリングする」をご参照ください。

注: 標準の Amazon SQS キューの最大バッチサイズは 10,000 レコードです。FIFO キューの場合、最大バッチサイズは 10 レコードです。詳細については、Amazon SQS API リファレンスの ReceiveMessage を参照してください。