我正在使用 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 网关资源?
任何有关此方法最佳实践的指导或示例将不胜感激。谢谢!
您应该将 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"