考虑到成本和性能,使用 AWS Scheduler 的最佳方式是什么

What is the best way to use AWS Scheduler considering cost and performance

我正在开发一个将文件上传到 AWS S3 存储桶的 JAVA 项目。现在我需要每天 8:00 a.m 在 S3 中处理这些文件(验证并将数据发送到数据库)。我打算为此使用 AWS 调度程序。但是我很困惑我必须使用什么调度程序以及如何使用。我浏览了文档并通过 Lambda 找到了有关 AWS BatchAWS 云监视调度程序的信息。但我不知道在这种情况下使用 AWS 调度程序的最佳方式是什么。不确定天气 AWS Batch 是否适用于此。其实我也需要考虑成本。 如果你能建议我解决这个问题的最佳方法,我很高兴。也欢迎使用其他方法。

P.S: 文件处理时间将超过 15 分钟。而且我还需要配置其他几个调度程序。

一种方式(AWS 总是有很多方式)是通过 EventBridge(前身为 CloudWatch Events 和 AWS Lambda)。我以前没有使用过 AWS Batch。

编码并部署您的 AWS Lambda 函数。在您的 Lambda 中,您访问 S3 存储桶、验证并将数据发送到数据库。

如果您打开 AWS 控制台,请转到您的 Lambda 函数。接下来添加触发器和 select EventBridge。

现在您可以创建新规则了。要使其每天早上 8 点 运行,您的日程表表达式是 cron(0 8 * * ? *)

一些注意事项:

  • 不要忘记 Lambda 永远不会 运行 超过 15 分钟
  • 时间表表达式采用 UTC 而不是当地时间。夏令时是个问题。

我在这里提出的解决方案是

  1. 使用 Clouwatch 规则在早上 8 点触发 lambda。 (例如:SchedulerLambda)
  2. SchedulerLambda 不会处理任何文件,它会在 'defined' 位置列出文件。
  3. 对于每个文件,SchedulerLambda 都会向主题发送一条 SNS 消息
  4. SNS 有 SQS 订阅
  5. SQS 有一个 Lambda 触发器(例如:FileProcessorLambda)
  6. FileProcessorLambda 将按批处理(最大为 10)。您可以根据您的用例调整多个批次。
  7. FileProcessorLambda 完成文件后,它也会将状态跟踪到 DynamoDB。随时重试恢复的原因

注意:这里的设计是以成本、扩展、维护和设计(松耦合)为优先。

注意:这里的假设是处理一个文件(单个文件)不会超过 15 分钟作为 lambda 的限制。如果文件的处理时间超过 15 分钟,上述解决方案将不起作用。如果你确认我可以给出另一个解决方案