Шлюз AWS API Добавляет строку запроса дважды - PullRequest
1 голос
/ 01 ноября 2019

Я пытаюсь настроить простую демонстрационную конечную точку через AWS API Gateway. Ниже приводится манифест Terraform, который описывает его.

По сути, это конечная точка GET /demo/hello/world, которая принимает параметр строки запроса return_to.

Terraform правильно создает все ресурсы в AWS.

Однако, когда я делаю запрос к шлюзу на /demo/hello/world?return_to=bbb, бэкэнд-сервис получает этот запрос:

/demo/hello/world%3Freturn_to=bbb?return_to=bbb

Как вы можете видеть ?return_to=bbb из APIURL-адрес шлюза кодируется так, как если бы он был частью пути, а затем в конце добавляется еще одна строка запроса.

Кто-нибудь может мне помочь, как это исправить? Я просматриваю все настройки в течение нескольких часов и не могу понять, в чем проблема и как ее исправить.

resource "aws_api_gateway_rest_api" "api" {
  name        = "origin-${var.name}.${data.terraform_remote_state.setup.outputs.domain-name}"
  description = "Proxy to handle requests to our API test"

}

resource "aws_api_gateway_resource" "demo" {
  depends_on = ["aws_api_gateway_rest_api.api"]

  rest_api_id = "${aws_api_gateway_rest_api.api.id}"
  parent_id   = "${aws_api_gateway_rest_api.api.root_resource_id}"
  path_part   = "demo"
}

resource "aws_api_gateway_resource" "hello" {
  depends_on = ["aws_api_gateway_rest_api.api", "aws_api_gateway_resource.demo"]

  rest_api_id = "${aws_api_gateway_rest_api.api.id}"
  parent_id   = "${aws_api_gateway_resource.demo.id}"
  path_part   = "hello"
}

resource "aws_api_gateway_resource" "world" {
  depends_on = ["aws_api_gateway_rest_api.api", "aws_api_gateway_resource.hello"]

  rest_api_id = "${aws_api_gateway_rest_api.api.id}"
  parent_id   = "${aws_api_gateway_resource.hello.id}"
  path_part   = "world"
}

resource "aws_api_gateway_method" "hello-world" {
  depends_on = ["aws_api_gateway_resource.world"]

  rest_api_id           = "${aws_api_gateway_rest_api.api.id}"
  resource_id           = "${aws_api_gateway_resource.world.id}"
  http_method           = "GET"
  authorization         = "NONE"

  request_parameters = {
    "method.request.querystring.return_to" = true
  }
}

resource "aws_api_gateway_integration" "hello-world" {
  depends_on = ["aws_api_gateway_method.hello-world"]

  rest_api_id             = "${aws_api_gateway_rest_api.api.id}"
  resource_id             = "${aws_api_gateway_resource.world.id}"
  http_method             = "${aws_api_gateway_method.hello-world.http_method}"
  integration_http_method = "GET"
  type                    = "HTTP"
  uri                     = "http://${lookup(var.demo-map, var.environment)}/demo/hello/world"

  connection_type = "VPC_LINK"
  connection_id   = "${data.aws_api_gateway_vpc_link.vpclink.id}"

  request_parameters = {
    "integration.request.querystring.return_to" = "method.request.querystring.return_to"
  }
}
...