使用AWS Lambda进行历史/批处理数据处理

时间:2018-03-09 10:16:01

标签: amazon-web-services aws-lambda

据我所知,AWS Lambda可用于实时事件处理。 我在Java 8中实现了一个处理Kinesis事件的AWS Lambda。

但是我如何使用相同的Java函数来处理过去1年我在S3中存储的历史Kinesis事件。 或者说我想在某些批处理工作负载上运行此AWS Lambda Java功能。

截至目前,我相信,我将不得不使用AWS Batch,AWS Datapipeline等单独的服务,并且必须分别在这些应用程序中编写代码。 AWS Batch / Datapipeline甚至不支持Java作业/活动。

从技术上讲,我需要在两个不同的位置/服务中维护代码库具有相同的转换。

1 个答案:

答案 0 :(得分:0)

我建议使用某种处理(可能是一次处理)将消息添加到Kinesis流中,这样就不会有2个处理器几乎完全相同。假设在S3中有超过1000个对象,我会编写2个进程:

  1. 无论是在lambda中还是在本地使用cli,你都会traverses your S3 directories。每当遇到它关心的文件时,要么将它放在队列中(SQS),要么向下面概述的lambda#2发送消息。
  2. lambda(根据上面的方法接收消息或从队列中提取)获取存储桶和密钥,从S3中检索对象,进行必要的映射/转换并将其添加到Kinesis流中。
  3. 这种方法的一些原因是:

    • 使用S3 api列出对象只会获得桶和密钥。由于lambda的5分钟限制,您将无法在5分钟内处理所有内容。
    • 单一责任。 1 lambda负责查找S3对象,1。lambda负责获取对象并进行处理。有人可能会争辩说你应该将第二个lambda分成多个步骤,这也可能有意义。如果你不打算重复使用它,我不会付出太多努力。