通过Terraform部署API Gateway触发Lambda后查看触发器报429错误如何解决
问题原因
Lambda控制台展示触发器列表时,会自动调用API Gateway的关联查询接口,枚举每一条Lambda权限对应的API资源。当单个Lambda绑定了数十甚至上百条API Gateway粒度的权限时,控制台短时间内发起的查询请求会超过AWS默认的接口限流阈值,触发Too Many Requests的429错误。
解决方案
- 方案1:合并Lambda权限条目(最推荐)
不需要为每个API路径、方法单独创建aws_lambda_permission资源,可根据业务安全要求适当放宽source_arn的通配符范围,大幅减少权限条目数量。比如同一个API Gateway下的所有资源可合并为1条权限,示例配置如下:
若需要区分不同API Gateway、不同阶段的授权,也可按API粒度、阶段粒度创建权限,无需下沉到方法/路径粒度。resource "aws_lambda_permission" "allow_api" { action = "lambda:InvokeFunction" function_name = var.function_name principal = "apigateway.amazonaws.com" # 通配符匹配规则:<API_ARN>/<阶段通配符>/<方法通配符>/<路径通配符> source_arn = "${var.api_arn}/*/*/*" } - 方案2:申请提升接口限流配额
若业务安全要求不允许使用通配符权限,可前往AWS支持中心提交工单,申请提升Lambda控制台关联查询API Gateway相关接口的限流配额,说明业务场景为单个Lambda绑定了大量API Gateway触发器即可。 - 方案3:改用CLI/SDK查询触发器
避开控制台的自动高频查询逻辑,通过AWS CLI手动查询权限列表解析触发器:
首先执行aws lambda get-policy --function-name <你的函数名>获取函数所有权限,自行解析返回结果中的source_arn字段即可得到所有API Gateway触发器信息,可自行添加重试、限流逻辑避免429错误。 - 方案4:调整部署并发配置
若部署时一次性创建大量aws_lambda_permission也会触发限流,可调整IaC工具的并发部署参数,比如Terraform执行时添加-parallelism=5参数降低并发创建速度,避免短时间内创建过多权限触发后端限流。
内容的提问来源于stack exchange,提问作者hunter crow
相关产品推荐
相关产品推荐

