使用 Lambda 处理 Amazon Kinesis Data Streams 记录
要使用 Lambda 处理 Amazon Kinesis Data Streams 记录,请为您的流创建一个使用者,然后创建 Lambda 事件源映射。
配置数据流和函数
您的 Lambda 函数是数据流的用户应用程序。对于每个分片,它一次处理一批记录。您可以将 Lambda 函数映射到共享吞吐量使用者(标准迭代器)或具有增强扇出功能的专用吞吐量使用者。
-
标准迭代器:Lambda 将针对记录轮询 Kinesis 流中的每个分片(按照每秒一次的基本频率)。当有更多记录可用时,Lambda 会继续进行批处理,直到函数赶上流的速度。事件源映射与分区的其他使用者共享读取吞吐量。
-
增强型扇出功能:为了最大限度地减少延迟并最大限度地提高读取吞吐量,请创建具有增强型扇出功能的数据流使用者。增强扇出功能使用者将获得与每个分片的专用连接,这不会影响从流中读取信息的其他应用程序。流使用者使用 HTTP/2 通过长期连接将记录推送到 Lambda 并压缩请求头来减少延迟。您可以使用 Kinesis RegisterStreamConsumer API 创建流使用者。
aws kinesis register-stream-consumer \ --consumer-name con1 \ --stream-arn arn:aws:kinesis:us-east-2:123456789012:stream/lambda-stream
您应看到以下输出:
{ "Consumer": { "ConsumerName": "con1", "ConsumerARN": "arn:aws:kinesis:us-east-2:123456789012:stream/lambda-stream/consumer/con1:1540591608", "ConsumerStatus": "CREATING", "ConsumerCreationTimestamp": 1540591608.0 } }
要提高函数处理记录的速度,请将分片添加到数据流中
如果您的函数无法扩展以处理并发批处理的总数,请为您的函数请求提高配额或预留并发。
创建一个事件源映射来调用 Lambda 函数
要使用来自数据流的记录调用 Lambda 函数,请创建一个事件源映射。您可以创建多个事件源映射,以使用多个 Lambda 函数处理相同的数据,或使用单个函数处理来自多个数据流的项目。处理来自多个流的项目时,每个批处理将只包含来自单个分片或流的记录。
您可以配置事件源映射来处理来自不同 AWS 账户中的流的记录。要了解更多信息,请参阅 创建跨账户事件源映射。
在创建事件源映射之前,您需要向您的 Lambda 函数授予读取 Kinesis 数据流中数据的权限。Lambda 需要以下权限才能管理与您的 Kinesis 数据流相关的资源:
AWS 托管式策略 AWSLambdaKinesisExecutionRole 包含这些权限。按照以下过程所述将此托管式策略添加到您的函数。
配置所需的权限后,创建事件源映射。
轮询和流的起始位置
请注意,事件源映射创建和更新期间的流轮询最终是一致的。
-
在事件源映射创建期间,可能需要几分钟才能开始轮询来自流的事件。
-
在事件源映射更新期间,可能需要几分钟才能停止和重新开始轮询来自流的事件。
此行为意味着,如果你指定 LATEST
作为流的起始位置,事件源映射可能会在创建或更新期间错过事件。为确保不会错过任何事件,请将流的起始位置指定为 TRIM_HORIZON
或 AT_TIMESTAMP
。
创建跨账户事件源映射
Amazon Kinesis Data Streams 支持基于资源的策略。因此,您可以在一个 AWS 账户中使用 Lambda 函数来处理另一个账户的流中摄入的数据。
要使用其他 AWS 账户中的 Kinesis 流为您的 Lambda 函数创建事件源映射,您必须使用基于资源的策略配置该流,以向您的 Lambda 函数授予读取相关项目的权限。要了解如何配置流以允许跨账户存取,请参阅《Amazon Kinesis Streams 开发人员指南》中的 Sharing access with cross-account AWS Lambda functions。
使用基于资源的策略配置流以向您的 Lambda 函数授予所需的权限后,请使用上一节中描述的任何方法创建事件源映射。
如果您选择使用 Lambda 控制台创建事件源映射,请将流的 ARN 直接粘贴到输入字段中。如果您想指定流的使用者,粘贴使用者的 ARN 会自动填充流字段。