Terraform Api网关Lambda集成触发问题



如果手动添加Lambda函数类型的Integration Request,Api Gateway触发器将自动添加到Lambda函数中。

如果我通过Terraform进行操作,一切看起来都是正确的,但当我查看Lambda函数时,它没有触发器。

如果我随后手动更新集成请求(更改为Mock并返回Lambda函数(,则触发器是否添加到Lambda函数?之后一切正常。

我错过了什么?

resource "aws_api_gateway_integration" "integration" {
count = var.lambda_definition.apigateway ? 1 : 0
rest_api_id = "${data.terraform_remote_state.apigateway.outputs.apigateway_id}"
resource_id = aws_api_gateway_resource.api_proxy_resource[count.index].id
http_method = "${aws_api_gateway_method.method[count.index].http_method}"
integration_http_method = "ANY"
type                    = "AWS_PROXY"
uri                     = aws_lambda_function.lambda.invoke_arn
}

由于您没有提到是否为函数指定了适当的权限,我猜您缺少aws_lambda_permission。这将显式授予api调用函数的权限

资源将是(仅示例(:

resource "aws_lambda_permission" "allow_api" {
statement_id  = "AllowAPIgatewayInvokation"
action        = "lambda:InvokeFunction"
function_name = aws_lambda_function.lambda.invoke_arn
principal     = "apigateway.amazonaws.com"
}

当你在控制台中手动操作时,AWS会在后台设置所有这些权限。

确保integration_http_method设置为POST,而不是像您的示例中那样设置为ANY

integration_http_method = "POST"

请参阅AWS文档-中间的红色方框,上面写着"!重要’:

对于Lambda集成,必须根据函数调用的Lambda服务操作规范,对集成请求使用POST的HTTP方法。apigAwsProxy角色的IAM角色必须具有允许apigateway服务调用Lambda函数的策略。有关IAM权限的更多信息,请参阅用于调用API的API网关权限模型。

最新更新