在AWS Lambda上运行Artillery负载测试时遇错误求助
Artillery AWS Lambda负载测试失败排查方案
已知信息:
- 测试配置文件
rediscache.yml在2023年9月可正常执行 - 当前执行命令:
artillery run rediscache.yml --platform aws:lambda --platform-opt region=us-east-1 - 错误提示:IAM用户无
lambda:CreateFunction权限(根据截图内容)
1. 修复IAM权限问题
这是当前报错的直接原因,需为执行测试的IAM身份(用户/角色)添加对应权限:
- 至少包含以下权限:
lambda:CreateFunction、lambda:InvokeFunction、lambda:DeleteFunction、iam:PassRole - 政策资源范围需覆盖目标区域(us-east-1)的Artillery相关Lambda函数,示例资源格式:
arn:aws:lambda:us-east-1:你的AWS账号ID:function:artillery-* - 测试阶段可临时添加托管政策
AWSLambdaFullAccess验证,生产环境建议配置最小权限政策
2. 校验Artillery及插件版本兼容性
2023年9月至今Artillery可能有版本更新,导致旧配置不兼容:
- 执行
artillery --version查看当前版本,对比2023年9月使用的版本 - 若版本差异大,尝试降级到历史可用版本,例如:
npm install -g artillery@2.0.0-rc.12(需根据实际历史版本调整) - 同步更新或重新安装Redis插件:
npm install -g artillery-plugin-redis
3. 指定Lambda兼容运行时
AWS可能调整了Lambda默认运行时,导致Artillery依赖的Node.js版本不再被支持:
- 在命令行添加运行时参数:
artillery run rediscache.yml --platform aws:lambda --platform-opt region=us-east-1 --platform-opt runtime=nodejs18.x - 或在
rediscache.yml的config段中添加平台配置:config: target: "redis://your-redis-endpoint:6379" phases: - duration: 60 arrivalRate: 10 platform: aws:lambda: runtime: nodejs18.x plugins: redis: {}
4. 验证Redis连接配置有效性
排查Redis服务的访问配置是否变更:
- 确认
rediscache.yml中target的Redis端点、端口是否正确 - 若使用AWS ElastiCache,检查Lambda是否与Redis在同一VPC,安全组是否允许Lambda访问Redis端口(6379)
- 若Redis启用了密码验证,需在配置中添加
password字段
内容的提问来源于stack exchange,提问作者Satya Lochun
相关产品推荐
相关产品推荐

