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

最終更新日: 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 キューメトリクスApproximateNumberOfMessagesVisible を確認してください。このメトリクスは、まだ処理していないメッセージの数を示します。

メトリクスが低い場合や 0 の場合、関数はスケーリングできません。メトリクスの値が高く成長していて、エラーがない場合は、トリガーのバッチサイズ構成を確認してください。キューからメッセージを受け取り、関数を呼び出すまでに少し時間がかかります。バッチサイズが低く設定されている場合、すべての呼び出しでわずかな遅延が発生し、キュー内でメッセージのバックアップが発生する可能性があります。期間がバッチサイズよりも速く増加するまで、バッチサイズ 10 までバッチサイズを増やしてみてください。

注: SQS キューに含まれるメッセージが 1,000 件未満の場合、呼び出しで 10 件のメッセージのバッチを完全に受信する可能性は低くなります。

詳細については、Amazon SQS API リファレンスの ReceiveMessage を参照してください。


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


請求に関するサポートまたは技術サポートが必要ですか?