lkd-collection
v1.0.3
Published
Implement collections in a lkd stack (Lambda, Kinesis, DynamoDB)
Downloads
1
Readme
#lkd-collection
Implement collections in a lkd stack (Lambda, Kinesis, DynamoDB).
How it works
The library implements two lambda functions: a producer and a consumer.
The producer is invoked by API Gateway, and its job is to publish collection-related events into a Kinesis Stream. The consumer is invoked by Kinesis, and its job is to build a materialized view of the collection into DynamoDB, taking as source the collection-related events created by the producer.
Application event format
{
"data": {},
"timestamp": 1437918813731,
"type": "event-type"
}
The data
property can be any JSON document.
Collection events
Insert
API Gateway request body:
{
"method": "/collection-name/insert",
"params": [{
"elementKey": "elementValue"
}]
}
Resulting event sent to kinesis:
{
"data": {
"element": {
"elementKey": "elementValue"
}
},
"timestamp": 1437918813731,
"type": "/collection-name/insert"
}
Resulting document inserted into dynamodb
{
"id": "someId",
"elementKey": "elementValue"
}
Remove
API Gateway request body:
{
"method": "/collection-name/remove",
"params": ["elementId"]
}
Resulting event sent to kinesis:
{
"data": {
"id": "elementId"
},
"timestamp": 1437918813731,
"type": "/collection-name/remove"
}
Resuling operation on dynamodb
Removal of document with document.id === elementId
.
Replace
API Gateway request body:
{
"method": "/collection-name/replace",
"params": ["elementId", {
"replacedKey": "replacedValue"
}]
}
Resulting event sent to kinesis:
{
"data": {
"id": "elementId",
"element": {
"replacedKey": "replacedValue"
}
},
"timestamp": 1437918813731,
"type": "/collection-name/replace"
}
Resulting document inserted into dynamodb (replaces the existing one)
{
"id": "someId",
"replacedKey": "replacedValue"
}
Example usage
/* Lambda function invoked by API Gateway */
import Collection from "lkd-collection";
var myCollection = new Collection({
name: "myCollectionName"
kinesisStreamName: "myStream"
});
export var handler = myCollection.producer;
/* Lambda function invoked by Kinesis */
import Collection from "lkd-collection";
var myCollection = new Collection({
name: "myCollectionName",
dynamodbTableName: "myTable"
});
export var handler = myCollection.consumer;