我正在使用带有nodejs代码的dynamoDB-local。
我有以下代码:
var aws = require("aws-sdk")
aws.config.update({"accessKeyId": "aaa",
"secretAccessKey": "bbb",
"region": "us-east-1"})
var awsdb = new aws.DynamoDB({ endpoint: new aws.Endpoint("http://localhost:8000") });
awsdb.createTable({
TableName: 'myTbl',
AttributeDefinitions: [
{ AttributeName: 'aaa', AttributeType: 'S' },
],
KeySchema:[
{ AttributeName: 'aaa', KeyType: 'HASH' }
]
}, function() {
awsdb.listTables(function(err, data) {
console.log(data)
});
});
但它并没有创建表格。我在日志中收到{ TableNames: [] }
。
错误是空的。
答案 0 :(得分:3)
您似乎缺少CreateTable请求中所需的ProvisionedThroughput参数。所以发生的事情是CreateTable返回一个验证错误并且ListTables成功执行而不返回任何表(代码中的“err”变量似乎是用于ListTables调用)
E.g。以下是为我工作
var aws = require("aws-sdk")
aws.config.update({"accessKeyId": "aaa",
"secretAccessKey": "bbb",
"region": "us-east-1"})
var awsdb = new aws.DynamoDB({ endpoint: new aws.Endpoint("http://localhost:8000") });
awsdb.createTable({
TableName: 'myTbl',
AttributeDefinitions: [
{ AttributeName: 'aaa', AttributeType: 'S' },
],
KeySchema:[
{ AttributeName: 'aaa', KeyType: 'HASH' }
],
ProvisionedThroughput: {ReadCapacityUnits: 1, WriteCapacityUnits: 1},
}, function(err, data) {
if (err)
console.log(err, err.stack); // an error occurred
else {
awsdb.listTables(function(err, data) {
console.log(data)
});
}
});
答案 1 :(得分:0)
发布createTable后,您必须等到表有效创建。创建表后,它将显示在listTables调用中。您可以使用describeTable调用等待。
http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html#createTable-property
CreateTable是一个异步操作。收到CreateTable请求后,DynamoDB会立即返回TableStatus为CREATING的响应。
您可以使用DescribeTable API检查表状态。