Насколько мне известно, плагин 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