删除Lambda的API Gateway触发器后重新添加时提示‘An integration is already present on this method’错误的求助
解决API Gateway添加Lambda触发器时的"An integration is already present on this method"错误
我来帮你搞定这个问题!这个错误的根源其实是API Gateway和Lambda之间的关联关系没有彻底清理干净——你之前把Lambda设为API Gateway的授权器时,API Gateway已经和这个Lambda建立了授权器集成关系,但你后来只删除了Lambda侧的触发器(这只是反向的关联记录),API Gateway端的授权器绑定还依然存在,所以当你尝试添加新的触发器(本质是创建新的集成)时就会触发冲突。
排查步骤
先确认一下问题的具体关联状态:
- 登录AWS控制台,打开API Gateway,找到你的REST API
- 切换到Authorizers标签页,查看是否存在关联到目标Lambda函数的授权器
- 找到你之前配置了授权的API方法(比如
GET /xxx),进入该方法的Method Request页面,检查Authorization选项是否还在使用这个Lambda授权器
解决方法
根据你的需求分两种情况处理:
情况1:还需要保留这个Lambda作为授权器
其实这里有个误区:授权器本身不需要Lambda触发器——API Gateway会在调用API时自动触发Lambda进行授权验证,你之前添加的触发器是多余的。如果只是想确保授权器能正常工作,直接测试API调用即可,不需要再添加触发器。
如果你确实有其他需求必须添加触发器,需要先清理API Gateway侧的授权关联:
- 进入对应API方法的Method Request页面,将
Authorization设置为NONE,保存更改 - 回到API的Authorizers页面,删除关联到该Lambda的授权器
- 部署你的API到对应阶段(这一步非常关键,不部署的话更改不会生效)
- 回到Lambda控制台,重新添加API Gateway触发器,此时应该不会报错
情况2:不再需要这个Lambda作为授权器,想彻底清理后添加新触发器
直接按照上面的步骤清理API Gateway侧的授权器和方法配置,部署API后,再回到Lambda添加新的触发器即可。
用AWS CLI快速处理(可选)
如果你习惯用命令行操作,可以执行以下命令:
- 删除授权器:
aws apigateway delete-authorizer --rest-api-id <你的API ID> --authorizer-id <授权器ID>
- 更新方法请求,移除授权器配置:
aws apigateway update-method --rest-api-id <你的API ID> --resource-id <目标资源ID> --http-method <比如GET> --patch-operations op=replace,path=/authorizationType,value=NONE
- 部署API到对应阶段:
aws apigateway create-deployment --rest-api-id <你的API ID> --stage-name <你的阶段名>
最后提醒一句:API Gateway的任何配置更改都需要部署到阶段才能生效,这是很多开发者容易忽略的点,一定要记得部署!
内容的提问来源于stack exchange,提问作者A. Hafid
相关产品推荐
相关产品推荐

