Как мне отправить тестовое событие Kinesis из Postman в локальную лямбда-функцию, работающую без сервера?

#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, но это не причина, по которой полезные нагрузки разные.