使用SGI的DynamoDB DocumentClient查询

时间:2017-01-26 14:07:39

标签: javascript node.js amazon-dynamodb

我正在尝试创建一个AWS lambda来查询一个非常基本的表,如下所示

主键=“DEVICE_ID”

次要全局索引:“USER_ID-index”分区键:USER_ID

次要全球索引:“USER_EMAIL-index”分区键:USER_EMAIL

我正在使用Javascript SDK示例和下面的代码,但我收到此错误:

  

ValidationException:查询条件错过了关键架构元素:DEVICE_ID

我无法获得任何有效的示例代码,而且他们的文档非常分散。

我的代码:

const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient({region:'us-east-1'});  //new AWS.DynamoDB({apiVersion: '2012-08-10'});

exports.handler = (event, context, callback) => {

    var params = {
        TableName: "DEVICE_ID_OWNER",
        KeyConditionExpression: "#user = :user",
        ExpressionAttributeNames: {"#user": "USER_ID"},  // , "#device" : "DEVICE_ID"}, 
        ExpressionAttributeValues: {":user":event.user_name},
    };

    docClient.query(params, (err, data) => {
        console.log(data);
        if(err){console.log(err);}
        else{console.log(data);}
    });
};
  

编辑:

     

这应该不是那么困难。我试过起诉的例子了   代码如下......但我收到了身份验证错误...

无权执行:dynamodb:查询资源:

  

我查看了IAM角色策略,并且包含了命令......

     

我从未见过如此糟糕的文件。

     

我的备用代码(抱歉,我重新创建了表名):

const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient({region:'us-east-1'});  //new AWS.DynamoDB({apiVersion: '2012-08-10'});

exports.handler = (event, context, callback) => {

    var params = {
        TableName: "DEVICE_ATTRIBUTES",
        //Key: {"DEVICE_ID":"098765432109876543214321"},
        IndexName: "USER_ID_INDEX",
        KeyConditionExpression: "USER_ID = :userid",
        ExpressionAttributeValues: {":userid": "BulldogLowell"},
        //ProjectionExpression: "DEVICE_ID, userid"
    };

    docClient.query(params, (err, data) => {
        if(err){console.log(err);}
        else{console.log(data);}
    }), callback();
};

1 个答案:

答案 0 :(得分:0)

解答:

要通过全局二级索引进行查询,必须返回IAM并为索引添加新的角色策略。我的困难在于我可以“放”并执行其他数据库功能,但我终于意识到错误是正确的:

  

无权执行:dynamodb:查询资源:

告诉我索引超出了原始角色政策的权限。

有没有办法为特定表格的所有“孩子”指明路径?