You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS上每日定时运行Docker化Python脚本并发送结果邮件

AWS平台每日定时运行Docker化Python脚本+结果邮件通知最佳实践

最适合你这个场景的无服务器落地方案是Amazon EventBridge Scheduler + Amazon ECS Fargate + Amazon SES组合,全程不需要维护常驻服务器,运维成本几乎为0,按实际用量付费,稳定性远高于自己搭虚机跑定时任务的方案。

选型逻辑

  • 不推荐常驻EC2实例跑cron的方案:不需要做系统补丁、进程保活、异常重启恢复这类重复运维工作,也不用为24小时闲置的计算资源付费
  • 不推荐Lambda容器镜像方案:Lambda容器冷启动延迟高,单次执行最长15分钟的硬限制适配性差,自定义依赖的兼容坑远多于直接跑标准Docker容器的Fargate
  • 不推荐自建邮件服务/第三方邮件API:AWS原生SES服务送达率有保障,不用处理发信端口被封、邮件进垃圾箱、接口限频这类杂事

落地步骤

1. 容器镜像准备

  • 把你已经Docker化完成的Python脚本镜像推送到Amazon ECR私有镜像仓库,不要在镜像里硬编码发件人凭证、收件人列表这类敏感信息,预留环境变量注入入口
  • 调整脚本收尾逻辑:核心业务逻辑执行完成后,直接调用AWS SES SDK发送结果邮件,邮件内容可以直接拼接执行日志、状态码,有报表类附件也可以直接通过SES的RawMail接口附带发送

注意:绝大多数Python定时脚本单次执行时长都在15分钟内,用Fargate默认的临时存储就足够;如果你的脚本单次执行超过15分钟,给任务挂载一个低容量EFS卷存临时文件即可,不需要额外配置其他存储服务。

2. 定时规则配置

  • 进入EventBridge Scheduler新建定时规则,调度类型选cron表达式,填写你需要的每日指定运行时间,一定要选对业务对应的时区,默认UTC时区很容易出现执行时间差8小时的问题
  • 规则触发目标直接选择「启动ECS Fargate任务」,关联你上传到ECR的镜像,根据脚本资源需求配置CPU、内存规格(普通Python数据处理/爬虫类脚本选0.25vCPU + 0.5GB内存完全够用)
  • 任务配置里开启「执行完成后自动终止任务」开关,避免任务异常挂住空跑产生不必要的费用
  • 给Fargate任务绑定的执行角色配置两个最小权限:① 允许拉取对应ECR仓库的镜像 ② 允许调用SES的发信接口
  • 收件人列表直接通过任务环境变量注入即可,支持任意数量收件人,脚本启动时读取环境变量遍历传入SES发信接口就行。

3. 邮件服务配置

  • 提前在SES控制台验证你的发件人邮箱或域名,新SES账号默认在沙箱模式下只能给已验证的邮箱发信,提交简单的使用申请就能解锁生产模式,给任意邮箱发信
  • 如果需要给固定n个收件人发信,直接把收件人列表写在任务环境变量里就行;如果后续需要动态调整收件人,也可以把列表存在AWS Systems Manager参数存储里,脚本启动时拉取即可,不用重新构建镜像。

4. 异常兜底配置

  • 给EventBridge定时规则配置重试策略:默认重试2次,间隔1分钟,覆盖偶发网络波动、服务临时不可用导致的执行失败场景
  • 给规则绑定SQS死信队列,多次重试仍然失败的事件会投递到队列里,可以简单配置个CloudWatch告警,任务执行失败时及时发通知
  • 开启Fargate任务的日志采集,把执行日志投递到CloudWatch Logs,出问题时可以直接回溯全量执行日志,不需要登录服务器排查。

成本参考

这套方案没有固定成本,按实际使用量计费:

  • Fargate按任务运行的秒数收费,每天跑1次、单次执行5分钟的话,单月计算成本不到0.5美元
  • EventBridge Scheduler每月有1400万次的免费调度额度,单规则的调度成本几乎可以忽略
  • SES发信成本约每1000封邮件0.1美元,批量发信成本远低于第三方服务

内容的提问来源于stack exchange,提问作者J Developer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 23:27:11