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

AWS替代Cron的方案:定时运行Python脚本更新S3托管站点

AWS定时更新S3天气站点数据的方案与步骤

首选方案:Lambda + EventBridge

这是AWS生态里适配轻量定时任务的最优组合,无需管理服务器,按实际调用量计费,完全匹配你的爬虫更新需求。

步骤1:适配Lambda的Python爬虫代码

把你的本地爬虫脚本改成Lambda兼容格式:

  • 必须包含lambda_handler(event, context)作为入口函数
  • 替换本地文件写入逻辑为AWS SDK(boto3)的S3上传代码
  • 核心代码示例:
    import boto3
    import requests
    
    s3_client = boto3.client('s3')
    TARGET_BUCKET = '你的S3桶名称'
    
    def lambda_handler(event, context):
        # 爬虫逻辑:获取天气数据
        raw_weather_data = requests.get('目标天气数据源URL').content
        # 上传到S3的data目录
        s3_client.put_object(
            Bucket=TARGET_BUCKET,
            Key='data/weather_update.json',  # 替换为你的实际文件名
            Body=raw_weather_data
        )
        return {'statusCode': 200, 'body': '数据更新完成'}
    
  • 若脚本依赖第三方库(如非标准库),需打包成Lambda层或直接包含在部署压缩包中。

步骤2:创建Lambda函数

  1. 登录AWS控制台,进入Lambda服务页面
  2. 点击「创建函数」,选择「从头开始创作」
  3. 填写函数名称,运行时选与脚本兼容的Python版本
  4. 权限选择「创建新角色,带有基本Lambda权限」,后续需给该角色补充S3写入权限
  5. 点击「创建函数」,在「代码」标签页粘贴调整后的爬虫代码

步骤3:配置Lambda角色的S3权限

  1. 进入Lambda函数的「配置」标签页,点击「权限」模块下的执行角色链接
  2. 在IAM控制台中,给该角色添加内联策略,示例JSON:
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "s3:PutObject",
                "Resource": "arn:aws:s3:::你的S3桶名称/data/*"
            }
        ]
    }
    
  3. 保存策略,确保Lambda具备写入S3 data目录的权限

步骤4:用EventBridge设置定时触发

  1. 在Lambda函数的「配置」标签页,点击「触发器」→「添加触发器」
  2. 触发器类型选「EventBridge(CloudWatch Events)」
  3. 选择「创建新规则」,填写规则名称
  4. 规则类型选「计划表达式」,比如每3小时运行的表达式为cron(0 */3 * * ? *)(AWS cron格式:分 时 日 月 周 年)
  5. 点击「添加」完成配置

其他可选方案

方案2:EC2实例+crontab

若你的爬虫依赖复杂环境、Lambda打包困难,可选择EC2:

  • 启动一台EC2实例,安装Python及所需依赖
  • 上传爬虫脚本,调整为直接用boto3写入S3,或先存本地再用s3 sync命令同步
  • 执行crontab -e添加定时任务,示例:0 */3 * * * python3 /home/ec2-user/your_script.py
  • 注意:给EC2实例的IAM角色添加S3权限,或配置本地AWS凭证

方案3:AWS Batch(重负载场景)

若爬虫需大量计算、运行时间超过15分钟(Lambda最大超时),可使用Batch:

  • 创建Job Definition,定义运行爬虫的容器或脚本环境
  • 用EventBridge定时触发Batch Job
  • 适合数据量大、执行时间长的爬虫任务

测试与验证

  • 手动触发Lambda函数,查看「监控」标签页的CloudWatch日志,确认数据是否成功上传至S3
  • 等待定时任务触发时间,检查S3的data目录是否生成新文件
  • 若遇权限问题,优先排查IAM角色的权限范围是否正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 17:23:31