使用 Terraform 将 AWS API 网关方法与多个 Lambda 集成

Integrate AWS API Gateway methods with multiple Lambdas using Terraform

我必须将 50 多个 Lambda 函数与相关 api 网关方法集成。这样我就创建了一个带有 Lambda 函数名称和 api 网关资源路径的地形图,如下所示。

variable "lambdas" {
  description = "Map of Lambda function names and API gateway resource paths."
  type        = map
  default = {
    user = {
      name = "user-lambda-function"
      path = "user"
    },
    products= {
      name = "products-lambda-function"
      path = "products"
    },
    orders= {
      name = "orders-lambda-function"
      path = "orders"
    },

然后我使用 for_each 通过此映射迭代创建 lambda 函数,如下所示。

resource "aws_lambda_function" "lambda_functions" {
  for_each         = var.lambdas
  filename         = "lambda_function_code.zip"
  function_name    = each.value.name
  role             = data.aws_iam_role.lambda_execution_role.arn
  handler          = "index.handler"
  source_code_hash = filebase64sha256("lambda_function_code.zip")

  runtime = "nodejs14.x"
}

之后我开始创建 API 网关、资源和方法如下,

resource "aws_api_gateway_rest_api" "api_gateway" {
  name = var.api-gateway-name
}

resource "aws_api_gateway_resource" "resources" {
  for_each    = var.lambdas
  rest_api_id = aws_api_gateway_rest_api.api_gateway.id
  parent_id   = aws_api_gateway_rest_api.api_gateway.root_resource_id
  path_part   = each.value.path
}

resource "aws_api_gateway_method" "methods" {
  for_each         = aws_api_gateway_resource.resources
  rest_api_id      = aws_api_gateway_rest_api.api_gateway.id
  resource_id      = each.value.id
  http_method      = "POST"
  authorization    = "NONE"
  api_key_required = false
}

然后我尝试通过迭代上述方法将上述 API 网关方法与相关的 Lambda 函数集成。但是这里我必须输入相关的lambda函数调用uri。

resource "aws_api_gateway_integration" "integration" {
  for_each = aws_api_gateway_method.methods
  rest_api_id             = each.value.rest_api_id
  resource_id             = each.value.resource_id
  http_method             = each.value.http_method
  integration_http_method = "POST"
  type                    = "AWS_PROXY"
  uri                     = ""
}

我正在努力输入这个相关的 lambda 函数 uri 以与相关方法集成。

我的问题是,如何通过此迭代获取相关的 lambda 函数 uri 以在此处输入?或无需为每个 lambda、资源和方法编写代码即可实现此目的的任何解决方案。

aws_lambda_functioninvoke_arn 即:

ARN to be used for invoking Lambda Function from API Gateway - to be used in aws_api_gateway_integration's uri

所以你必须在 aws_api_gateway_integration 中使用它。