Опираясь на идеи Матуса, я теперь могу лучше ответить на остальные вопросы сверху:
- «Что является примером того, как передавать данные« напрямую »по событиюобъект в лямбда-функции, как в случае № 3? "
При настройке API-шлюза с Lambda для отправки определенных фрагментов данных необходимо использовать шаблон отображения, который настраивается вAWS API Gateway.
Этот шаблон сопоставления записан на языке 1011 * Velocity Template Language (VTL) от Apache Foundation.Например, для присоединения только данных "привет", чтобы они были доступны как const data = event.hello; // world
, например:
{
"hello": $input.params('$hello')
}
Примечание: VTL очень мощный, вышеэто не реалистичный пример использования, но наименьшее количество VTL только для того, чтобы передать идею, см. здесь и здесь для более подробной информации
Прыжок через интерфейс, чтобы установить этоШаблон сопоставления является небольшим испытанием для начального примера, поэтому вот иллюстрированные шаги:
Предупреждение: Обязательно удвойте-проверьте, что на самом деле отображается в редакторе, поскольку при смене раскрывающегося меню в шаблоне сопоставления могут иногда происходить неожиданные или неожиданные действия.Иногда вы также сталкиваетесь с неисправимыми проблемами, связанными с шаблоном сопоставления. Лучше всего начать с удаления метода и перезапустить его из API Gateway.
- "Для простого сценария Node, вариант 2похоже, что есть «накладные расходы» на синтаксический анализ тела события из строкового JSON, так что это понятный недостаток, но почему или когда вариант 3 был бы более желательным подходом?
Все зависит от того, какваша Lambda получает свои данные.
Ключевым выводом Matus является то, что в конечном итоге все это деталь реализации. Lambdas в этом надуманном примере (т.е. настройте REST API через AWS Gateway, отправьте GET / POST наэтот API и лямбда-код что-то делает с данными) может извлекать данные тремя способами:
(1) параметры URL const data = event.queryStringParameters.hello; // world
(2) тело запроса const data = event.body.hello; // world
(см. примечание ниже)
(3) непосредственно на объекте события const data = event.hello; // world
Примечание к 2: для этого необходимо выбрать (a) Лямбда-прокси-интеграция вместо использованияшаблон сопоставления, и в вашем коде вам потребуется JSON.parse
тело события перед доступом к данным, см. этот ответ для получения дополнительной информации
Все это зависит от того, откуда оно подаетсяAPI-шлюз.В этом конкретном примере я говорю о выполнении запроса REST для передачи данных на конечную точку шлюза API, которая затем обрабатывается Lambda, но множество других служб / триггеров могут отправлять данные в Lambda-скрипт для анализа.
Другие полезные ресурсы: