Lambda IteratorAge メトリクスが増えているのはなぜですか、またそれを減らすにはどうすればよいですか?

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

AWS Lambda 関数の IteratorAge メトリクスの増加 (またはスパイク) が表示されます。関数のイテレータの経過時間が増加するのはなぜですか? また、それを減らすにはどうすればよいですか?

簡単な説明

Lambda 関数のイテレータの経過時間は、関数が呼び出し元のストリームに書き込まれたデータを効率的に処理できない場合に増加します。関数の IteratorAge メトリクスを減らすには、ストリーム処理のスループットを増やす必要があります。

関数の IteratorAge メトリクスに影響する要因は次のとおりです。

この記事を確認して、各要因がイテレーターの経過時間にどのように影響するかを理解してください。次に、ユースケースに基づいて関数のイテレータの経過時間を短縮するために、関数またはデータストリームを再設定します。詳細については、AWS Lambda 関数メトリクスの操作を参照してください。

解決方法

関数の実行時間を短縮する

実行時間が長くなると、関数のイテレータの経過時間が長くなります。期間を短くすると、関数のスループットが増加し、関数のイテレータの経過時間が減少します。

関数の実行時間を短くするには、次のいずれかまたは両方を実行します。

1.関数に割り当てられるメモリの量を増やします

2.レコードの処理にかかる時間を短縮できるように、関数コードを最適化します

注意:詳細については、AWS Lambda と AWS X-Ray および AWS Lambda 関数の計測を参照してください。

ストリームのシャード数を増やす

ストリーム内のシャードの数が少ないと、関数のイテレータの経過時間が長くなります。ストリーム内のシャードの数を増やすと、関数のスループットが増加し、関数のイテレータの経過時間が減少します。

ストリームのシャード数を増やすには、ストリームのリシャーディングの手順に従います。

注意:シャード分割は、関数のイテレータの経過時間に直ちには影響しません。既存のレコードは、書き込まれたシャードに残ります。これらのシャードは、シャードのイテレータの経過時間が減少する前に、バックログに追いつく必要があります。詳細については、ストリームの操作を参照してください。

ストリームのバッチサイズを増やす

関数の実行時間がイベント内のレコード数から独立している場合は、関数のバッチサイズを増やすと、関数のイテレータの経過時間が減少します。

関数のバッチサイズを大きくするには、ストリームをイベントソースとして設定するの手順に従います。

注意:関数の持続時間がイベント内のレコード数に依存する場合、関数のバッチサイズを大きくしても関数のイテレータの経過時間は減少しません。詳細については、ストリームの操作を参照してください。

関数が呼び出しエラーを正常に処理していることを確認します。

呼び出しエラーにより、Lambda 関数がイベントの処理に時間がかかったり、同じイベントを複数回処理したりすることがあります。イベントのレコードはシーケンシャルに読み取られるため、レコードのバッチが再試行のたびにエラーを発生させていると、関数は後のレコードに進むことができなくなります。この状況では、イテレータの経過時間は、レコードが経過するにつれて直線的に増加します。

関数がストリームに書き込まれたレコードを正常に処理することが重要です。関数を開発するにつれて、コードのロギングと計測は、エラーの診断に役立ちます。

詳細については、以下を参照してください:

さまざまな並列化係数設定をテストし、拡張ファンアウトを使用して、ストリーム処理のスループットを向上させます。

並列化係数設定をテストするには

関数の並列化係数を設定して、ストリームの各シャードに対する同時 Lambda 呼び出しの数を増やすことで、ストリーム処理を改善できます。また、Lambda が各シャードからポーリングする同時バッチの数を指定することもできます。

例えば、並列化係数が 10 に設定されている場合、5 つの Kinesis データシャードを処理するために、最大 50 の Lambda 呼び出しを同時に実行できます。

詳細については、Amazon Kinesis での AWS Lambda の使用およびKinesis および AmazonDynamoDBイベントソース用の新しいAWSLambdaスケーリングコントロールを参照してください。

注意:シャードあたりの同時バッチ数を増やすと、Lambda はパーティションキーレベルで順序付け処理を管理します。

拡張ファンアウトを使用するには

拡張ファンアウトを備えたデータストリームコンシューマを作成することで、レイテンシーを減らし、読み取りスループットを向上させることができます。ストリームコンシューマーは、ストリームから読み取っている他のアプリケーションに影響を与えない、各シャードへの専用接続を取得します。

詳細については、専用スループット (拡張ファンアウト) を使用したカスタムコンシューマの開発および Amazon Kinesis で AWS Lambda を使用するを参照してください。

注意:同じデータを読み取るアプリケーションが多数ある場合や、大きなレコードを持つストリームを再処理する場合は、拡張ファンアウトを使用することをお勧めします。