标签: dynamo-local

密钥模式中的属性数必须与属性定义中定义的属性数相匹配

我正在尝试使用DynamoDB javascript shell创建一个简单的表,我得到了这个异常:


    {   
    "message": "The number of attributes in key schema must match the number of attributes defined in attribute definitions.",
    "code": "ValidationException",
    "time": "2015-06-16T10:24:23.319Z",
    "statusCode": 400,
    "retryable": false 
    }

下面是我要创建的表:


    var params = {
        TableName: 'table_name',
        KeySchema: [ 
            { 
                AttributeName: 'hash_key_attribute_name',
                KeyType: 'HASH',
            },

        ],
        AttributeDefinitions: [ 
            {
                AttributeName: 'hash_key_attribute_name',
                AttributeType: 'S', 
            },
            {
                AttributeName: 'attribute_name_1',
                AttributeType: 'S', 
            }
        ],
        ProvisionedThroughput: { 
            ReadCapacityUnits: 1, 
            WriteCapacityUnits: 1, 
        },


    };
    dynamodb.createTable(params, function(err, data) {
        if (err) print(err); 
        else print(data); 
    }); …
Run Code Online (Sandbox Code Playgroud)

amazon-dynamodb dynamo-local

82
推荐指数
3
解决办法
4万
查看次数

使用Boto3将Localhost端点连接到DynamoDB Local

尽管亚马逊提供了有关如何使用Java,PHP和.Net 连接到本地dynamoDB的文档,但没有描述如何使用Python连接到localhost:8000.Web上的现有文档指向在boto.dynamodb2.layer1中使用DynamoDBConnection方法,但这会在使用boto3协议管理dynamoDB的实时环境和测试环境之间创建不兼容性.

在boto3中,您可以使用以下构造函数和设置到环境中的变量向dynamo发出请求:

client = boto3.client('dynamodb')
table = client.list_tables()
Run Code Online (Sandbox Code Playgroud)

而boto.dynamodb2.layer1包需要您构造以下内容:

client = DynamoDBConnection(
    host='localhost',
    port=8000,
    aws_access_key_id='anything',
    aws_secret_access_key='anything',
    is_secure=False)
table = client.list_tables()
Run Code Online (Sandbox Code Playgroud)

尽管可以创建基于本地环境确定正确构造函数的逻辑,但我对构建一组将每个构造函数视为相同的方法持谨慎态度.相反,我更喜欢使用boto3来处理所有事情,并且能够在环境变量中设置dynamoDB的端点.不幸的是,该选项似乎目前无法使用.

有没有办法使用boto3来定义dynamoDB本地端点(就像其他语言一样)?或亚马逊计划支持此功能的任何机会?

python amazon-dynamodb dynamo-local

33
推荐指数
4
解决办法
2万
查看次数

错误InvalidParameterType:期望params.Item ['pid']成为DynamoDB中的结构

注意:所有这些都发生在DynamoDB的本地实例上.

这是我用来从DynamoDB Shell创建表的代码:

var params = {
    TableName: "TABLE-NAME",
    KeySchema: [
        { AttributeName: "pid", 
          KeyType: "HASH"
        }
    ],
    AttributeDefinitions: [
        { AttributeName: "pid",
          AttributeType: "S"
        }
    ],
    ProvisionedThroughput: {
        ReadCapacityUnits: 1,
        WriteCapacityUnits: 1
    }
};


dynamodb.createTable(params, function(err, data) {
    if (err)
        console.log(JSON.stringify(err, null, 2));
    else
        console.log(JSON.stringify(data, null, 2));
});
Run Code Online (Sandbox Code Playgroud)

这是被调用以将元素添加到DB中的函数(在node.js中):

function(request, response) {
  params = {
    TableName: 'TABLE-NAME',
    Item: {
      pid: 'abc123'
    }
  };
  console.log(params);
  dynamodb.putItem(params, function(err, data) {
    if (err)
      console.log(JSON.stringify(err, null, 2));
    else
      console.log(JSON.stringify(data, null, 2));
  });
} …
Run Code Online (Sandbox Code Playgroud)

amazon-dynamodb dynamo-local

18
推荐指数
1
解决办法
2万
查看次数

来自Node-aws的Dynamo Local:所有操作都失败"无法对不存在的表执行操作"

我有一个本地dynamo-db运行.我已经使用JavaScript控制台设置了表格,并且从那里列出了OK.

我还可以从JavaScript控制台向我的表中放置和获取项目:

var params = { TableName:"environmentId", Item: { environmentId: {"S":"a4fe1736-98cf-4560-bcf4-cc927730dd1b"} }};
dynamodb.putItem(params, function(err, data) {
    console.log("put : err was " + JSON.stringify(err) + " and data is " + JSON.stringify(data));
});
Run Code Online (Sandbox Code Playgroud)

