【发布时间】:2019-10-28 12:29:18
【问题描述】:
我正在编写 Terraform 来部署具有 AWS Lambda 集成的 AWS API 网关。我想在我可以从 lambda 引用的 url 中指定一个可选的路径参数。我不知道如何在 AWS API Gateway terraform 中指定它。
我能找到的关于路径变量的唯一信息是这个 SO 帖子:In Terraform, how do you specify an API Gateway endpoint with a variable in the request path?
其中,答案指定了 aws_api_gateway_integration 函数的 uri 字段中的路径变量:
resource "aws_api_gateway_integration" "get-account-integration" {
rest_api_id = "${var.gateway_id}"
resource_id = "${var.resource_id}"
http_method = "${aws_api_gateway_method.get-account.http_method}"
type = "HTTP"
integration_http_method = "GET"
uri = "/integration/accounts/{id}" # <--
passthrough_behavior = "WHEN_NO_MATCH"
request_parameters {
"integration.request.path.id" = "method.request.path.accountId"
}
}
不幸的是,AWS Lambda 集成使用该 uri 字段作为 lambda 的 ARN。以下是我在集成中引用 lambda 的方式:
resource "aws_api_gateway_integration" "books_lambda" {
rest_api_id = "${var.gateway.id}"
resource_id = "${var.resource_id}"
http_method = "${aws_api_gateway_method.books.http_method}"
type = "AWS_PROXY"
integration_http_method = "POST"
uri = "${var.books_invoke_arn}" # <--
credentials = "${aws_iam_role.books_gateway.arn}"
request_parameters {
"integration.request.path.id" = "method.request.path.bookId"
}
}
因为arn是在uri字段的地方,所以不知道在哪里定义path参数的放置。
我尝试将路径变量附加到 uri 字段 (${var.books_invoke_arn}/{bookId}),但这只会产生错误。当uri字段被lambda arn占用时,在哪里可以指定路径变量?
其次,是否可以使该变量成为可选变量,或者我必须拥有第二组 terraform(一个带变量,一个不带)?
谢谢!
【问题讨论】:
-
您解决了这个问题吗?
标签: lambda aws-api-gateway terraform terraform-provider-aws