【问题标题】:ETL using AWS Lambda and Redshift使用 AWS Lambda 和 Redshift 的 ETL
【发布时间】:2019-06-17 23:49:02
【问题描述】:

背景:我想从现有系统收集数据以执行分析处理。

现有系统暴露了 REST 端点。

硬性要求:MVP(最小可行产品)=> 首选 AWS Lambda 或其他轻量级的东西,应该以 Redshift 结尾,不需要额外的存储/归档(不需要存储在 S3 中)。

我的计划是使用 AWS Lambda 执行间隔收集并进行转换并将数据存储到 AWS Redshift。

建议的方法是什么:

解决方案#1:用于转换的 AWS Lambda + 使用 PostgreSQL 驱动程序插入?

解决方案 #2:用于转换的 AWS Lambda + 推送到 AWS Kinesis => 复制到 AWS Redshift?

还有其他解决方案吗?

【问题讨论】:

  • 启动处理的事件/触发器是什么?这是多少数据,它多久运行一次?它会运行多长时间?
  • 是的,会有启动 AWS Lambda 的触发器。数据不会很大,几千条记录。我们仍在研究频率(有些 Lambda 每月运行一次,有些每小时运行一次)。一些 lambda 可能需要不到 5 分钟的时间来运行 => 我还没有测试写入 Redshift 的部分,因为它仍在调查中。

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


【解决方案1】:

您需要摄取到 Redshift 的数据量是多少?假设您安排 Lambda 每 30 分钟运行一次,获取一批数据并插入 Redshift,确保它可以在 15 分钟执行时间内完成。

我更喜欢 Lambda --> Kinesis Firehose --> Redshift,因为它可以更好地扩展。 但如果体积小或成本是一个因素,那么你#1也是一个不错的选择。

【讨论】:

  • 我在某处读到,将数据从 Kinesis(未提及是否通过 Firehose)传输到 Redshift 比逐个发送准备好的语句更可取。量肯定很小,大概有几千条记录。更关心的是可靠性:在 Lambda 中编写额外代码以确保所有插入操作成功的成本。
  • 顺便问一下,选择S3会稍微容易一些吗? AWS Lambda => S3 => COPY => Redshift?
  • “我在某处读到,将数据从 Kinesis(未提及是否通过 Firehose)传输到 Redshift 是首选....”当然这是 Kinesis Firehose,它仍在幕后在向 Redshift 发出 COPY 命令之前将数据生成到 S3。这是docs.aws.amazon.com/ses/latest/DeveloperGuide/… 的例子之一
  • Firehose 的好处是您无需编写任何代码/Lambda 即可插入数据。 Firehose 还原生处理背压,未传递的数据将被发送到另一个 S3 存储桶,您可以使用它向 Redshift 发出另一个 COPY 命令。 --> 通过错误/异常处理减少您编写 Lambda 的工作量和成本。
  • "顺便说一句,选择 S3 会稍微容易一些吗?AWS Lambda => S3 => COPY => Redshift?" 这将通过不使用 Firehose 来节省一些成本,但您的 Lambda 必须在 S3 中处理对象创建并处理错误/异常。请记住,过于频繁地写入 S3 可能会产生额外费用(S3 按读/写请求数收费),而使用 Firehose,您可以设置 S3 缓冲区(按大小或固定间隔)并仅在必要时写入 S3
猜你喜欢
  • 2021-12-22
  • 2017-11-05
  • 1970-01-01
  • 2018-01-30
  • 1970-01-01
  • 2023-01-01
  • 2021-08-19
  • 1970-01-01
  • 2015-08-18
相关资源
最近更新 更多