无法更新AWS Lambda函数:新增请求参数不生效求助
AWS Lambda更新后未生效,新增参数仍报错的排查方案
问题背景
原本API仅接受如下格式请求:
https://yh74mgrokc.execute-api.us-west-1.amazonaws.com/dev/ga/answer/qn_type?tag=alexa
修改Lambda函数的校验Schema,添加from和to到允许参数列表:
exports.getAnswerQnTypeSchema = [ query('tag') .exists() .withMessage('tag is required'), query().custom((query) => { const allowedKeys = [ "id", "name", "tag", "from", "to" ]; for (const key of Object.keys(query)) { if (!allowedKeys.includes(key)) { throw new Error(`Unknown property: ${key} please resolve`,query); } } return true; }) ];
重新部署后,发送带from和to的请求:
https://yh74mgrokc.execute-api.us-west-1.amazonaws.com/dev/ga/answer/qn_type?tag=alexa&from=2020-05-29&to=2021-05-29
仍收到旧版本报错:Unknown property: from please resolve。
排查步骤
1. 确认Lambda代码是否真的更新
- 登录AWS Lambda控制台,找到目标函数,进入代码标签,直接查看
getAnswerQnTypeSchema的代码,确认allowedKeys中包含from和to。 - 切换到版本和别名标签,检查正在使用的别名(如dev)是否指向最新发布的函数版本。如果用CLI部署,确认部署命令无报错,且指定的函数和版本正确。
2. 重新部署API Gateway阶段
API Gateway不会自动同步Lambda的更新,必须手动重新部署对应阶段:
- 进入AWS API Gateway控制台,找到目标API,点击部署API,选择对应的阶段(如dev),完成重新部署。
- 检查集成请求配置,确认API Gateway指向的是Lambda的别名(而非固定旧版本),确保后续请求会转发到最新的Lambda代码。
3. 检查是否存在其他校验逻辑
- 排查函数代码中是否有其他参数校验逻辑(如路由中间件、前置过滤器),这些逻辑可能未同步更新,导致
from/to被拦截。 - 确认当前请求的路由确实引用了更新后的
getAnswerQnTypeSchema,避免因Schema名称拼写错误、路由配置引用旧Schema导致问题。
4. 清除缓存
- 客户端(浏览器/工具)可能缓存了旧响应,使用无痕模式或清除缓存后重新测试请求。
- 如果API Gateway阶段开启了缓存,进入阶段设置页面,清除缓存或暂时关闭缓存后再测试。
5. 查看CloudWatch日志定位问题
- 进入Lambda函数的监控标签,打开CloudWatch日志组,查看对应请求的日志输出:
- 可以在代码中临时添加
console.log('Allowed keys:', allowedKeys),确认运行时的参数允许列表是否正确。 - 通过日志确认执行的代码版本是否为更新后的版本,排除部署未生效的问题。
- 可以在代码中临时添加
内容的提问来源于stack exchange,提问作者Damika
相关产品推荐
相关产品推荐

