Artillery结合AWS Lambda在eu-west-1区域超时问题求助
问题概述
我是Artillery新手,已安装nvs及Node.js 20.2.0版本,使用最新版Artillery。在结合AWS Lambda运行性能测试时,eu-west-1区域触发超时错误。执行Artillery的AWS Lambda命令时出错,但Artillery生成的zip包已成功上传至S3存储桶。
错误日志
λ Creating AWS Lambda function... - Bundling test data - acFamily.yml - Installing dependencies - Installing extra engines & plugins: artillery-plugin-http-ssl, artillery-engine-lambda - Creating zip package Preparing AWS environment... - C:\ProgramData\nvs\node_modules\artillery\node_modules\aws-sdk\lib\http\node.js:87 errCallback(AWS.util.error(new Error(msg), {code: 'TimeoutError'})); ^
Error [TimeoutError]: Connection timed out after 120000ms
at ClientRequest. (C:\ProgramData\nvs\node_modules\artillery\node_modules\aws-sdk\lib\http\node.js:87:34)
at Object.onceWrapper (node:events:625:28)
at ClientRequest.emit (node:events:511:28)
at ClientRequest.emit (node:domain:489:12)
at TLSSocket.emitRequestTimeout (node:_http_client:840:9)
at Object.onceWrapper (node:events:625:28)
at TLSSocket.emit (node:events:523:35)
at TLSSocket.emit (node:domain:489:12)
at Socket._onTimeout (node:net:583:8)
at listOnTimeout (node:internal/timers:573:17) {
code: 'TimeoutError',
time: 2023-12-13T07:15:02.756Z,
region: 'eu-west-1',
hostname: 'artilleryio-test-data-eu-west-1-{IAM}.s3.eu-west-1.amazonaws.com',
retryable: true
}
Node.js v20.2.0
排查与解决步骤
验证网络连通性
确认本地网络可访问eu-west-1区域的AWS服务端点。用curl测试目标S3桶的连通性:curl -v https://artilleryio-test-data-eu-west-1-{IAM}.s3.eu-west-1.amazonaws.com若无法访问,检查防火墙、代理设置,或确保网络未限制AWS服务访问。
延长AWS SDK超时时间
Artillery依赖的AWS SDK默认超时120秒,可通过环境变量调整:export AWS_HTTP_TIMEOUT=300000 # 设为5分钟也可在Artillery测试配置文件中添加超时设置:
config: aws: httpOptions: timeout: 300000检查IAM权限配置
确保执行命令的IAM实体拥有以下权限:lambda:CreateFunctionlambda:UpdateFunctionCodes3:GetObject(针对测试数据所在S3桶)iam:PassRole(若Lambda需要关联执行角色)
确认权限未被区域限制,且未遗漏必要操作权限。
修复Node.js与AWS SDK兼容性
Node.js 20部分版本与AWS SDK存在兼容性问题,尝试降级Artillery依赖的AWS SDK:- 进入Artillery安装目录:
cd C:\ProgramData\nvs\node_modules\artillery - 安装兼容版本:
npm install aws-sdk@2.1470.0 - 重新运行Artillery命令。
- 进入Artillery安装目录:
检查S3桶访问限制
确认S3桶的访问策略允许当前IAM实体访问,且桶未设置IP白名单等严格网络限制,导致Artillery无法读取测试数据。
内容的提问来源于stack exchange,提问作者Sarath

