#aws-lambda #serverless-framework #amazon-kinesis
#aws-lambda #бессерверный фреймворк #amazon-kinesis
Вопрос:
Извините, не был уверен, как сделать сам вопрос достаточно кратким…
Я могу отправлять данные из Postman в свою локальную лямбда-функцию. Проблема в том, что при локальном запуске я использую эту строку кода…
event = JSON.parse(event.body);
… чтобы я мог это сделать…
event.Records.forEach(function(record)
{
// do some stuff
}
Но когда я развертываю функцию в AWS, синтаксический анализ event.body не требуется. На самом деле это выдает ошибку.
Я предполагал, что в JSON (или других аспектах запроса), которые я отправляю из Postman в мое локальное приложение, есть что-то другое по сравнению с тем, что на самом деле отправляет Kinesis. Но большой двоичный объект JSON, который я публикую локально, был зарегистрирован непосредственно из Lambda на AWS в Cloudwatch.
Я что-то упускаю.
TBH, это имеет значение только потому, что необходимость комментировать эту строку как шаг в процессе развертывания раздражает и подвержена ошибкам.
Вот JSON (имена были изменены для защиты невинных):
{
"Records": [
{
"kinesis": {
"kinesisSchemaVersion": "1.0",
"partitionKey": "Thursday, 11 April 2019",
"sequenceNumber": "49594660145138471912435706107712688932829223550684495922",
"data": "some base 64 stuff",
"approximateArrivalTimestamp": 1555045874.83
},
"eventSource": "aws:kinesis",
"eventVersion": "1.0",
"eventID": "shardId-000000000003:1234123412341234123412341234123412341234123412341234",
"eventName": "aws:kinesis:record",
"invokeIdentityArn": "arn:aws:iam::1234123412341234:role/lambda-kinesis-role",
"awsRegion": "us-west-2",
"eventSourceARN": "arn:aws:kinesis:us-west-2:1234123412341234:stream/front-end-requests"
}
]
}
Комментарии:
1. Для моих целей на данный момент я просто изменил строку на:
if(event.body) event = JSON.parse(event.body);
2. Полезная
event
нагрузка будет иметь разные структуры в зависимости от исходного события, HTTP отличается от Kinesis. Если вы хотите протестировать локальное использованиеinvoke local
с тестовой полезной нагрузкой вместо выполнения HTTP-запросов.3. @Alex не использует ли Kinesis HTTP для отправки данных в Lambda?
4. Источником лямбда-события является Kinesis, а не API Gateway, который создает другую полезную нагрузку события. AWS внизу может использовать HTTP, но это не причина, по которой полезные нагрузки разные.