【问题标题】:How to set up a time scheduled serverless python job on AWS?如何在 AWS 上设置时间安排的无服务器 python 作业?
【发布时间】:2021-07-02 00:12:05
【问题描述】:

我想使用 AWS 定期(例如每天早上 6 点)执行以下任务:

  • 使用 API 获取新的数据集。该数据集每天更新。
  • 运行一个 python 脚本,该脚本将通过 matplotlib、pandas、plotly 等几个 python 库处理获得的数据集
  • 自动将脚本的输出(可能是单个 pdf 文件或 html 仪表板)通过电子邮件发送给一组指定的收件人

我知道如何在本地执行上述所有项目 - 我的目标是自动执行此例程。我是 AWS 的新手,希望能得到一些关于如何以简单的方式执行这些任务的建议。根据我目前所做的阅读,看起来无服务器方法可能能够完成这项工作并降低复杂性,但我不确定我应该使用哪些功能。

【问题讨论】:

  • 1.查看 SAM。它使部署 lambdas 更容易。 2.你需要为你的库使用一个层,你需要在linux上打包它们,因为你在windows上打包的那些在lambda上不起作用。 3. boto3 库会帮助你

标签: amazon-web-services aws-lambda amazon-cloudwatch aws-serverless aws-batch


【解决方案1】:

对于日程安排,您可以使用aws event bridge。 您可以安排AWS lambdaAWS Step Functions 这两者都是无服务器的:)。

你可以有 3 个 lambdas

  1. 获取数据并将其保存在 S3/dynamo 中(如果要持久化数据)
  2. 处理器 lambda 并将报告保存到 S3。
  3. 另一个 lambda to send email 使用 AWS SES 将从 S3 读取报告并发送。

如果您不想使用步进函数,您可以从 S3 put 事件启动您的 lambda,或者您可以使用 aws-sdk 从另一个 lambda 触发一个 lambda。

【讨论】:

  • 为什么是三个独立的 lambda?
  • 便于维护和调试。
  • @Neil AWS 还建议遵循 lambdas 的单一责任原则。看一篇关于介质的文章。 betterprogramming.pub/…
【解决方案2】:

因此,您可以采取不同的方法。

首先,我会创建一个Lambda。您可以安排该函数在 cron 作业上运行。

如果您要发送的消息很小:

我会创建一个带有电子邮件扇出的SNS Topic

在您的 lambda 中,您可以转换数据并通过 SNS 发送出去。

否则:

我会使用 SES 并通过 the SES SDK 发送邮件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-28
    • 2019-01-28
    • 1970-01-01
    • 2016-01-17
    • 2021-04-28
    • 2019-10-01
    • 1970-01-01
    • 2015-06-27
    相关资源
    最近更新 更多