打印put : err was null and data is {}我认为是"成功"因为

params = { "Key":{"environmentId":{"S":"a4fe1736-98cf-45e0-bcf4-cc927730dd1b"}},"TableName":"environmentId"}
dynamodb.getItem(params, function(err, data) {
    console.log("get : err was " + JSON.stringify(err) + " and data is " + JSON.stringify(data));
});
Run Code Online (Sandbox Code Playgroud)

打印,get : err was null and data is {"Item":{"environmentId":{"S":"a4fe1736-98cf-45e0-bcf4-cc927730dd1b"}}}即它检索我刚刚放到桌子上的对象.

但是,如果它启动节点REPL并键入:

var …
Run Code Online (Sandbox Code Playgroud)

node.js amazon-dynamodb dynamo-local

17
推荐指数
2
解决办法
1万
查看次数

Amazon DynamoDB Local - 未知错误,异常或失败

我必须测试一个严重依赖Amazon的DynamoDB的应用程序.我希望测试能够单独运行,这就是我选择DynamoDB Local的原因.jar.我知道最近的更新,使我们能够在没有外部bash命令调用的情况下运行它.但是,当我尝试运行此处指定的示例时,我得到以下stacktrace:

Exception in thread "main" com.amazonaws.AmazonServiceException: The request processing has failed because of an unknown error, exception or failure. (Service: AmazonDynamoDBv2; Status Code: 500; Error Code: InternalFailure; Request ID: cab7a550-aaa6-4bfe-a591-0b255481cc14)
    at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1275)
    at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:873)
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:576)
    at com.amazonaws.http.AmazonHttpClient.doExecute(AmazonHttpClient.java:362)
    at com.amazonaws.http.AmazonHttpClient.executeWithTimer(AmazonHttpClient.java:328)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:307)
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.invoke(AmazonDynamoDBClient.java:1805)
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.listTables(AmazonDynamoDBClient.java:1223)
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.listTables(AmazonDynamoDBClient.java:1235)
Run Code Online (Sandbox Code Playgroud)

这是我试图运行的代码:

