Плагин Kong + Lambda - как включить повторные попытки?

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

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


person dmmd    schedule 08.12.2018    source источник


Ответы (1)


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

Можно создать внутренний маршрут, который выполняет вызов 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, я предлагаю добавить плагин response_transform во внутренний маршрут, чтобы удалить его, он может стать довольно большим и вызвать сбой.

РЕДАКТИРОВАТЬ: оказывается, Конгу не очень нравится статус тайм-аута от aws, поэтому имеет смысл иметь высокий connect_timeout для службы и относительно более низкие read_timeout и write_timeout, тогда внутренний механизм kong выполнит повторную попытку.

person alikh31    schedule 16.04.2019
comment
Интересный подход, попробую. - person dmmd; 16.04.2019
comment
@dmmd в исходном ответе connect_timeout был ошибочно установлен на 10 с, когда вы пробуете подход, попробуйте его до 30 с. - person alikh31; 17.04.2019