DynamoDB表已创建,但无法插入新项

时间:2014-12-29 11:31:40

标签: amazon-dynamodb boto

我正在使用boto DynamoDBV2接口来创建和填充DynamoDB中的表。我的代码看起来像这样 -

my_table = Table.create(table_name, schema=[HashKey('key', data_type=STRING)], connection = self.connection)
my_table.put_item(data={
         'key': 'somekey',
         'value': value
      })

我创建了连接,当我运行它时,表格已正确创建,我可以在AWS控制台中看到它。但是当我试图将值放在表中时,我收到错误“找不到请求的资源”。

我也尝试单独阅读表格,然后插入这样的值 -

Table.create(table_name, schema=[HashKey('key', data_type=STRING)], connection = self.connection)
my_table = Table(table_name, self.connection)
my_table.put_item(data={
         'key': 'somekey',
         'value': value
      })

但在第二行仍然得到相同的错误。我错过了什么?

2 个答案:

答案 0 :(得分:3)

问题是在插入项目之前,您需要在创建表之后稍等一会儿。您可以使用waitFor()事件查找表的创建时间。

AWS Node SDK示例:

const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB();

const createTableParams = {
  // parameters...
}

dynamodb.createTable(createTableParams, (err, data) => {
    if (err) return console.log(err, err.stack);

    const params = {
        TableName: 'MY_TABLE'
    };

    dynamodb.waitFor('tableExists', params, (err, data) => {
        if (err) console.log(err, err.stack);
        else     insertData();
    });    
});

答案 1 :(得分:1)

您的表格在创建时不会立即就绪,您必须等待它在写入之前变为活动状态。我找到了Java code sample来说明如何执行此操作,但问题不是特定于语言,它适用于任何DynamoDB客户端。

您可以在AWS管理控制台中将其视为"状态"在表中,确认或否认这一理论。