In order to store data into a DynamoDB table we first need to setup the permissions for the Lambda function to have write access. Further we can use the DocumentClient API shipping with AWS to write the data coming from a request to the DynamoDB table.
Great so far!
You have a couple minor typos in your last Create.js in the transcript:
const AWS = require('aws-sdk');
const uuid = require('uuid/v4');
const client = new AWS.DynamoDB.documentClient();
module.exports.run = async (event) => {
const data = JSON.parse(event.body);
const params = {
TableName: 'todos',
Item: {
id: uuid(),
text: data.text,
checked: false
}
};
};
If you are using the cmd and single quotes are giving you problems, use double quotes and escape the quotes within the string: curl -X POST https://zm7tuyj33a.execute-api.us-east-1.amazonaws.com/dev/todos --data "{"text": "learn serverless"}"
I was having issues with posting data with curl
. I was getting "Internal Server error". After checking CloudWatch it turns out that the updated uuid
package I was using, had changed its API
From https://www.npmjs.com/package/uuid
const { v4: uuidv4 } = require('uuid');
uuidv4(); // ⇨ '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed'
So I had to use uuidv4()
for creating a todo id to make it work