У меня есть лямбда-триггер, подключенный к потокам DynamoDB. Соответствующий документ DynamoDB передается объекту Lambda как AttributeValue .
Моя лямбда-функция выглядит следующим образом:
import { Handler, Context, Callback } from 'aws-lambda'
import { config, DynamoDB } from 'aws-sdk'
const handler: Handler = async (event: any, context: Context, callback: Callback) => {
if (!event) {
return callback(null, `Failed processing records. event is null.`);
}
if (!event.Records) {
return callback(null, `Failed processing records. No records present.`);
}
event.Records.forEach((record) => {
console.log(record.eventID);
console.log(record.eventName);
console.log('DynamoDB Record: %j', record.dynamodb);
//An example of record.dynamodb is shown below.
});
return callback(null, `Successfully processed ${event.Records.length} records.`);
}
export { handler }
Пример AttributeValue выглядит следующим образом:
{
"ApproximateCreationDateTime": 1554660820,
"Keys": {
"id": {
"S": "ab66eb3e-045e-41d6-9633-75597cd47234"
},
"date_time": {
"S": "2019-04-07T18:13:40.084Z"
}
},
"NewImage": {
"some_property": {
"S": "some data"
},
"another_property": {
"S": "more data"
},
"id": {
"S": "ab66eb3e-045e-41d6-9633-75597cd47234"
},
"date_time": {
"S": "2019-04-07T18:13:40.084Z"
}
},
"SequenceNumber": "60215400000000011976585954",
"SizeBytes": 1693,
"StreamViewType": "NEW_IMAGE"
}
Как мне сопоставить AttributeValue с объектом javascript, предпочтительно используя определение Typescript? То есть если я определю класс Typescript следующим образом:
class DynamoDBDocument {
id: string;
date_time: Date;
some_property: string
another_property: string
}
это приведет к объекту, подобному этому:
{
"id": "ab66eb3e-045e-41d6-9633-75597cd47234",
"date_time": "S": "2019-04-07T18:13:40.084Z",
"some_property": "some data",
"another_property": "more data"
}
DynamoDB Data Mapper выглядит многообещающим решением, но я не могу понять, как использовать его с AttributeValue.