-
-
Save markusklems/1e7218d76d7583f1f7b3 to your computer and use it in GitHub Desktop.
// create an IAM Lambda role with access to dynamodb | |
// Launch Lambda in the same region as your dynamodb region | |
// (here: us-east-1) | |
// dynamodb table with hash key = user and range key = datetime | |
console.log('Loading event'); | |
var AWS = require('aws-sdk'); | |
var dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'}); | |
exports.handler = function(event, context) { | |
console.log(JSON.stringify(event, null, ' ')); | |
dynamodb.listTables(function(err, data) { | |
console.log(JSON.stringify(data, null, ' ')); | |
}); | |
var tableName = "chat"; | |
var datetime = new Date().getTime().toString(); | |
dynamodb.putItem({ | |
"TableName": tableName, | |
"Item" : { | |
"user": {"S": event.user }, | |
"date": {"S": datetime }, | |
"msg": {"S": event.msg} | |
} | |
}, function(err, data) { | |
if (err) { | |
context.done('error','putting item into dynamodb failed: '+err); | |
} | |
else { | |
console.log('great success: '+JSON.stringify(data, null, ' ')); | |
context.done('K THX BY'); | |
} | |
}); | |
}; | |
// sample event | |
//{ | |
// "user": "bart", | |
// "msg": "hey otto man" | |
//} |
How to return the inserted item? I want to return the inserted item as response.
@LamourBt your example is non-functional and it also doesn't align with the AWS Dynamo docs.
Hi guys, thanks to everyone that's contributed to this thread. It was helpful in getting things to work. I got writes to Dynamodb working using the Serverless framework. Link to gist below. 👇
https://gist.github.com/martimatix/06481e1321ab99bf4a501705235b261f
Hi
I found this tutorial most helpful nut I now find myself wanting to take it a step further by using less hardcoding of the Item values if possible.
Consider some incoming data that is not consistent in the types of data being received. Is it possible to iterate thru the JSON to determine the names of the items and then use them instead of hardcoding them?
ie
dynamodb.putItem({
"TableName": tableName,
"Item" : {
event1.name: {"S": event.1.data },
event2.name: {"S": event.2.data },
event3.name: {"S": event.3.data}
}
there is no putItem() method in DocumentClient anymore: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html#update-property
There is put(), update(), etc instead
Plus, if you use the DocumentClient, you can use normal JSON objects and the SDK will handle the object model for you.
Therefore
dynamodbDocClient.put({
'TableName': 'table',
'Item': {
'test': 'test',
'number': 1
}
}, function(err, data) {
if (err) {
console.log(err);
} else {
console.log(data);
}
});
Should work perfectly fine.
@deibid Thanks for the tip suggesting to use:
var doc = require('dynamodb-doc');
var dynamo = new doc.DynamoDB();
INSTEAD OF:
var AWS = require('aws-sdk');
var dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
I was getting "Task timed out after 3.00 seconds" on my DynamoDB calls until I followed your recommendation.
In case anyone gets here and is still seeing the "Task timed out after 3.00 seconds" thing -- I had to move my require and new doc.DynamicDB() lines to the very top of the lambda code -- outside of the exports.handler.
How do you write records to the account database? I've been able to successfully do this with a local version, but how can I add a record to the remotely hosted database?