AWS配置中Lambda权限报错:API无/*路由问题求助
AWS HTTP API Gateway + Lambda授权器控制台错误排查
问题描述
使用Terraform配置AWS HTTP API Gateway和自定义Lambda授权器后,功能运行正常,但Lambda控制台持续显示错误提示:
The API with ID xxx doesn’t include a route with path /*
尝试修改aws_lambda_permission中的source_arn为/*,错误仍未消失。
问题根源与修复方案
1. 资源引用的命名拼写错误
配置中存在多处命名/拼写错误,导致权限策略的资源匹配逻辑异常:
- Lambda函数资源名为
aws_lambda_function.auhtorizing_lambda(注意auhtorizing的拼写),但aws_lambda_permission中引用的变量是var.auth-lambda-name(横杠命名不符合Terraform变量规范,且和定义的var.auth_lambda_name不匹配) - API Gateway资源名为
aws_apigatewayv2_api.http_api_gateway,但source_arn中错误引用为aws_apigatewayv2_api.http-api-gateway(用横杠代替了下划线)
2. Source ARN格式不符合HTTP API要求
REST API和HTTP API的source_arn格式不同,HTTP API需要包含阶段名称,正确格式应为:
source_arn = "${aws_apigatewayv2_api.http_api_gateway.execution_arn}/${aws_apigatewayv2_stage.http_api_dev_stage.name}/*"
原配置使用的/*/*是REST API的格式,HTTP API不需要额外层级,加上阶段名后才能准确匹配到你的POST /test-custom路由。
3. 修正后的完整aws_lambda_permission配置
resource "aws_lambda_permission" "allow-invokation-from-api-gateway" { statement_id = "AllowExecutionFromAPIGateway" action = "lambda:InvokeFunction" function_name = aws_lambda_function.auhtorizing_lambda.function_name # 直接引用资源属性,避免变量拼写错误 principal = "apigateway.amazonaws.com" source_arn = "${aws_apigatewayv2_api.http_api_gateway.execution_arn}/${aws_apigatewayv2_stage.http_api_dev_stage.name}/*" }
4. 额外建议
- 建议修正Lambda资源名的拼写错误:将
auhtorizing_lambda改为authorizing_lambda,避免后续维护时混淆 - 部署更新后的Terraform配置后,等待1-2分钟让AWS控制台缓存刷新,再检查错误是否消失
内容的提问来源于stack exchange,提问作者KrisPetkov
相关产品推荐
相关产品推荐

