Dynamodb连接:奇怪的行为

时间:2017-07-20 16:11:42

标签: spring spring-boot amazon-dynamodb razorsql

我使用此请求在Docker容器中创建了一个Amazon DynamoDB数据库:

curl -X POST http://192.168.99.100:8000/ -H 'accept-encoding: identity' -H 'authorization: AWS4-HMAC-SHA256 Credential=key/20170515/us-east-1/execute-api/aws4_request, SignedHeaders=accept-encoding;content-length;content-type;host;x-amz-date;x-amz-target, Signature=f2f21c6263ad5380aaa' -H 'cache-control: no-cache' -H 'content-type: application/json' -H 'x-amz-date: 20170515T151032Z' -H 'x-amz-target: DynamoDB_20120810.CreateTable' -d '{"AttributeDefinitions": [{"AttributeName": "userId","AttributeType": "S"}],"TableName": "User","KeySchema": [{"AttributeName": "userId","KeyType": "HASH"}],"ProvisionedThroughput": {"ReadCapacityUnits": 1,"WriteCapacityUnits": 1}}'

当我使用curl命令列出表格时:

curl -X POST http://192.168.99.100:8000/ -H 'authorization: AWS4-HMAC-SHA256 Credential=key/20170515/us-east-1/execute-api/aws4_request, SignedHeaders=accept-encoding;content-length;content-type;host;x-am z-date;x-amz-target' -H 'cache-control: no-cache' -H 'content-type: application/json' -H 'x-amz-date: 20 170515T151032Z' -H 'x-amz-target: DynamoDB_20120810.ListTables ' -d '{}'

一切正常。我得到了表格列表:

{"TableNames":["UserTable1","User", "TestTable]}

问题是当我使用RazorSQL连接到这个数据库时,它上面没有表格。我的应用程序spring-boot遇到了同样的问题,它引发了异常:

Cannot do operations on a non-existent table (Service: AmazonDynamoDBv2; Status Code: 400;

你对这种奇怪的行为有什么看法吗?

这是我的连接个人资料的屏幕截图:

enter image description here

1 个答案:

答案 0 :(得分:0)

在本地使用DynamoDB时,应注意以下几点:

  • 如果使用-sharedDb选项,则DynamoDB将创建一个名为 shared-local-instance.db 的数据库文件。连接到DynamoDB的每个程序都将访问此文件。如果删除该文件,则会丢失存储在其中的所有数据。
  • 如果省略-sharedDb,则数据库文件名为 myaccesskeyid_region.db ,并具有在应用程序配置中显示的AWS访问密钥ID和区域。如果删除该文件,则会丢失存储在其中的所有数据。

因此,请确保您通过了-shareDb

正在使用the official DynamoDB Local Docker image的用户可以这样做:

docker run -p 8000:8000 amazon/dynamodb-local -jar DynamoDBLocal.jar -inMemory -sharedDb

可以在docker inspect amazon/dynamodb-local输出中看到图像使用的原始ENTRYPOINTCMD,它们是:

"Entrypoint": [
    "java"
]
"Cmd": [
    "-jar",
    "DynamoDBLocal.jar",
    "-inMemory"
]

所以我们基本上复制了它们并添加了-sharedDb