Terraform API 网关未显示为 Lambda 的触发器
Terraform API Gateway Not Showing Up As Trigger For Lambda
我按照说明进行了操作 here for setting up a gateway and a lambda but it does not work. The symptoms appear to be the same as described ,但是那里建议的修复没有奏效。
我的基础设施定义如下:
resource "aws_apigatewayv2_api" "lambda_api" {
name = "${upper(var.project)}-${upper(var.environment)}-${var.gateway_name}"
protocol_type = "HTTP"
}
resource "aws_apigatewayv2_stage" "lambda_default" {
name = "$default"
api_id = aws_apigatewayv2_api.lambda_api.id
auto_deploy = true
}
resource "aws_apigatewayv2_integration" "gateway_to_lambda" {
api_id = aws_apigatewayv2_api.lambda_api.id
integration_type = "AWS_PROXY"
connection_type = "INTERNET"
integration_method = "POST"
integration_uri = aws_lambda_function.executable.arn
payload_format_version = "2.0"
}
resource "aws_apigatewayv2_route" "route" {
api_id = aws_apigatewayv2_api.lambda_api.id
route_key = "GET /profile"
target = "integrations/${aws_apigatewayv2_integration.gateway_to_lambda.id}"
}
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"
source_arn = "${aws_apigatewayv2_api.lambda_api.arn}/*/*"
}
在网关方面,看起来事情创建正确:我有一个将我的路径 'profile' 连接到 lambda 的集成:
但是,当我查看 lambda 时,触发器丢失了:
当我尝试访问端点时,我收到“内部服务器错误”消息。
当我在我的 lambda 中手动添加触发器时,它会起作用,但在我指定的 'profile' 路由键下不起作用。
为了在 API 网关中将我的 /profile 正确路由到我的 lambda,我在这里缺少什么?
根据评论。解决方案是修改权限(删除source_arn
):
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"
}
我按照说明进行了操作 here for setting up a gateway and a lambda but it does not work. The symptoms appear to be the same as described
我的基础设施定义如下:
resource "aws_apigatewayv2_api" "lambda_api" {
name = "${upper(var.project)}-${upper(var.environment)}-${var.gateway_name}"
protocol_type = "HTTP"
}
resource "aws_apigatewayv2_stage" "lambda_default" {
name = "$default"
api_id = aws_apigatewayv2_api.lambda_api.id
auto_deploy = true
}
resource "aws_apigatewayv2_integration" "gateway_to_lambda" {
api_id = aws_apigatewayv2_api.lambda_api.id
integration_type = "AWS_PROXY"
connection_type = "INTERNET"
integration_method = "POST"
integration_uri = aws_lambda_function.executable.arn
payload_format_version = "2.0"
}
resource "aws_apigatewayv2_route" "route" {
api_id = aws_apigatewayv2_api.lambda_api.id
route_key = "GET /profile"
target = "integrations/${aws_apigatewayv2_integration.gateway_to_lambda.id}"
}
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"
source_arn = "${aws_apigatewayv2_api.lambda_api.arn}/*/*"
}
在网关方面,看起来事情创建正确:我有一个将我的路径 'profile' 连接到 lambda 的集成:
但是,当我查看 lambda 时,触发器丢失了:
当我尝试访问端点时,我收到“内部服务器错误”消息。
当我在我的 lambda 中手动添加触发器时,它会起作用,但在我指定的 'profile' 路由键下不起作用。
为了在 API 网关中将我的 /profile 正确路由到我的 lambda,我在这里缺少什么?
根据评论。解决方案是修改权限(删除source_arn
):
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"
}