让我们假设标准数据工程问题:
- 每天凌晨 3:00 连接到 API
- 下载数据
- 将它们存储在数据湖中
假设有一个 python 脚本可以执行 API 命中和存储,但这并不那么重要。
理想情况下,我希望有一些服务能够活跃起来,运行此脚本并杀死自己......到目前为止,我考虑了这些可能性(使用 AWS 服务(:
- (AWS( Lambda- FaaS,非常适合用例。但是有一个问题:功能带宽(有限的 RAM/CPU(和 5 分钟的超时。
- (AWS( Lambda + Step Functions + range Requests:并行触发多个 Lambda,每个 Lambda 下载文件的一部分。通过步骤功能进行协调。它解决了1(的问题,但感觉很复杂。
- (AWS EC2( 静态虚拟机:经典方法:我有一个虚拟机,我有一个 python 解释器,我有一个 cron -> 每天晚上我运行脚本。或者每天晚上,我都可以使用 CloudFormation 触发新 EC2 机器的构建,运行脚本,然后终止它。问题:感觉很老派 - 好像必须有更好的方法来做到这一点。
- (AWS ECS( Docker:我对 docker 的经验很少。可能类似于 VM 情况,但感觉更通用/可控。我不知道这种工作是否有一个好的编排器,它有多容易(解雇码头工人并杀死它(
我怎么看:
- 正是我想要的,但由于资源限制,它不适合下载大数据。
- 1( 的复杂解决方法
- 感觉很老派,额外的DevOps费用
- 对这个话题了解不多,感觉就像当前最先进的
我的问题是:这种工作的当前技术水平如何?哪些服务是有用的,它们的经验是什么?
#3 的变体...使用用户数据脚本启动 Linux Amazon EC2 实例,关闭行为设置为终止。
用户数据脚本执行下载并将数据复制到 Amazon S3。然后,它会执行sudo shutdown -h
以关闭实例。(或者,如果脚本很复杂,则用户数据脚本可以从 S3 存储桶下载程序,然后执行它。
Linux EC2 实例现在按秒收费,因此可以将其视为具有更多磁盘空间且没有 5 分钟限制的更大版本的 Lambda。
无需使用 CloudFormation 启动实例,因为这样您只需要删除CloudFormation堆栈即可。相反,只需使用必要的参数直接启动实例。您甚至可以使用参数创建启动模板,然后使用启动模板启动实例。
您甚至可以在流程中添加一些智能,并使用 Spot 定价启动实例(将出价设置为正常的按需定价,因为最坏的情况您只需支付正常价格(。如果 Spot 实例由于备用容量不足而无法启动,请改为启动按需实例。