#AWSマネジメントコンソールでDynamoDBのテーブル作成する場合
#idはプライマリキーパーティションキーになっています。下記のソースをupdateItemすると
let updateParam = {
"TableName" : "test",
"Key" : {
"id" : {"S" : "12345"}
},
"UpdateExpression" : "SET #name =:name",
"ExpressionAttributeNames" : {
"#name" : "name"
},
"ExpressionAttributeValues" : {
":name" : {"S" : "Jane"}
}
};
dynamodb.updateItem(updateParam, function(error, data) {
if(error) {
logger.error('error=' + util.inspect(error, false, null));
if (error.retryable) {
//retry
return;
} else {
//todo
return;
}
} else {
logger.info('update succeed');
}
});
##ValidationException
下記のvalidationエラーが出ます。
ValidationException: The provided key element does not match the schema
##原因
AWSのドキュメントをみたら
You can query only tables whose primary key is of hash-and-range type
マネジメントコンソールから作成されたテーブルのプライマリキーはシンプル (パーティションキー) または複合 (パーティションキーとソートキー) になっています。UpdateItemはサポートされたプライマリキーはハッシュかハッシュ&レンジです。
##解決方法
コマンドでテーブル作成、プライマリキーのtypeを指定することです。
aws dynamodb create-table --table-name test --attribute-definitions '[{"AttributeName": "id", "AttributeType": "S"}]' --key-schema '[{"AttributeName": "id", "KeyType": "HASH"}]' --provisioned-throughput '{"ReadCapacityUnits": 5, "WriteCapacityUnits": 5}'
もう一回上記のnodeを実行したら、正常に更新できました。
[2017-02-21 16:00:06.062] [INFO] [default] - update succeed
[2017-02-21 16:00:06.063] [INFO] [default] - update succeed
[2017-02-21 16:00:06.063] [INFO] [default] - update succeed
[2017-02-21 16:00:06.065] [INFO] [default] - update succeed
[2017-02-21 16:00:06.065] [INFO] [default] - update succeed
[2017-02-21 16:00:06.083] [INFO] [default] - update succeed
[2017-02-21 16:00:06.084] [INFO] [default] - update succeed
[2017-02-21 16:00:06.085] [INFO] [default] - update succeed
[2017-02-21 16:00:06.087] [INFO] [default] - update succeed