Terraform配置的API Gateway未显示为Lambda触发器且路由失效问题
问题根因
你遇到的核心问题是Lambda调用权限的ARN匹配规则配置错误,导致API Gateway没有权限触发你的Lambda函数,返回内部服务错误,同时Lambda控制台也无法识别到对应的触发器配置。
你当前使用的source_arn = "${aws_apigatewayv2_api.lambda_api.arn}/*/*"是REST API的通配符规则,不适用于你配置的HTTP API类型:HTTP API的ARN路径结构需要包含阶段名,你用的$default阶段名带特殊字符,原通配符规则无法正确匹配。
修复方案
替换你的aws_lambda_permission资源配置为以下内容即可:
resource "aws_lambda_permission" "execution_lambda_from_gateway" { statement_id = "AllowExecutionFromAPIGateway" action = "lambda:InvokeFunction" function_name = aws_lambda_function.executable.function_name principal = "apigateway.amazonaws.com" # 精确匹配你的GET /profile路由 source_arn = "${aws_apigatewayv2_api.lambda_api.arn}/${aws_apigatewayv2_stage.lambda_default.name}/GET/profile" # 如果需要允许该API下所有路由调用Lambda,可以用通配符版本 # source_arn = "${aws_apigatewayv2_api.lambda_api.arn}/${aws_apigatewayv2_stage.lambda_default.name}/*/*" }
验证说明
重新执行terraform apply生效配置后:
- Lambda控制台会自动显示对应的API Gateway触发器
- 访问
GET /profile路径可以正常路由到Lambda函数 - 无需手动添加触发器,手动添加的触发器默认绑定全路径规则,自然无法匹配你指定的
/profile路由
内容的提问来源于stack exchange,提问作者Przemek Lach
相关产品推荐
相关产品推荐