public static void main( String[] args ) throws Exception
    {
        AmazonDynamoDB dynamodb = null;

        DynamoDBProxyServer server = null;
        final String[] localArgs = { "-inMemory", "-port", "13005" …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-dynamodb dynamo-local

14
推荐指数
1
解决办法
7100
查看次数

流支持本地dynamodb?

我似乎无法在Dynamo db local中获得流支持,是否支持?我能找到它的唯一标志是http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Tools.DynamoDBLocal.html#Tools.DynamoDBLocal.Differences中的最后一个要点.

使用dynamodb local,似乎忽略了StreamSpecification,因此在调用createTable或describeTable时没有LatestStreamArn

以下代码使用托管的dynamodb服务返回LatestStreamArn,但不返回dynamodb local:

ddb.createTable({
  TableName: 'streaming_test',

  AttributeDefinitions: [
    { AttributeName: 'id', AttributeType: 'S' }
  ],

  KeySchema: [
    { AttributeName: 'id', KeyType: 'HASH' }
  ],

  ProvisionedThroughput: {
    ReadCapacityUnits: 5,
    WriteCapacityUnits: 5
  },

  StreamSpecification: {
    StreamEnabled: true,
    StreamViewType: 'NEW_AND_OLD_IMAGES'
  }
}, function (err, data) {
  if (err) {
    console.log(err, err.stack)
  } else {
    // data.TableDescription.StreamSpecification and 
    // data.TableDescription.LatestStreamArn are undefined 
    // for dynamodb local
    console.log(data)
  }
})
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-dynamodb dynamo-local

14
推荐指数
1
解决办法
3459
查看次数

作为Gradle Java项目的一部分,将Dynamodb本地运行

我正在尝试运行dynamodb local进行测试.我按照亚马逊提供的步骤设置它并运行jar本身工作正常(链接到亚马逊的教程这里).但是,本教程不会在您自己的项目中运行jar.我不希望所有其他开发人员每次测试代码时都必须抓住jar并在本地运行它.

这就是我的问题所在.我在网上找到了如何配置gradle项目以运行dynamodb本地服务器作为我的测试的一部分.我找到了以下maven示例https://github.com/awslabs/aws-dynamodb-examples/blob/master/src/test/java/com/amazonaws/services/dynamodbv2/DynamoDBLocalFixture.java#L32我正在尝试转换它是一个gradle,但是com.amazonaws.services.dynamodbv2.local他们正在使用的所有import语句都会出错.错误是无法找到资源.

我进入他们项目的pom并将以下内容放入我的gradle.build文件中以模拟它.

//dynamodb local dependencies
testCompile('com.amazonaws:aws-java-sdk-dynamodb:1.10.42')
testCompile('com.amazonaws:aws-java-sdk-cloudwatch:1.10.42')
testCompile('com.amazonaws:aws-java-sdk:1.3.0')
testCompile('com.amazonaws:amazon-kinesis-client:1.6.1')
testCompile('com.amazonaws:amazon-kinesis-connectors:1.1.1')
testCompile('com.amazonaws:dynamodb-streams-kinesis-adapter:1.0.2')
testCompile('com.amazonaws:DynamoDBLocal:1.10.5.1')
Run Code Online (Sandbox Code Playgroud)

导入语句仍然失败.这是一个失败的例子.

import com.amazonaws.services.dynamodbv2.local.embedded.DynamoDBEmbedded;
Run Code Online (Sandbox Code Playgroud)

TL; DR

有没有人设法让dynamodb本地jar作为gradle项目的一部分执行,或者有一个很好的教程的链接(它不一定是我链接到的教程).

java gradle amazon-dynamodb dynamo-local

11
推荐指数
2
解决办法
4688
查看次数

AWS NoSQL Workbench - ValueError:“localhost”不是 dynamodb 的有效 AWS 区域名称

我使用 AWS NoSQL Workbench 查看我的 DynamoDBLocal 表。
我可以连接到我的 DynamoDBLocal 并列出我拥有的表的名称,但是当我想查看任何表的内容时,我会得到以下堆栈跟踪:

2022-08-11T08:22:12.749 ERROR --- [   asgi_gw_2] l.aws.handlers.logging     : exception during call chain
Traceback (most recent call last):
  File "/opt/code/localstack/localstack/aws/chain.py", line 57, in handle
    handler(self, self.context, response)
  File "/opt/code/localstack/localstack/aws/handlers/service.py", line 121, in __call__
    handler(chain, context, response)
  File "/opt/code/localstack/localstack/aws/handlers/legacy.py", line 81, in __call__
    result = self.forward_request(
  File "/opt/code/localstack/localstack/aws/handlers/legacy.py", line 141, in forward_request
    return do_forward_request(
  File "/opt/code/localstack/localstack/services/edge.py", line 225, in do_forward_request
    result = do_forward_request_inmem(api, method, path, data, headers, port=port)
  File "/opt/code/localstack/localstack/services/edge.py", line 249, in …
Run Code Online (Sandbox Code Playgroud)

workbench dynamo-local

11
推荐指数
0
解决办法
1257
查看次数

什么是cli的有效dynamodb key-condition-expression

有人可以告诉我一个有效的关键条件表达式.我试图在一个名为MyKeyTable的简单表上运行查询.它有两个"列",即Id和AnotherNumberThatICareAbout,类型为Long.

我想看看我投入的所有价值观.所以我尝试过:

aws dynamodb query --select ALL_ATTRIBUTES --table-name MyKeyTable
--endpoint http://localhost:8000 
--key-condition-expression "WHAT DO I PUT IN HERE?"
Run Code Online (Sandbox Code Playgroud)

我需要放入什么哈希?文档对这个imho有点蹩脚.任何帮助表示感谢,即使它只是一个好文档的链接.

amazon-dynamodb aws-cli dynamo-local

10
推荐指数
2
解决办法
6737
查看次数

dynamo db 本地 shell 不使用 docker 图像列出表

我使用泊坞窗启用dynamoDB地方提到这里

以下是我的 JS 代码:

AWS.config.update({
  region: 'sas',
  endpoint:  'http://docker.for.mac.host.internal:8000' //'http://localhost:8000'
});
Run Code Online (Sandbox Code Playgroud)

并在下面创建表函数:

function createTable() {
    let params = {
        TableName: 'sas',
        KeySchema: [{
            AttributeName: 'title',
            KeyType: 'HASH',
        }],
        AttributeDefinitions: [{
            AttributeName: 'title',
            AttributeType: 'S'
        }],
        ProvisionedThroughput: {
            ReadCapacityUnits: 1,
            WriteCapacityUnits: 1,
        }
    };
    dynamoDB.createTable(params, function(err, data) {
        if (err)
            console.log(err); // an error occurred
        else
            console.log(data);
    });
}   
Run Code Online (Sandbox Code Playgroud)

我可以看到使用 cli创建的表sas

aws dynamodb list-tables --endpoint-url http://localhost:8000 --region=sas  
Run Code Online (Sandbox Code Playgroud)

但没有在 中列出表格,它总是空的。

http://localhost:8000/shell/
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

注意:通过在本地运行 dynamodb jar,我可以使用上面的代码查看我的表格

 java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services node.js amazon-dynamodb docker dynamo-local

10
推荐指数
2
解决办法
3424
查看次数