【问题标题】:Terraform Api Gateway Lambda Integration trigger problemTerraform Api Gateway Lambda Integration 触发问题
【发布时间】:2020-12-16 22:07:17
【问题描述】:

如果我手动添加 Lambda 函数类型的集成请求,则会自动将 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_apigatewayv2_api 资源,我发现问题只是我没有target 参数。 target = aws_lambda_function.lambda.arn救生员! Source here.

标签: amazon-web-services aws-lambda terraform aws-api-gateway


【解决方案1】:

由于您没有提到您是否为您的函数指定了正确的权限,我猜您缺少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 会在后台设置所有这些权限。

【讨论】:

  • 请使用.function_name 而不是.invoke_arn,因为后者可能会违反命名限制(“function_name”不能超过 140 个字符;“function_name”不符合 [regex] 限制) .
【解决方案2】:

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

  integration_http_method = "POST"

AWS Docs - 中途 - 红色方框,上面写着'!重要':

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

【讨论】:

  • 我遇到了同样的问题。我对 GET 说过 integration_http_method。 lambda 的集成方法始终需要是 POST。 aws_api_gateway_method.http_method 下的单个 HTTP 方法可以是基于 REST API 方法的 GET、PUT、POST 等。谢谢!
猜你喜欢
  • 2020-03-17
  • 2017-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-14
  • 2021-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多