В Terraform как указать конечную точку шлюза API с переменной в пути запроса?

в AWS API Gateway у меня есть конечная точка, определенная как "/ users / {userId} / someAction", и я пытаюсь воссоздать это с помощью terraform

Я бы начал иметь какую-то связанную цепочку gateway_resource, например...

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"
}

в котором я затем определяю aws_api_gateway_method и все остальное.

Как определить эту конечную точку в terraform? Документация и примеры terraform не охватывают этот вариант использования.

2 ответов


вам нужно определить ресурс, чей path_part - Это параметр, который вы хотите использовать:

// 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}"
}

затем вы создаете метод и включить параметр path:

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
  }
}

и, наконец, вы можете успешно создать отображение в интеграции:

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"
    }
}

метод должен быть там - и с включенным параметром-для работы сопоставления интеграции.


Я не могу комментировать из-за меньшей репутации, но, добавив к ответу выше, вы можете изменить parent_id, чтобы указать на aws_api_gateway_resource Это имеет динамический параметр.