AWS Lambda: уточнение при извлечении данных из объекта события

На данный момент я думаю, что у меня есть фундаментальное недоразумение о том, как извлечь / передать данные из лямбда-функций, и я ищу разъяснения

Пример: допустим, я хочу передать некоторые данные лямбда-функции, т.е. {"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-шлюза.


Есть идеи?

10000