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

unable to create table in dynamodb-local - aws

我正在使用 dynamoDB-local 和 nodejs 代码。

我有以下代码:

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)
  });
});

但它并没有创建 table。我在日志中收到 { TableNames: [] }。 错误为空。

发出 createTable 后,您必须等到 table 有效创建。创建 table 后,它将出现在您的 listTables 调用中。您可以使用 describeTable 调用等待。

http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html#createTable-property

CreateTable is an asynchronous operation. Upon receiving a CreateTable request, DynamoDB immediately returns a response with a TableStatus of CREATING.

You can use the DescribeTable API to check the table status.

您似乎在 CreateTable 请求中缺少必需的 ProvisionedThroughput 参数。所以发生的事情是 CreateTable returns 验证错误并且 ListTables 成功执行而不返回任何表(代码中的 "err" 变量似乎用于 ListTables 调用)

例如以下对我有用

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)
    });
  }
});