JollyRoger
JollyRoger

Reputation: 847

DynamoDB InvalidParameterType Error While Trying To Put A New Item

I am trying to implement a DynamoDB based application to store some request data. I read the DynamoDB official documentation and currently I am following this official tutorial to do some basic operations.

I am using a local DynamoDB docker container. You can run it with this:

docker run -d -p 8000:8000 amazon/dynamodb-local:latest -jar DynamoDBLocal.jar -sharedDb

When I try to create a new table just same as the tutorial I gave above, I got no error, everything is fine:

var params = {
TableName: 'book',
KeySchema: [
    {
        AttributeName: 'title',
        KeyType: 'HASH',
    }
],
AttributeDefinitions: [
    {
        AttributeName: 'title',
        AttributeType: 'S'
    }
],
ProvisionedThroughput: {
    ReadCapacityUnits: 1, 
    WriteCapacityUnits: 1, 
}

};
dynamodb.createTable(params, function(err, data) {
    if (err) print(err); // an error occurred
    else print(data); // successful response

});

But when I try to put some new items in it:

var params = {
TableName: 'book',
Item: { // a map of attribute name to AttributeValue
    title: "Sample Application: CloudList",
    chapter: 10
    }
};

dynamodb.putItem(params, function(err, data) {
    if (err) print(err); // an error occurred
    else print(data); // successful response
});

I got this error:

enter image description here

31 validation error actually is equal to number of chars in title: Sample Application: CloudList. DynamoDB shell also did not recognized the print function which is given in the above tutorial. So I had to replace it with ppJson function. Where am I doing wrong and how can I put/delete/get items from DynamoDB via Web Shell? (and also via PHP code)


Edit: I also tried what Vikdor said in the comment, it seems I got rid of that UnexpectedParameter error but this time I got Invalid attribute value type error.

var params = {
    TableName: 'book',
    Item: { // a map of attribute name to AttributeValue
        'title': {S: "Sample Application: CloudList"},
        'chapter': {N: '10'}
    }
};

Upvotes: 0

Views: 498

Answers (1)

Vikdor
Vikdor

Reputation: 24124

This doc explains the structure of the Item key in the params passed to the API and your params should be as follows:

var params = {
    TableName: "book",
    Item: { 
        "title": {"S": "Sample Application: CloudList"},
        "chapter": {"N": :10"}
    }
};

Note that even the numbers should be enclosed in quotes.

Upvotes: 1

Related Questions