我在本地运行DynamoDB并使用shell创建一个表(localhost:8000 / shell /)。
可以使用以下代码确认:
var params = {
ExclusiveStartTableName: 'STRING_VALUE',
Limit: 10
};
dynamodb.listTables(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
输出
{"TableNames":["myTable"]}
然而,当我从PHP代码调用getItem / PutItem时,它会抛出以下错误
[Mon Dec 14 11:22:48.266930 2015] [:error] [pid 12] [客户 10.0.2.2:58042] PHP致命错误:未捕获的Aws \ DynamoDb \ Exception \ ResourceNotFoundException:AWS错误代码: ResourceNotFoundException,状态代码:400,AWS Request ID: 8de599f1-7aa6-4147-b2f8-b3acc74b09da,AWS错误类型:客户端,AWS 错误消息:无法对不存在的表执行操作, 用户代理:aws-sdk-php2 / 2.8.24 Guzzle / 3.9.3 curl / 7.35.0 PHP / 5.5.9-1ubuntu4.14 \ n抛入 /opt/lib/aws/sdk/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/NamespaceExceptionFactory.php 在第91行
这就是我创建客户端的方式
$this->client = DynamoDbClient::factory(array(
'key' => 'YOUR_KEY',
'secret' => 'YOUR_SECRET',
'profile' => 'default',
'region' => 'us-west-2',
//'version' => '2012-08-10',
'endpoint'=> 'http://localhost:8000',
//'debug' => true
));
如果端点错误,客户端创建本身会抛出错误,但在这种情况下,表格不会按照PHP创建
echo "List of tables";
$iterator = $this->client->()->getIterator('ListTables');
foreach ($iterator as $tableName) {
echo $tableName . "\n";
}
什么都不打印。
答案 0 :(得分:1)
我刚才在这里回答了类似的问题:https://stackoverflow.com/a/40806393/1061798
检查您如何启动dynamoDB。您需要添加-sharedDb标志,如上面链接中的答案中所述