如何将 lambdas uri 集成到 AWS API Gateway 规范 YAML 中?

问题描述 投票:0回答:1

我正在使用 Terraform 管理我的 AWS API Gateway 资源。我已经直接从 AWS 管理控制台生成了 API 网关的规范.yaml 文件。

我的问题是:

当我直接在 Terraform 配置中引用此规范.yaml 文件以自动生成 API 网关的 Terraform 配置时?

resource "aws_api_gateway_rest_api" "api-gateway" {
 name        = "name"
  api_key_source = "HEADER"
  body           = "${data.template_file.swagger_spec.rendered}"

  endpoint_configuration {
    types = ["REGIONAL"]
  }
}

data "template_file" "swagger_spec" {
  template = file("${var.path_api}specification.yaml")

}

如何以及在哪里添加与 lambda uri 的 aws 集成,以便 Terraform 使用引用的 YAML 文件/与 lambda 的集成来管理这些 API 网关资源?

任何有关此方法最佳实践的指导或示例将不胜感激。谢谢!

aws-lambda import terraform aws-api-gateway infrastructure-as-code
1个回答
0
投票

您应该将 swagger 文件导入为

template_file
,并提供应该替换的变量,例如 uri。您将在下面找到一个简化的示例:

resource "aws_lambda_function" "hello_world" {
  function_name = "hello-world"

  s3_bucket = "${var.s3_bucket}"
  s3_key    = "hello_world.zip"

  handler     = "lambda_function.lambda_handler"
  runtime     = "python3.10"
  memory_size = 256
  timeout     = 10
}

data "template_file" "swagger" {
  template = "${file("swagger.yaml")}"

  vars = {
    lambda_arn              = "${aws_lambda_function.hello_world.arn}"
    aws_region              = var.aws_region
  }
}

resource "aws_api_gateway_rest_api" "hello_world" {
  name           = "hello-world"
  description    = "Say hello world"
  api_key_source = "HEADER"
  body           = "${data.template_file.swagger.rendered}"

  endpoint_configuration {
    types = ["REGIONAL"]
  }
}

您将在下面找到

swagger.yaml
文件中的一小段内容。变量
${aws_region}
${lambda_arn}
将替换为实际值。

  x-amazon-apigateway-integration:
    uri: "arn:aws:apigateway:${aws_region}:lambda:path/2015-03-31/functions/${lambda_arn}/invocations"
    passthroughBehavior: "when_no_match"
    httpMethod: "POST"
    type: "aws_proxy"
    contentHandling: "CONVERT_TO_TEXT"
  x-amazon-apigateway-auth:
    type: "NONE"
  x-amazon-apigateway-api-key-source: "HEADER"
© www.soinside.com 2019 - 2024. All rights reserved.