如何使用boto3检索Lambda函数关联的API Gateway方法
核心结论
首先说明:AWS Lambda原生不支持直接修改函数名,你这套「复制旧函数代码与配置生成新函数、再切换所有关联调用目标」的重实现路径是完全可行的,且整套流程可以100%通过boto3实现自动化,不需要手动在AWS控制台逐页操作。
实现的关键环节
1. 完成Lambda函数的全量复制
调用boto3的lambda 客户端即可覆盖全部复制需求:
- 先用
get_function_configuration拉取旧函数的全量配置,包括运行时版本、内存规格、超时设置、执行角色、环境变量、VPC网络配置、关联的Lambda层、预留并发设置等所有参数 - 再通过
get_function接口获取旧函数的代码包临时下载链接,拉取代码包作为新函数的代码资源 - 最后调用
create_function,传入上一步拿到的所有配置、拉取的代码包,生成和旧函数功能完全一致的新函数 - 如果旧函数有发布版本、生产别名的配套逻辑,也可以通过
list_versions_by_function、list_aliases把版本、别名逻辑同步到新函数上,避免业务侧调用出现断层
2. 批量重定向所有API Gateway的调用目标
需要覆盖两类常用的API Gateway类型,都能通过boto3遍历修改:
- 传统REST API(对应
apigateway服务客户端):遍历所有API实例下的所有资源、所有HTTP方法,筛选出集成类型为Lambda/Lambda_PROXY的方法,校验集成配置里的uri字段是否指向旧函数——旧的调用URI一般格式为arn:aws:apigateway:{区域}:lambda:path/2015-03-31/functions/{旧Lambda完整ARN}/invocations,匹配到目标后,把URI里的旧Lambda ARN替换为新函数的ARN,调用update_integration完成配置修改 - 新式HTTP API(对应
apigatewayv2服务客户端):遍历所有API实例的路由配置,筛选出集成类型为AWS_PROXY的路由,校验集成配置里的integration_uri是否指向旧函数,匹配后替换为新函数的ARN,调用update_integration完成调整 - 注意:REST API的集成配置修改后,必须手动创建一次API部署并绑定到对应的线上stage,配置变更才会对流量生效;HTTP API如果没有开启自动部署,也需要手动触发部署流程。
实际操作的常见避坑点
- 新函数创建完成后,必须调用
add_permission给新函数添加资源访问策略,允许apigateway.amazonaws.com服务主体调用函数,否则API Gateway发过来的请求会被Lambda的访问控制拦截,直接返回权限错误 - 遍历API Gateway关联配置的时候,要切换对应区域的boto3客户端跨区域查询,避免漏掉其他区域部署的API里指向旧函数的配置
- 如果旧函数还关联了SQS触发器、CloudWatch事件规则、日志订阅这类其他资源,脚本里可以按需判断是否要把这些关联也同步迁移到新函数上
内容的提问来源于stack exchange,提问作者James Shapiro
相关产品推荐
相关产品推荐

