当我通过 Amazon Kinesis 增强型扇出 (EFO) 模式调用 AWS Lambda 事件源映射 (ESM) 时,我会看到 GetRecords 指标。
简短描述
对于标准 Kinesis 数据流,Lambda 会按照每个分片每秒轮询一次的速率轮询流中的分片来获取记录。对于 Kinesis EFO,Lambda 会使用 HTTP/2 连接来监听从 Kinesis 推送的记录。当记录可用时,Lambda 会调用您的函数并等待结果。
解决方法
要解决此问题,请采取以下操作:
确认您的权限
要创建 Lambda 函数并使用 EFO 使用者设置 Kinesis 激活,您需要以下权限:
kinesis:GetRecords
kinesis:GetShardIterator
这些权限包含在 AWSLambdaKinesisExecutionRole 托管策略中,该策略支持标准使用者和 EFO 使用者。如果执行角色中缺少上述权限,则会显示以下错误: "An Error occurred when creating the trigger: Cannot access event source <Kinesis stream ARN>."
确认您的 AWS Identity and Access Management (IAM) 角色具有以下权限: 对流执行 DescribeStreamSummary、ListShards、GetShardIterator 和 GetRecords 操作的权限以及对使用者的 SubscribeToShard 权限。
确认您的事件源映射
使用 Kinesis EFO 流使用者配置 Lambda 事件源映射后,Lambda 函数可处理来自指定 Kinesis 流的消息。Lambda 调用成功时将不显示 Kinesis GetRecords Amazon CloudWatch 指标。这是预期行为,因为 Lambda ESM 使用基于推送的增强型扇出使用者。
确认看到的 CloudWatch 指标及其原因
如果 Lambda 调用失败,则 Lambda 服务会多次(基于配置的最大重试次数)尝试处理同一批次。在这些重试尝试期间,将显示 GetRecords API 调用的指标。这是因为 Lambda 服务会轮询分片中的记录,以查找失败的 Lambda 调用尝试。轮询记录是一种 GetRecords API 调用,会生成相关的指标数据点。
相关信息
Amazon Kinesis Data Streams 维度和指标