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

时间:2018-09-11 11:22:14

标签: amazon-web-services docker aws-lambda etl data-extraction

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

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

假设有一个Python脚本可以完成API的命中和存储,但这并不重要。

理想情况下,我希望一些服务可以运行,运行该脚本并杀死自己……到目前为止,我考虑了这些可能性(使用AWS服务):

  1. (AWS)Lambda -FaaS,非常适合用例。但是存在一个问题:该功能的带宽(有限的RAM / CPU)和5分钟的超时时间。
  2. (AWS)Lambda +步函数+范围请求:并行触发多个Lambda,每个Lambda都会下载文件的一部分。通过步进功能进行协调。它解决了1)的问题,但感觉非常复杂。
  3. (AWS EC2)静态VM :经典方法:我有一个VM,我有一个python解释器,我有一个cron->每天晚上运行脚本。或者每天晚上,我可以使用CloudFormation触发新EC2机器的构建,运行脚本然后将其杀死。问题:感觉很老派-就像必须有一种更好的方法。
  4. (AWS ECS)Docker :我对Docker的经验很少。可能类似于VM的情况,但感觉更加通用/可控制。我不知道是否有一个好的编排人员可以完成这种工作,这有多么容易(解雇docker并杀死它)

我怎么看:

  1. 这正是我想要的,但是由于资源限制,它不利于下载大数据。
  2. 1)的复杂解决方法
  3. 感觉很老派,增加了开发费用
  4. 对这个话题不太了解,感觉就像是最新的技术

我的问题是:这种工作的当前最新状态是什么?哪些服务有用,并且有什么体验?

1 个答案:

答案 0 :(得分:1)

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

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

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

无需使用CloudFormation 来启动实例,因为那样的话,您只需要删除CloudFormation堆栈即可。而是直接使用必要的参数启动实例。您甚至可以使用参数创建启动模板,然后使用启动模板简单地启动实例。

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