问题
In AWS API Gateway, I have a endpoint defined as /users/{userId}/someAction, and I'm trying to recreate this with terraform
I would start having some sort of linked gateway_resource chain like so...
resource "aws_api_gateway_resource" "Users" {
rest_api_id = "${var.rest_api_id}"
parent_id = "${var.parent_id}"
path_part = "users"
}
//{userId} here?
resource "aws_api_gateway_resource" "SomeAction" {
rest_api_id = "${var.rest_api_id}"
parent_id = "${aws_api_gateway_resource.UserIdReference.id}"
path_part = "someAction"
}
In which I then define the aws_api_gateway_method and everything else.
How do I define this endpoint in terraform? The terraform documentation and examples don't cover this use case.
回答1:
You need to define a resource whose path_part is the parameter you want to use:
// List
resource "aws_api_gateway_resource" "accounts" {
rest_api_id = "${var.gateway_id}"
parent_id = "${aws_api_gateway_resource.finance.id}"
path_part = "accounts"
}
// Unit
resource "aws_api_gateway_resource" "account" {
rest_api_id = "${var.gateway_id}"
parent_id = "${aws_api_gateway_resource.accounts.id}"
path_part = "{accountId}"
}
Then you create the method and enable the path parameter:
resource "aws_api_gateway_method" "get-account" {
rest_api_id = "${var.gateway_id}"
resource_id = "${var.resource_id}"
http_method = "GET"
authorization = "NONE"
request_parameters {
"method.request.path.accountId" = true
}
}
And finally you can successfully create the mapping within the integration:
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"
}
}
The method needs to be there - and with the parameter enabled - in order for the integration mapping to work.
来源:https://stackoverflow.com/questions/39040739/in-terraform-how-do-you-specify-an-api-gateway-endpoint-with-a-variable-in-the