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

最終更新日: 2020 年 1 月 30 日

Amazon Simple Queue Service (Amazon SQS) トリガーを使用する AWS Lambda 関数が 想定どおりにスケーリングされません。関数が最適な同時処理に従ってスケールされることを確認するにはどうすればよいですか?

簡単な説明

SQS キューをイベントソースとして設定し、メッセージを処理できる場合、Lambda は最大 5 個の同時実行から始めます。Amazon SQS トリガーを使用する Lambda 関数は、1 分あたり 60 個の追加インスタンスを最大 1,000 個の同時呼び出しにスケールアップできます。関数を最適にスケールするには、以下の条件が満たされている必要があります。

  • 関数はエラーを生成していない。
  • AWS リージョンに十分な未予約の同時実行数があるか、関数の予約された同時実行数が少なくとも 1,000 ある。
  • SQS キューにメッセージがある。

解決方法

エラーを修正する

Lambda が関数を呼び出そうとしたときにエラーがあった場合は、サービスは関数をスケーリングできないようにして、大規模なエラーを防ぎます。エラーが停止するとすぐに、Lambda は関数をスケールアップし続けます。アカウントがリージョンでスケーリングまたはバースト同時実行のためにサービスクォータ以下である限り、1 分あたり 60 個の追加の同時呼び出しをスケールアップします。関数は、最大 1,000 回の同時呼び出しにスケールアップできます。

エラーのヘルプについては、AWS Lambda のトラブルシューティングおよび Lambda 関数の失敗をトラブルシューティングする方法を教えてください。を参照してください。

同時実行の管理

関数に予約された同時実行を設定していない場合、デフォルトの予約されていない同時実行クォータである 1,000 を、同じアカウントおよびリージョン内の他の関数と共有します。リージョンに予約されていない同時実行数が 1,000 個以上ある場合、関数は最大同時実行数に達するまでスケーリングを続けます。それ以外の場合、予約されていない同時実行がすべて使用されると、呼び出しはスロットリングされます。

関数で予約された同時実行数を設定した場合は、少なくとも 1,000 個の予約された同時実行数があることを確認します。この値が低い場合、関数は予約値に達すると調整されます。詳細については、Lambda 関数の同時実行数の管理をご参照ください。

注意: リージョンの同時実行数を増やす必要がある場合は、サービスクォータコンソールでサービスクォータの引き上げをリクエストできます。

キューの深さの確認

Lambda は、SQS キューにメッセージがある場合にのみ、呼び出しをスケーリングします。関数のメトリクスにスロットルがなく、エラーがない場合は、SQS キューメトリクス ApproximateNumberOfMessagesNotVisible を確認します。このメトリクスは、処理する必要があるメッセージの数を示します。

メトリクスが低 (または 0) の場合、関数はスケールできません。メトリクスが高く、増加していて、エラーがない場合は、トリガーのバッチサイズ設定を確認します。キューからのメッセージの受信と関数の呼び出しの間には、わずかな遅延があります。バッチサイズを低く設定した場合 (たとえば 1)、すべての呼び出しでわずかな遅延が発生し、キューにメッセージがバックアップされます。バッチサイズより継続時間が長くなるまで (最大バッチサイズである 10 まで)、バッチサイズを大きくしてみてください。

注意: バッチサイズを 10 に設定したが、SQS キューのメッセージ数が 1,000 件未満の場合、呼び出しで 10 件のメッセージの完全なバッチを受け取る可能性は低くなります。詳細については、Amazon SQS API リファレンスの ReceiveMessage を参照してください。


この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合