AWS Lambda 関数を呼び出すように Amazon Simple Queue Service (Amazon SQS) キューを設定しました。しかし、Lambda 関数が期待どおりにスケーリングされません。Amazon SQS キューをイベントソースとして使用している場合、関数が最適な同時実行数に合わせてスケールされるようにするにはどうすればよいですか?
注: 最適に実行する場合、イベントソースとして設定された Amazon SQS キューを持つ Lambda 関数は、毎分最大 60 インスタンスまでスケールアップできます。同時呼び出しの最大数は 1,000 です。FIFO イベントソースマッピングを使用している場合、関数はアクティブなメッセージグループの数に合わせて同時実行数をスケールインできます。詳細については、「スケーリングおよび処理」を参照してください。
スケールでエラーが発生するのを防ぐため、Lambda は呼び出しエラーが発生したときに関数のスケーリングをスロットリングします。エラーが解決されると、Lambda は関数のスケールを継続します。
Lambda 関数の呼び出しエラーを特定して解決する方法に関するベストプラクティスについては、以下を参照してください。
予約された同時実行数
関数に予約された同時実行数を設定した場合、その関数が予約値に達したときにスロットリングされます。関数に予約された同時実行の数が少なくとも次のものであることを確認することをお勧めします。
プロビジョニングされた同時実行数
予約された同時実行数を関数で設定していない場合、予約されていない同時実行数 (プロビジョニングされた同時実行数) のデフォルトクォータは 1,000 です。このデフォルトクォータは、同一の AWS アカウントやリージョン内の他の機能と共有されます。関数のリージョンで少なくとも 1,000 のプロビジョニングされた同時実行数が使用可能である場合、関数は最大同時実行数に達するまでスケールを続けます。呼び出しは、プロビジョニングされた同時実行数がすべて使用されているときにスロットリングされます。
詳細については、「Managing concurrency for a Lambda function」(Lambda 関数の同時実行数の管理) を参照してください。
重要: 追加の同時呼び出しをスケールアップするには、アカウントがリージョンでのスケーリングまたはバースト同時実行のサービスクォータに近づいていない必要があります。リージョンでさらに高い同時実行数が必要であると判断した場合は、Service Quotas コンソールでサービスクォータの引き上げをリクエストできます。
Amazon SQS キューが Lambda 関数を呼び出すように設定されている場合、Lambda はキューにメッセージがある場合にのみ呼び出しをスケーリングします。
Amazon SQS キューでまだ処理する必要があるメッセージの数を確認するには、ApproximateNumberOfMessagesVisible メトリクスを確認します。
メトリクスが低い場合や 0 の場合、関数はスケーリングできません。
メトリックが高く、呼び出しエラーがない場合は、イベント通知のバッチサイズを大きくしてみてください。期間メトリクスがバッチサイズメトリクスよりも速く増加するまで、バッチサイズを増やします。詳細については、「Lambda コンソールでの関数のモニタリング」を参照してください。
注: 標準の Amazon SQS キューの最大バッチサイズは 10,000 レコードです。FIFO キューの場合、最大バッチサイズは 10 レコードです。詳細については、Amazon SQS API リファレンスの ReceiveMessage を参照してください。
Amazon SQS での Lambda の使用
AWS Lambda 関数のスケーリング
Managing AWS Lambda Function Concurrency (AWS Lambda 関数の同時実行数の管理)