質問・問題
Lambdaをコンシューマーに指定した環境にてストリームに対して継続的な書き込みがない際に GetRecords.IteratorAgeMilliseconds が一時的にスパイクする事象を確認しました。
基盤側の障害などで発生するのでしょうか?
回答・解決方法
コンシューマーに Lambda のイベントソースマッピングを使用している場合、ストリームに対して継続的な書き込みがない際に GetRecords.IteratorAgeMilliseconds が一時的にスパイクする事象は発生する可能性があります。
[1]の資料に記載がございます通り、Lambda はストリーム内の各シャードを GetRecords によってポーリングしており、一定時間後の読み取り位置としては LATEST に近くなっているため、GetRecords.IteratorAgeMilliseconds は通常 0 が記録されることとなります。
Lambda では内部的に「ストリーム内のどのレコードまで処理したのか」を管理しており、各シャードを処理するワーカーにて何らかの事象が発生した場合においても、自動的にワーカーを再スタートして処理を再開することが可能となっております。
ストリーム内にレコードがない状態で Lambda のワーカーの再起動が発生した場合、
処理の再開対象となるレコードが存在せず
GetRecords.IteratorAgeMilliseconds が一時的にスパイクするような状況が発生することとがあります。
上記の理由から、GetRecords.IteratorAgeMilliseconds の一時的なスパイクは特に問題がない場合でも発生する可能性がある為、継続的に上昇する場合に対処が必要であるとご認識いただけますと幸いです。
【参考記事】
[1]データストリームと関数の設定
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-kinesis.html#services-kinesis-configure