AWS Регулярное выражение ошибки лямбда-кода шлюза API не работает? - PullRequest
0 голосов
/ 20 июня 2020

Я пытаюсь обработать ответ от шлюза API -> Лямбда -> Обмен шлюза API, и я не могу правильно обработать ответ интеграции.

У меня 2 ответа интеграции шлюза API определяется с использованием следующих регулярных выражений лямбда-ошибок:

.*e.* -> method response status 200 (for testing only)
.*500.* -> method response status 500
(no default mapping)

Моя лямбда возвращает следующее:

if (err)
      callback(null, {
        statusCode: 500,
        message: "commit ID failed - ID already present"
      });

    else
      callback(null, {
        statusCode: 200,
        message: "new ID committed"
      });

Таким образом, ответ от Lambda всегда должен содержать какие-то данные.

Когда я запускаю тест шлюза API, он не выполняет ни одно из правил:

Sat Jun 20 07:49:56 UTC 2020 : Received response. Status: 200, Integration latency: 122 ms
Sat Jun 20 07:49:56 UTC 2020 : Endpoint response headers: {Date=Sat, 20 Jun 2020 07:49:56 GMT, Content-Type=application/json, Content-Length=68, Connection=keep-alive, x-amzn-RequestId=d7556a95-2ff9-4cf2-9e61-cc89484f6548, x-amzn-Remapped-Content-Length=0, X-Amz-Executed-Version=$LATEST, X-Amzn-Trace-Id=root=1-5eedbfa4-0ddb3f5e0882fbf1cd7e4674;sampled=0}
Sat Jun 20 07:49:56 UTC 2020 : Endpoint response body before transformations: {"statusCode":500,"message":"commit ID failed - ID already present"}
Sat Jun 20 07:49:56 UTC 2020 : Execution failed due to configuration error: No match for output mapping and no default output mapping configured. Endpoint Response Status Code: 200

Если я изменяю регулярные выражения лямбда-ошибок:

.* matches responses from lambda
.+ doesn't match any responses from lambda

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

заранее спасибо,

Джим

1 Ответ

0 голосов
/ 21 июня 2020

С этим справились - моя ошибка была в функции Lambda - используйте обратный вызов («сообщение об ошибке») для ошибки, обратный вызов (нуль, «сообщение об успешном выполнении») для успеха. Ответ интеграции API Lambda Error Regex обрабатывает только ошибку (я думаю, ключ кроется в имени). Итак, это работает:

if (err)
   callback("commit ID failed - ID already present");
else
   callback(null, {
      statusCode: 200,
      message: "new ID committed"
   });

Теперь работает с регулярным выражением лямбда-ошибок, например, не удалось.

...