В 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 не охватывают этот вариант использования.

Ответ 1

Вам нужно определить ресурс, для которого 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}"
}

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

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

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

Ответ 2

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