use*_*394 7 lambda terraform aws-api-gateway terraform-provider-aws
我正在编写 Terraform 来部署具有 AWS Lambda 集成的 AWS API 网关。我想在我可以从 lambda 引用的 url 中指定一个可选的路径参数。我不知道如何在 AWS API Gateway terraform 中指定它。
我能找到的关于路径变量的唯一信息是这篇 SO 帖子:在 Terraform,你如何在请求路径中指定一个带有变量的 API 网关端点?
其中,answer 指定了 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"
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,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"
}
}
Run Code Online (Sandbox Code Playgroud)
因为arn在uri字段的位置,不知道path参数的位置在哪里定义。
我已尝试将路径变量附加到 uri 字段 ( ${var.books_invoke_arn}/{bookId}),但它只会产生错误。当uri字段被lambda arn占用时,我在哪里可以指定路径变量?
其次,是否可以将该变量设为可选,或者我是否必须拥有第二组 terraform(一个有变量,一个没有)?
谢谢!
BMW*_*BMW -1
terraform文档已经给出了答案。
resource "aws_api_gateway_integration" "integration" {
rest_api_id = "${aws_api_gateway_rest_api.api.id}"
resource_id = "${aws_api_gateway_resource.resource.id}"
http_method = "${aws_api_gateway_method.method.http_method}"
integration_http_method = "POST"
type = "AWS_PROXY"
uri = "arn:aws:apigateway:${var.myregion}:lambda:path/2015-03-31/functions/${aws_lambda_function.lambda.arn}/invocations"
}
Run Code Online (Sandbox Code Playgroud)
对于你的第二个问题,我需要详细信息,对于当前的描述,你可以考虑使用count它来管理它。
参考:
https://www.terraform.io/intro/examples/count.html
https://www.terraform.io/docs/configuration/resources.html#count-multiple-resource-instances
因为您没有粘贴有关如何管理 lambda 函数的代码。如果您确实管理它,则可以将其引用为${aws_lambda_function.lambda.arn}
resource "aws_lambda_function" "lambda" {
filename = "lambda_function_payload.zip"
function_name = "lambda_function_name"
...
}
Run Code Online (Sandbox Code Playgroud)
如果 lambda 函数存在,您可以通过其数据源获取其详细信息
data "aws_lambda_function" "existing_lambda" {
function_name = "${var.function_name}"
}
Run Code Online (Sandbox Code Playgroud)
您可以将其引用为data.aws_lambda_function.existing_lambda.arn
| 归档时间: |
|
| 查看次数: |
2771 次 |
| 最近记录: |