In Terraform, how do you specify an API Gateway endpoint with a variable in the request path?

旧街凉风 提交于 2019-11-29 00:06:45

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!