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


person iquestionshard    schedule 19.08.2016    source источник
comment
добавив к ответу, вы можете изменить parent_id, чтобы он указывал на aws_api_gateway_resource, который имеет динамический параметр.   -  person naren    schedule 02.10.2017


Ответы (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"
    }
}

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

person pesama    schedule 25.08.2016
comment
Разве это не только для users/{userId} части вопроса OP? В настоящее время сталкивается с той же проблемой, что и исходный вопрос: удалось заставить resource/{resourceId} работать, но не resource/{resourceId}/someAction. Пытался создать еще один ресурс под ресурсом {pathId} с его собственным методом и интеграцией, но я получаю сообщение об ошибке Missing Authentication Token, что заставляет меня подозревать, что на самом деле он ничего не создавал. - person cintron; 04.07.2017
comment
Где в документации вы нашли это решение? Было ли это просто погружением в документацию AWS? - person Ryan Smith; 21.04.2018
comment
Оператор равенства =, необходимый для присвоения методу request_parametersin и интеграции, в соответствии с документами, например. terraform.io/docs/providers/aws/r/ - person Tom Bunting; 24.12.2019
comment
Я вижу, что aws_api_gateway_resource.account определен, но нигде не упоминается. Это недосмотр? Я ожидал, что это может быть использовано в aws_api_gateway_method.get-account. Может быть, в его поле resource_id? - person Daniel; 14.08.2020