CloudFront→API Gateway→Lambda架构下如何让API Gateway调用最新Lambda代码
API Gateway调用旧版本Lambda代码的解决方法
- 检查API Gateway的Lambda集成配置
- 若集成ARN后缀带版本号(如
:3)或自定义别名,说明API Gateway绑定了固定Lambda版本,更新代码后未发布新版本、未更新别名指向的话会持续调用旧代码。两种解决方式:- 集成时直接使用无版本后缀的Lambda ARN,默认调用最新的
$LATEST版本 - 每次更新Lambda代码后发布新版本,同步更新API Gateway集成绑定的版本号/别名指向的版本
- 集成时直接使用无版本后缀的Lambda ARN,默认调用最新的
- 所有集成配置修改完成后,必须部署API Gateway到对应阶段才会生效,操作路径:API Gateway控制台→选中对应API→顶部「动作」下拉→部署API→选择要生效的阶段(如prod、test)
- 若集成ARN后缀带版本号(如
- 排查全链路缓存
- CloudFront缓存验证:如果CloudFront配置了API响应缓存,会直接返回历史缓存内容而非Lambda最新执行结果。测试时可在请求头加
Cache-Control: no-cache跳过缓存,确认是缓存问题后可根据业务需求调整缓存规则,或代码变更后主动提交CloudFront缓存失效 - API Gateway缓存验证:如果对应API阶段开启了缓存,同样会返回旧响应,可临时关闭阶段缓存验证,或配置缓存键规则排除动态接口的缓存
- CloudFront缓存验证:如果CloudFront配置了API响应缓存,会直接返回历史缓存内容而非Lambda最新执行结果。测试时可在请求头加
- 确认实际调用的Lambda版本
- 可以在Lambda代码中加入标识类日志(如打印代码更新时间、版本号),调用接口后查看Lambda对应的CloudWatch日志,快速确认是Lambda版本未更新,还是上层缓存返回了旧内容,缩小问题范围
内容的提问来源于stack exchange,提问作者af_khan
相关产品推荐
相关产品推荐

