На данный момент я думаю, что у меня есть фундаментальное недоразумение о том, как извлечь / передать данные из лямбда-функций, и я ищу разъяснения
Пример: допустим, я хочу передать некоторые данные лямбда-функции, т.е. {"hello":"world"}
1) event.queryStringParameters (имеет смысл)
ех. Мы можем прикрепить параметры запроса к URL- адресу запроса: https://fakefakefake.execute-api.us-west-2.amazonaws.com/test/myapi?hello=world и в лямбда-функции:
const data = event.queryStringParameters.hello; // world
2) event.body (имеет смысл, и это возможно благодаря «интеграции лямбда-прокси»)
ех. Если мы прикрепим данные в теле запроса POST / PUT / etc, мы сможем получить к ним доступ через event.body
& в функции lambda:
const data = event.body.hello; // world
3) Непосредственно на объекте события (неясно)
ех. Этот случай на данный момент неясен - передать данные в лямбда-функцию, где они затем будут доступны непосредственно из объекта события?
const data = event.hello; // world
Каков пример того, как передавать данные «напрямую» на объект события в лямбда-функции, как в случае № 3? Я думаю, этот случай требует создания «шаблона отображения» при настройке API / Lambda, но мне все еще неясно.
Для простого сценария Node в случае 2, как представляется, есть «накладные расходы» на синтаксический анализ тела события из строкового JSON, так что это понятный недостаток, но почему или когда вариант 3 будет более желательным подходом?
Всего 1 ответ
Lambda - это автономный сервис, который не нужно интегрировать с API Gateway. queryStringParameters
, body
, body mapping templates
, все это относится не только к Lambda, но и к интеграции Lambda - API Gateway.
Если вы используете Lambda с другими сервисами, то данные обычно передаются напрямую через объект event
и нет особых причин для их передачи другим способом.
Например, вы можете подписать функцию Lambda на корзину S3 и использовать ее для программной обработки таких событий, как файл, загружаемый в вашу корзину. В этом случае такая информация, как имя сегмента, ключ объекта, данные объекта, метаданные, ... будет передаваться напрямую через объект event
.
И, при использовании Lambda с API-шлюзом, зачем вам использовать body mapping templates
для передачи данных в вашу функцию Lambda напрямую через объект event
? Потому что вы можете использовать эту функцию намного проще для других целей (если она жизнеспособна в вашем сценарии), потому что ваша лямбда-функция будет иметь гораздо более простой интерфейс, чем та, которая тесно связана с интеграцией API-шлюза.
Например, у вас может быть функция, которая выполняет некоторые вычисления переданных номеров, которые вы можете вызывать через API-шлюз, а также вызывать ее непосредственно из вашего приложения. Работать с такой функцией будет намного проще, если она ожидает event.x
и event.y
вместо некоторого event.queryStringParameter.x
который может иметь нулевой смысл вне API-шлюза.