我正在使用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
})
但在第二行仍然得到相同的错误。我错过了什么?
答案 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管理控制台中将其视为"状态"在表中,确认或否认这一理论。