本文目录导读:

关于你的问题,我先明确一下:“批量搞” Serverless 通常指的是批量部署、批量配置、批量调用或批量迁移函数/API。
目前确实有一些非常实用的脚本工具和框架,可以帮你高效地批量操作 Serverless 资源,但需要提醒一句:批量操作往往是在短时间内产生大量请求,请务必注意云平台的 API 频率限制(Rate Limit)和配额(Quota),否则容易被限流或误封。
以下分场景介绍几种常用的批量脚本方案(以主流云厂商如 AWS Lambda、阿里云函数计算、腾讯云 SCF 为例):
批量部署/更新函数
场景:你有几十个函数需要从本地代码部署到云端,或者修改了公共依赖后需要全部更新。
核心工具:
- Terraform / Pulumi (IaC): 声明式批量管理,支持批量部署、更新、销毁,这是最健壮的方式。
- AWS CLI + jq: 写一个 Shell 脚本循环遍历
functions.json文件,调用aws lambda update-function-code。 - Serverless Framework / SAM: 自带
sls deploy function -f <函数名>支持逐个或批量(通过配置文件)。
示例脚本片段(基于 AWS CLI + Bash):
#!/bin/bash
# 假设你有一个 functions.txt,每行一个函数名
while read -r func_name; do
echo "Deploying $func_name..."
aws lambda update-function-code \
--function-name $func_name \
--zip-file fileb://./function-bundle.zip \
--region us-east-1
# 注意:建议加一个 sleep 0.5 避免超频
sleep 0.5
done < functions.txt
批量修改配置(环境变量、超时时间、内存)
场景:你想把一批函数的超时时间从 5 秒改成 10 秒,或者批量添加一个通用的环境变量。
核心工具:
- 云厂商 SDK(如 boto3 for AWS):用 Python 脚本遍历资源列表,调用
update_function_configuration。 - CloudFormation StackSets / 资源编排:适合跨账号/跨地域批量修改。
Python 脚本示例(阿里云 FC):
import json
import time
from aliyunsdkcore.client import AcsClient
from aliyunsdkfc.request.v20160815 import *
# 假设你有一个函数列表
funcs = ["func-a", "func-b", "func-c"]
client = AcsClient('ak', 'sk', 'cn-hangzhou')
for f in funcs:
request = UpdateFunctionRequest.UpdateFunctionRequest()
request.set_ServiceName("my-service")
request.set_FunctionName(f)
request.set_Timeout(30) # 批量改为30秒
request.set_MemorySize(1024)
# 发送请求
response = client.do_action_with_exception(request)
print(f"Updated {f}")
time.sleep(0.2)
批量调用/压测
场景:测试全部函数是否可用,或模拟高并发调用。
核心工具:
parallel(GNU Parallel):配合curl或aws lambda invoke快速并行触发。- Locust / Artillery / hey:专门的压测脚本,可以模拟高并发。
- 云平台的 SDK 异步调用:通过消息队列(如 SQS、Kafka)批量触发,不会阻塞。
示例(批量函数调用 + 结果收集):
# 同时调用 10 个函数,并保存返回结果
seq 1 10 | parallel -j10 'aws lambda invoke --function-name my-function --payload "{}" --cli-read-timeout 5 output-{}.json'
批量清理/删除资源
场景:测试环境膨胀,需要删除几百个过时的函数、日志组、触发器。
常用命令(以此类推到其他云厂商):
# AWS: 删除所有名称包含 "test-" 的函数
aws lambda list-functions --query "Functions[?contains(FunctionName,'test-')].FunctionName" --output text | \
while read name; do
aws lambda delete-function --function-name "$name"
echo "Deleted $name"
sleep 0.3
done
⚠️ 善意提醒(安全与合规)
- 频率限制:云厂商有 API 限速(AWS 的
lambda.amazonaws.com每秒最多 10-30 个写入请求),脚本里一定要加sleep或使用指数退避(Exponential Backoff)。 - 幂等性:批量操作脚本最好设计成 可重复执行(比如更新函数:如果代码没变,不要报错)。
- 回滚方案:建议批量修改前,先 导出当前配置(如
aws lambda get-function-configuration),以便快速回滚。 - 敏感信息:脚本中不要硬编码 AK/SK,建议使用环境变量或云平台角色授权。
- 依赖冲突:如果函数间有共享的资源(如 VPC、层、角色),批量修改前确认不会影响其他在线服务。
- 确实有成熟的脚本和工具可以批量操作 Serverless:
Terraform(最工程化)、Shell + CLI(最轻量)、Python SDK(最灵活)。 - 关键不是“能不能”,而是“稳不稳”,建议先对 1-2 个测试函数运行脚本,再加
sleep和重试逻辑。
如果你有具体的场景(比如批量改什么、用哪个云平台),可以告诉我,我可以帮你写一段更具体的脚本模板。