什么是好的架构?我应该使用哪些工具在AWS这样的云中每月下载和处理一次多个文件



Hey Stackflow社区,我正在寻找一个好的架构和工具来满足以下要求:

在每个月的特定日期自动执行:

  • 从互联网上的来源获取要下载的URL列表(目前是一个保存要下载的csv URL的python脚本(
  • 尽可能快地下载和保存pdf文件(并行?(,并处理http错误,如许多请求429(x秒后重试?(和404错误(记录它们(
  • 在python中运行一个脚本,该脚本将遍历每个pdf文件,从文本中提取一些信息,并将它们存储在数据帧中,该数据帧将导出为csv。如何将其并行化?在集群中映射/减少,还是仅仅是一台拥有多个cpu核心的大型机器

我想在AWS这样的云服务上进行设置。

我脑海中的一个解决方案是设置一个气流容器,它可以按顺序启动所有这些任务。在这个解决方案中,我的缺点是我必须为这个集装箱支付整个月的费用,但我每月只需要一次。我不想每次都手动启动和关闭实例。

谢谢你的帮助!

我会自己回答这个问题,因为我找到了一个非常好的解决方案。

我使用了AWS无服务器和PaaS工具。

工作流程/架构如下:

  1. CloudWatch事件在每个月的第一个工作日触发指定的lambda函数
  2. 被调用的lambda函数从AWS CloudWatch调用中提取元数据(即实际时间(,并调用脚本下载csv并将其保存到S3存储服务。然后将调用另一个脚本,并将csv文件的路径作为参数。使用lambda的一个优点是,您可以为每个请求获得另一个IP地址,这样您就不会在速率限制下运行,也不会被阻止
  3. 该脚本使用Map函数启动一些AWS步骤函数。使用AWS步骤函数的原因是为了一次控制最大的请求。如果我对每个文件调用lambda函数,那么超过10000个下载请求将同时到达服务器,这将破坏大多数服务器。由于每个StepFunction实例最多有25000个事件,我不得不将请求拆分为多个StepFunction
  4. 下载的文件将被添加到AWS SQS中的队列中,该队列对每个文件调用lambda函数
  5. lambda函数从SQS中获取文件的地址,并提取将存储在S3中的json文件中每个文件的数据。如果提取失败,文件将被添加到包含失败文件路径的SQS队列中。准备手动处理和修复错误
  6. 将在AWS Glue的帮助下从存储的json文件中创建一个模式
  7. 模式中的数据可以在AWS Athena中查询和提取

最新更新