【问题标题】:Write to a specific folder in S3 bucket using AWS Kinesis Firehose使用 AWS Kinesis Firehose 写入 S3 存储桶中的特定文件夹
【发布时间】:2018-10-24 17:12:57
【问题描述】:

我希望能够根据数据中的内容将数据发送到 kinesis firehose。例如,如果我发送了这个 JSON 数据:

{
   "name": "John",
   "id": 345
}

我想根据 id 过滤数据并将其发送到我的 s3 存储桶的子文件夹,例如:S3://myS3Bucket/345_2018_03_05。 Kinesis Firehose 或 AWS Lambda 是否可以做到这一点?

我现在能想到的唯一方法是为每一个可能的 ID 创建一个运动流,并将它们指向同一个存储桶,然后将我的事件发送到我的应用程序中的这些流,但我会想避免这种情况,因为有很多可能的 ID。

【问题讨论】:

  • 你找到解决方案了吗?我正在寻找相同的场景。

标签: amazon-web-services amazon-s3 aws-lambda amazon-kinesis amazon-kinesis-firehose


【解决方案1】:

您可能希望使用每次 Firehose 将新文件放入 S3 存储桶(PUT)时触发的 S3 事件通知; S3 事件通知应调用您编写的自定义 lambda 函数,该函数读取 S3 文件的内容并将其拆分并将其写入单独的存储桶,请记住每个 S3 文件可能包含许多记录,而不是只有一个。

https://aws.amazon.com/blogs/aws/s3-event-notification/

【讨论】:

    【解决方案2】:

    这不可能开箱即用,但这里有一些想法......

    您可以为每条记录编写由 Amazon Kinesis Firehose 触发的 Data Transformation in Lambda。您可以编写 Lambda 来保存以将数据保存到 S3 中的特定文件,而不是让 Firehose 执行此操作。但是,您会错过 Firehose 的记录聚合功能。

    您可以使用Amazon Kinesis Analytics 查看记录并根据内容使用send the data to a different output stream。例如,您可以为每个传输通道创建一个单独的 Firehose 流,并使用 Kinesis Analytics 查询选择目标。

    【讨论】:

      【解决方案3】:

      如果您使用 lambda 来保存数据,您最终会在 s3 上出现重复数据。一个由 lambda 存储,另一个由 firehose 存储,因为转换 lambda 会将数据添加回 firehose。除非有办法避免将来自 lambda 的转换数据重新添加到流中。我不知道有什么方法可以避免这种情况

      【讨论】:

      猜你喜欢
      • 2021-06-15
      • 1970-01-01
      • 2014-08-05
      • 2016-10-29
      • 2020-07-14
      • 2021-05-26
      • 2018-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多