Kong + Lambda Plugin - как включить повторные попытки? - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть служба Kong, которая использует плагин AWS Lambda для вызова функции (синхронизация - RequestResponse).Оказывается, что, как я понял, нет способа включить повторные попытки, поскольку Lambda всегда возвращает OK.Даже с плагином преобразования для генерации фактического состояния (чтение из свойства status в ответе json) я не могу заставить повторные попытки работать.

Есть ли какие-либо плагины для включения повторных попыток для лямбда-вызовов?Или как мне это сделать?

1 Ответ

0 голосов
/ 16 апреля 2019

Насколько мне известно, плагин Kong Lambda не поддерживает повторные попытки, хотя для этого варианта использования есть обходной путь.

Можно создать внутренний маршрут, который выполняет лямбда-вызов (плагин Lambda с идентификатором маршрутас указанием идентификатора услуги) и другого маршрута, на который будет нацеливаться извне, этот маршрут будет включать повторную попытку и вызывает внутренний маршрут.Вот пример того, как я достиг этого:

Сервис:

{
  "host": "localhost",
  "created_at": 1555418486,
  "connect_timeout": 30000,
  "id": "3c31fc3f-74f1-423f-8e5a-751668bed878",
  "protocol": "http",
  "name": "test",
  "read_timeout": 10000,
  "port": 8000,
  "path": "/kong-internal/",
  "updated_at": 1555418486,
  "retries": 3,
  "write_timeout": 10000,
  "tags": null,
  "extras": {}
}

Маршрут общего доступа:

{
  "updated_at": 1555418553,
  "created_at": 1555418487,
  "strip_path": true,
  "snis": null,
  "hosts": [
    "test.com"
  ],
  "name": "EXTERNAL_route",
  "methods": [],
  "sources": null,
  "preserve_host": true,
  "regex_priority": 1,
  "service": {
    "id": "3c31fc3f-74f1-423f-8e5a-751668bed878"
  },
  "paths": [],
  "destinations": null,
  "id": "0917748d-24eb-42aa-b83e-7111ef4de9b4",
  "protocols": [
    "https",
    "http"
  ],
  "tags": null
}

Внутренний маршрут (имеет плагин лямбды):

{
  "updated_at": 1555418487,
  "created_at": 1555418487,
  "strip_path": true,
  "snis": null,
  "hosts": [
    "test.com"
  ],
  "name": "INTERNAL_route",
  "methods": null,
  "sources": null,
  "preserve_host": false,
  "regex_priority": null,
  "service": {
    "id": "3c31fc3f-74f1-423f-8e5a-751668bed878"
  },
  "paths": [
    "/kong-internal/"
  ],
  "destinations": null,
  "id": "e5981f16-d44c-4d19-b706-cdc3173db412",
  "protocols": [
    "http"
  ],
  "tags": null
}

Несмотря на то, что ловушка все еще существует, strip_path не применяется к лямбда-функции, поэтому лямбда-код должен вручную удалять /kong-internal/ из пути.

Примечание: если ваша лямбда добавляет x-amz-log-result header, я предлагаю добавить response_transform плагин к внутреннему маршруту, чтобы удалить его, он может стать довольно большим и потерпеть неудачу при вызове.

EDIT: оказывается, что Конгу не очень нравится статус тайм-аута из aws, поэтомуимеет смысл иметь высокое connect_timeout для службы и относительно меньшее read_timeout и write_timeout, тогда внутренний механизм kong выполнит повторную попытку.

...