无法在dynamodb-local中创建表 - aws

时间:2015-02-24 13:58:40

标签: node.js amazon-web-services amazon-dynamodb

我正在使用带有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: [] }。 错误是空的。

2 个答案:

答案 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检查表状态。