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

如何通过Serverless实现AWS Lambda仅高峰时段启用Provisioned Concurrency

按需在高峰时段启用Lambda预置并发以降低成本

直接在serverless.yml里固定配置provisionedConcurrency: 150会让预置实例全天候运行,确实会造成非高峰时段的成本浪费。下面是两种可靠的方案实现按需启停:

方案一:用EventBridge(原CloudWatch Events)+ 自定义Lambda函数自动化调整

这种方案灵活性最高,完全自定义调度逻辑:

  1. 编写调整预置并发的Lambda函数
    用AWS SDK调用专门的预置并发配置API,示例Python代码如下:

    import boto3
    
    lambda_client = boto3.client('lambda')
    
    def lambda_handler(event, context):
        # 替换成你的目标Lambda函数名
        target_function = 'your-service-api'
        # 从事件中获取期望的并发数
        target_concurrency = event['target_concurrency']
    
        try:
            # 配置/更新预置并发(支持版本或别名,这里用$LATEST示例)
            lambda_client.put_provisioned_concurrency_config(
                FunctionName=target_function,
                Qualifier='$LATEST',
                ProvisionedConcurrentExecutions=target_concurrency
            )
            print(f"已成功将预置并发设置为 {target_concurrency}")
            return {"status": "success", "concurrency": target_concurrency}
        except Exception as e:
            print(f"配置失败:{str(e)}")
            raise e
    
  2. 配置EventBridge调度规则
    创建两个定时规则,分别控制高峰启动和结束:

    • 高峰启动规则:比如每天上午9点(转换为UTC时间,假设你的时区是UTC+8,那UTC时间是1点),触发时传递{"target_concurrency": 150}
    • 高峰结束规则:比如每天下午6点(UTC时间10点),触发时传递{"target_concurrency": 0}
  3. 配置IAM权限
    给调整函数附加IAM策略,允许它修改目标Lambda的预置并发:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "lambda:PutProvisionedConcurrencyConfig",
                "Resource": "arn:aws:lambda:你的区域:账号ID:function:your-service-api:*"
            }
        ]
    }
    

方案二:用Serverless Framework插件简化配置

如果不想写自定义函数,可以用社区插件serverless-plugin-schedule-provisioned-concurrency来快速实现:

  1. 安装插件

    npm install serverless-plugin-schedule-provisioned-concurrency --save-dev
    
  2. 修改serverless.yml配置
    默认把预置并发设为0,然后通过定时事件触发调整:

    plugins:
      - serverless-plugin-schedule-provisioned-concurrency
    
    functions:
      api:
        handler: index.handler
        provisionedConcurrency: 0 # 默认关闭
        events:
          # 高峰启动:每天UTC时间9点(根据你的业务时区调整)
          - schedule:
              rate: cron(0 9 * * ? *)
              input: '{"action": "set", "provisionedConcurrency": 150}'
          # 高峰结束:每天UTC时间18点
          - schedule:
              rate: cron(0 18 * * ? *)
              input: '{"action": "set", "provisionedConcurrency": 0}'
    

关键注意事项

  • 时区转换:EventBridge的cron表达式默认使用UTC,一定要把你的业务高峰时间转换成UTC再配置
  • 版本/别名:推荐给Lambda配置别名(比如prod)来绑定预置并发,避免更新$LATEST版本导致配置失效
  • 监控验证:在CloudWatch控制台查看预置并发的指标(ProvisionedConcurrentExecutions),确保定时调整生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 10:10:15