簡體   English   中英

使用 Terraform 將 AWS API 網關方法與多個 Lambda 集成

[英]Integrate AWS API Gateway methods with multiple Lambdas using Terraform

我必須將 50 多個 Lambda 功能與相關的 api 網關方法集成。 So that I create a terraform map with Lambda function name and api gateway resource path as below.

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通過這個 map 創建 lambda function ,如下所示。

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 function 集成。 但是這里我要輸入相關的lambda function調用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 function uri 以與相關方法集成。

我的問題是,如何獲得相關的 lambda function uri 在此迭代中輸入? 或者任何解決方案來實現這一點,而無需編寫每個 lambdas、資源和方法的代碼。

aws_lambda_function具有invoke_arn ,即:

用於從 API 網關調用 Lambda Function 的 ARN - 用於 aws_api_gateway_integration 的 uri

所以你必須在你的aws_api_gateway_integration中使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM