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

如何在多台EC2 Spot实例上运行Python脚本并批量启停?

在100台EC2 Spot实例部署爬虫并定时停止的实现方案

首选方案:AWS Batch(一站式批量任务编排)

AWS Batch专为批量计算场景设计,能自动处理Spot实例的创建、任务分发、资源清理,完全匹配你的需求,无需手动管理实例生命周期。

具体步骤:

  1. 打包爬虫脚本为Docker镜像

    • 把Python脚本、依赖库打包成Docker镜像,推送到AWS ECR(容器注册表)。如果不想用容器,也可以选择EC2类型的Batch环境,直接用自定义AMI。
    • 创建Batch任务定义:指定镜像地址、运行命令(如python /app/spider.py),分配对应CPU/内存资源。
  2. 配置Spot计算环境

    • 创建Batch计算环境时选择Spot实例类型,设置实例数量上限为100,指定合适的实例规格(比如t3.medium,根据脚本资源消耗选择)。
    • 配置IAM角色,赋予Batch创建/管理EC2实例、访问ECR的权限。
  3. 创建作业队列并提交任务

    • 创建作业队列并关联上述计算环境。
    • 提交作业数组(数量设为100)到队列,Batch会自动启动100台Spot实例并行执行任务;也可以单独提交100个作业。
  4. 自动终止实例

    • Batch默认会在任务完成后,根据计算环境的Minimum vCPUs配置(设为0)自动终止空闲Spot实例。
    • 若要强制一小时后停止,可在任务定义中设置超时时间为3600秒,超时后Batch会终止任务并清理实例;也可通过CloudWatch Events触发Lambda,定时终止计算环境内的实例。

备选方案:EC2 Auto Scaling + Lambda + CloudWatch Events

如果偏好直接使用EC2实例而非容器,可采用这套手动编排方案:

具体步骤:

  1. 制作自定义AMI

    • 启动一台EC2实例,安装Python、爬虫依赖,将脚本放到实例指定目录(如/opt/spider/)。
    • 设置开机自启动(比如用systemd编写服务,或在rc.local中添加python /opt/spider/your_script.py &),确保实例启动后自动运行脚本。
    • 将该实例创建为自定义AMI,供Auto Scaling使用。
  2. 创建Spot实例Auto Scaling组

    • 创建Launch Template,指定自定义AMI、实例规格、Spot价格上限。
    • 创建Auto Scaling组,设置期望容量、最小容量、最大容量均为100,确保一次性启动100台Spot实例。
    • 配置IAM角色,赋予Auto Scaling创建Spot实例的权限。
  3. 定时停止实例

    • 在CloudWatch Events中创建定时规则,触发时间设为实例启动后一小时(或固定时间,若为一次性任务)。
    • 触发Lambda函数,在函数中调用AWS SDK(如boto3):要么更新Auto Scaling组的期望容量为0,让其自动终止所有实例;要么直接调用EC2 API终止所有实例。
  4. 可选:日志监控

    • 配置脚本将运行日志上传到CloudWatch Logs,方便后续排查问题。

关键注意事项

  • Spot实例中断处理:Spot实例可能被AWS回收,建议在爬虫脚本中实现断点续爬逻辑,或在Batch中开启任务重试机制,确保任务能在其他实例上继续执行。
  • IAM权限配置:确保Batch、Auto Scaling、Lambda等服务的IAM角色拥有足够权限,比如Batch需要ec2:RunInstances、ec2:TerminateInstances权限,Lambda需要autoscaling:UpdateAutoScalingGroup权限。
  • 成本控制:设置合理的Spot价格上限,避免成本超支;任务完成后及时终止实例,减少闲置资源消耗。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 16:13:35