AWS Lambda提前终止排查求助:控制台测试未执行指定代码
AWS Lambda函数提前终止排查求助
我有一个将由API Gateway触发的AWS Lambda函数,在控制台部署测试时,还没执行到任何@@BP8.x标记的代码就提前终止了。已将内存从128MB提升至512MB,超时设置为10分钟,问题仍未解决。Lambda日志流显示仅执行到@@BP7相关输出,随后直接结束。以下是函数的常规配置、日志内容及简化后的index.js代码,请求协助排查终止原因:
常规配置
- Memory: 512 MB
- Ephemeral storage: 512MB
- Timeout: 0 min 10 sec
Lambda日志流
2022-11-07T21:51:17.622-05:00 2022-11-08T02:51:17.622Z undefined INFO @@BP10 2022-11-07T21:51:17.622-05:00 2022-11-08T02:51:17.622Z undefined INFO @@BP11 2022-11-07T21:51:17.626-05:00 START RequestId: b5697c1a-aac2-4676-b349-3a315fede92e Version: $LATEST 2022-11-07T21:51:17.627-05:00 2022-11-08T02:51:17.627Z b5697c1a-aac2-4676-b349-3a315fede92e INFO @@BP7 2022-11-07T21:51:17.627-05:00 2022-11-08T02:51:17.627Z b5697c1a-aac2-4676-b349-3a315fede92e INFO @@BP7 event= {"type":"VEHICLE_REPAIR","urn":"urn:mycomp:xqa:vehicle:fleetVehicle:202211072142","vin":"<received VIN>","class":"<received vehicle class>","status":"REPAIR","owningLocation":"urn:mycomp:xqa:location:branch<generated id>","spanId":"<received span Id>","traceId":"<generated trace Id>"} 2022-11-07T21:51:17.627-05:00 2022-11-08T02:51:17.627Z b5697c1a-aac2-4676-b349-3a315fede92e INFO @@BP7 context= {"callbackWaitsForEmptyEventLoop":true,"functionVersion":"$LATEST","functionName":"VehicleService","memoryLimitInMB":"512","logGroupName":"/aws/lambda/VehicleService","logStreamName":"2022/11/08/[$LATEST]bcf91d836e4a41da92996935f3e0a306","invokedFunctionArn":"arn:aws:lambda:us-east-1:998414783091:function:VehicleService","awsRequestId":"b5697c1a-aac2-4676-b349-3a315fede92e"} 2022-11-07T21:51:17.627-05:00 2022-11-08T02:51:17.627Z b5697c1a-aac2-4676-b349-3a315fede92e INFO EVENT { "type": "VEHICLE_REPAIR", "urn": "urn:mycomp:xqa:vehicle:fleetVehicle:202211072142", "vin": "<received VIN>", "class": "<received vehicle class>", "status": "REPAIR", "owningLocation": "urn:mycomp:xqa:location:branch<generated id>", "spanId": "<received span Id>", "traceId": "<generated trace Id>" } 2022-11-07T21:51:17.750-05:00 END RequestId: b5697c1a-aac2-4676-b349-3a315fede92e 2022-11-07T21:51:17.750-05:00 REPORT RequestId: b5697c1a-aac2-4676-b349-3a315fede92e Duration: 122.30 ms Billed Duration: 123 ms Memory Size: 512 MB Max Memory Used: 139 MB Init Duration: 788.40 ms
简化后的index.js代码
console.info('@@BP10'); function someFunction() { }).promise(); } console.info('@@BP11'); // Main function exports.handler = async(event, context, callback) => { console.info('@@BP7'); console.info('@@BP7 event=', JSON.stringify(event)); console.info('@@BP7 context=', JSON.stringify(context)); if (event.requestContext != null) { console.info('@@BP8.1 does not run'); doSomeThings(); } else { console.info("@@BP8.2 does not run"); } console.info("@@BP8.3 does not run"); else { console.info("@@BP8.4 does not run"); }
排查结论
问题根源是JavaScript语法错误,导致Lambda执行时提前终止:
- 全局代码中
someFunction的定义存在语法错误:function someFunction() { }).promise(); }多了闭合的)和},属于无效语法; - handler函数的if-else结构完全混乱:
- 第一个
if块闭合后,出现了无对应if条件的独立else; - 整个handler函数缺少闭合的
}; - 代码结构不完整,Lambda执行引擎遇到语法错误会直接终止,无法走到后续@@BP8.x的逻辑。
- 第一个
修复步骤
- 修正全局代码的语法错误,比如将
function someFunction() { }).promise(); }改为合法的函数定义(例如:function someFunction() { return someAsyncCall().promise(); }); - 重构handler函数的条件判断结构,确保语法正确,示例如下:
exports.handler = async(event, context, callback) => { console.info('@@BP7'); console.info('@@BP7 event=', JSON.stringify(event)); console.info('@@BP7 context=', JSON.stringify(context)); if (event.requestContext != null) { console.info('@@BP8.1 does not run'); doSomeThings(); } else { console.info("@@BP8.2 does not run"); console.info("@@BP8.3 does not run"); } // 如需额外判断,补充合法的if-else分支 }; - 修复所有语法错误后重新部署测试,Lambda将正常执行到后续@@BP8.x的代码逻辑。
内容的提问来源于stack exchange,提问作者Woodsman
相关产品推荐
相关产品推荐

