2

我使用此请求在 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;

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

这是我的连接配置文件的屏幕截图:

在此处输入图像描述

4

1 回答 1

2

在本地使用 DynamoDB 时,您应该注意以下事项:

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

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

使用官方 DynamoDB Local Docker 镜像的用户可以这样做:

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

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

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

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

于 2018-12-06T19:50:02.907 回答