Amazon Kinesis 拡張ファンアウト (EFO) モードで AWS Lambda イベントソースマッピング (ESM) を呼び出すと、GetRecords のメトリクスが表示されます。
簡単な説明
標準の Kinesis データストリームでは、Lambda はストリーム内のシャードに対し、シャードごとに 1 秒に 1 回のレートでレコードをポーリングします。Kinesis EFO では、Lambda は HTTP/2 接続を使用して Kinesis からプッシュされたレコードをリッスンします。レコードが使用可能になると、Lambda は関数を呼び出して結果を待ちます。
解決策
この問題をトラブルシューティングするには、次のアクションを実行してください。
アクセス許可を確認する
Lambda 関数を作成し、EFO コンシューマーで Kinesis アクティベーションを設定するには、次のアクセス許可が必要です。
kinesis:GetRecords
kinesis:GetShardIterator
これらのアクセス許可は、AWSLambdaKinesisExecutionRole マネージドポリシーに含まれており、標準コンシューマーと EFO コンシューマーをサポートしています。実行ロールに以前のアクセス許可がない場合、次のエラーが表示されます。 「トリガーの作成中にエラーが発生しました。 イベントソースにアクセスできません <Kinesis stream ARN>。」
AWS Identity and Access Management (IAM) ロールに次のアクセス許可があることを確認します。 DescribeStreamSummary、ListShards、GetShardIterator、GetRecords (ストリーム)、SubscribeToShard (コンシューマ)。
イベントソースのマッピングを確認する
Lambda のイベントソースマッピングが Kinesis EFO ストリームコンシューマーで設定されている場合、Lambda 関数は指定された Kinesis ストリームからのメッセージを処理できます。Kinesis の GetRecords Amazon CloudWatch メトリクスは、Lambda が正常に呼び出されても表示されません。Lambda ESM はプッシュベースの拡張ファンアウトコンシューマーを使用するため、これは予想される動作です。
表示された CloudWatch メトリクスとその理由を確認する
Lambda 呼び出しが失敗した場合、Lambda サービスは同じバッチを複数回処理しようとします (設定されている最大再試行回数に基づく)。これらの再試行中に、GetRecords API コールに関するメトリクスが表示されます。これは、Lambda サービスが失敗した Lambda 呼び出し試行に関するレコードをシャードからポーリングするためです。レコードのポーリングは GetRecords API コールであり、その結果、関連するメトリクスデータポイントが生成されます。
関連情報
Amazon Kinesis Data Streams のディメンションとメトリクス