我使用此请求在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;
你对这种奇怪的行为有什么看法吗?
这是我的连接个人资料的屏幕截图:
答案 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
输出中看到图像使用的原始ENTRYPOINT
和CMD
,它们是:
"Entrypoint": [
"java"
]
"Cmd": [
"-jar",
"DynamoDBLocal.jar",
"-inMemory"
]
所以我们基本上复制了它们并添加了-sharedDb
。