新创建的sam init项目执行sam local invoke出现超时问题如何解决?
问题可能原因
- 函数逻辑阻塞:你使用的Web后端模板默认逻辑会访问DynamoDB服务,本地调用时既没有配置本地DynamoDB实例,也没有配置合法的云上DynamoDB访问权限/网络连通性,会导致DynamoDB请求一直挂起直到超时。
- 代码异常挂死:Handler存在未捕获的异常、依赖包安装缺失,会导致Node.js runtime卡住无法返回响应。
- Docker运行异常:SAM本地调用依赖Docker运行时,Docker资源分配不足(CPU/内存不够)、本地镜像损坏都会导致容器内代码无法正常执行。
- 网络配置错误:本地存在代理配置但Docker容器无法连通代理,或者本地网络无法访问AWS服务端点,会导致跨网请求挂起。
调试排查步骤
- 先简化代码验证基础流程
先临时修改src/handlers/get-all-items.js的Handler逻辑,注释掉所有DynamoDB相关代码,直接返回固定响应,验证调用链路是否正常:
exports.getAllItemsHandler = async (event) => { return { statusCode: 200, body: JSON.stringify({ test: "success" }) }; };
执行sam build && sam local invoke -e ./events/event-get-all-items.json getAllItemsFunction,如果可以正常返回,说明问题出在DynamoDB访问逻辑上,后续只要配置本地DynamoDB实例或者给本地环境配置有权限访问对应云上表的AWS凭证即可。
缩短超时时间提升测试效率
打开项目根目录的template.yaml,找到getAllItemsFunction的配置项,将Timeout参数临时修改为10,避免每次排查都等待100秒超时。开启debug日志定位卡点
执行调用命令时加上--debug参数,输出全链路运行日志,定位具体卡住的步骤:sam local invoke --debug -e ./events/event-get-all-items.json getAllItemsFunction排查Docker相关问题
先确认Docker服务正常运行,且至少分配了2核CPU、4GB内存的运行资源。如果怀疑镜像损坏,可以删除本地SAM镜像后重新执行调用,让SAM自动拉取最新镜像:docker rmi public.ecr.aws/sam/emulation-nodejs14.x:rapid-1.32.0验证依赖与网络配置
进入src/handlers目录执行npm install确认所有依赖安装完整;如果本地配置了网络代理,临时关闭代理后重试,排除代理导致的容器网络不通问题。
内容的提问来源于stack exchange,提问作者Caius Cosades
相关产品推荐
相关产品推荐

