数据工程 - 用于高效提取数据的基础设施/服务 (AWS)



让我们假设标准数据工程问题:

  • 每天凌晨 3:00 连接到 API
  • 下载数据
  • 将它们存储在数据湖中

假设有一个 python 脚本可以执行 API 命中和存储,但这并不那么重要。

理想情况下,我希望有一些服务能够活跃起来,运行此脚本并杀死自己......到目前为止,我考虑了这些可能性(使用 AWS 服务(:

  1. (AWS( Lambda- FaaS,非常适合用例。但是有一个问题:功能带宽(有限的 RAM/CPU(和 5 分钟的超时。
  2. (AWS( Lambda + Step Functions + range Requests:并行触发多个 Lambda,每个 Lambda 下载文件的一部分。通过步骤功能进行协调。它解决了1(的问题,但感觉很复杂。
  3. (AWS EC2( 静态虚拟机:经典方法:我有一个虚拟机,我有一个 python 解释器,我有一个 cron -> 每天晚上我运行脚本。或者每天晚上,我都可以使用 CloudFormation 触发新 EC2 机器的构建,运行脚本,然后终止它。问题:感觉很老派 - 好像必须有更好的方法来做到这一点。
  4. (AWS ECS( Docker:我对 docker 的经验很少。可能类似于 VM 情况,但感觉更通用/可控。我不知道这种工作是否有一个好的编排器,它有多容易(解雇码头工人并杀死它(

我怎么看:

  1. 正是我想要的,但由于资源限制,它不适合下载大数据。
  2. 1( 的复杂解决方法
  3. 感觉很老派,额外的DevOps费用
  4. 对这个话题了解不多,感觉就像当前最先进的

我的问题是:这种工作的当前技术水平如何?哪些服务是有用的,它们的经验是什么?

#3 的变体...使用用户数据脚本启动 Linux Amazon EC2 实例,关闭行为设置为终止

用户数据脚本执行下载并将数据复制到 Amazon S3。然后,它会执行sudo shutdown -h以关闭实例。(或者,如果脚本很复杂,则用户数据脚本可以从 S3 存储桶下载程序,然后执行它。

Linux EC2 实例现在按秒收费,因此可以将其视为具有更多磁盘空间且没有 5 分钟限制的更大版本的 Lambda。

无需使用 CloudFormation 启动实例,因为这样您只需要删除CloudFormation堆栈即可。相反,只需使用必要的参数直接启动实例。您甚至可以使用参数创建启动模板,然后使用启动模板启动实例。

您甚至可以在流程中添加一些智能,并使用 Spot 定价启动实例(将出价设置为正常的按需定价,因为最坏的情况您只需支付正常价格(。如果 Spot 实例由于备用容量不足而无法启动,请改为启动按需实例。

最新更新