如何通过Serverless实现AWS Lambda仅高峰时段启用Provisioned Concurrency
按需在高峰时段启用Lambda预置并发以降低成本
直接在serverless.yml里固定配置provisionedConcurrency: 150会让预置实例全天候运行,确实会造成非高峰时段的成本浪费。下面是两种可靠的方案实现按需启停:
方案一:用EventBridge(原CloudWatch Events)+ 自定义Lambda函数自动化调整
这种方案灵活性最高,完全自定义调度逻辑:
编写调整预置并发的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配置EventBridge调度规则
创建两个定时规则,分别控制高峰启动和结束:- 高峰启动规则:比如每天上午9点(转换为UTC时间,假设你的时区是UTC+8,那UTC时间是1点),触发时传递
{"target_concurrency": 150} - 高峰结束规则:比如每天下午6点(UTC时间10点),触发时传递
{"target_concurrency": 0}
- 高峰启动规则:比如每天上午9点(转换为UTC时间,假设你的时区是UTC+8,那UTC时间是1点),触发时传递
配置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来快速实现:
安装插件
npm install serverless-plugin-schedule-provisioned-concurrency --save-dev修改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
相关产品推荐
相关产品推荐

