Загрузка и десериализация данных protobuf в AWS Lambda - PullRequest
0 голосов
/ 29 января 2020

У меня есть требование отправлять данные protobuf в AWS лямбду, написанную в Node.js. Я экспериментирую с примером "Hello World", где я сериализую и десериализирую сообщение Person. Пример: person.proto

syntax = "proto3";

message Person {
    required int32 id = 1;
    required string name = 2;
    optional string email = 3;
}

Использование Node.js и пакета protobuf js Я могу сгенерировать код из файла proto и сериализовать и десериализовать объект Person в файл:

let person = personProto.Person.create();
person.id = 42;
person.name = 'Fred';
person.email = "fred@foo.com";
console.log("Person BEFORE Serialze=" + JSON.stringify(person1,null,2));

// Serialize
let buffer = personProtos.Person.encode(person1).finish();
console.log(buffer);
fs.writeFileSync("person.pb", buffer, "binary");

// Deserialize
let bufferFromFile = fs.readFileSync("person.pb");
let decodedPerson = personProtos.Person.decode(bufferFromFile);
console.log("Decoded Person=\n" + JSON.stringify(decodedPerson,null,2)); 

Вывод:

Person BEFORE Serialize={
  "id": 42,
  "name": "Fred",
  "email": "fred@foo.com"
}
<Buffer 08 2a 12 04 46 72 65 64 1a 0c 66 72 65 64 40 66 6f 6f 2e 63 6f 6d>
Decoded Person=
{
  "id": 42,
  "name": "Fred",
  "email": "fred@foo.com"
}

Используя Postman, я хочу загрузить двоичные данные protobuf в Lambda AWS из файла person.pb и десериализовать его в Lambda. Когда я указываю тело в виде «двоичного» типа и указываю файл person.pb, данные о человеке отображаются в теле события Lambda следующим образом:

"body": "\b*\u0012\u0004Fred\u001a\ffred@foo.com"

Похоже, оно было преобразовано в Unicode и закодировано? Как я могу взять значение строки тела и вернуть его обратно в буфер Node.js:

<Buffer 08 2a 12 04 46 72 65 64 1a 0c 66 72 65 64 40 66 6f 6f 2e 63 6f 6d>

, чтобы я мог десериализовать его обратно в объект JSON в моем лямбда-коде?

Я поместил сгенерированный код из файла .proto в свою Lambda, чтобы я мог позвонить:

let bufferFromEvent = event.body;  <== how do I get a buffer from this?
let decodedPerson = personProtos.Person.decode(bufferFromEvent);

Спасибо

...