我正在尝试创建一个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();
};
答案 0 :(得分:0)
解答:
要通过全局二级索引进行查询,必须返回IAM并为索引添加新的角色策略。我的困难在于我可以“放”并执行其他数据库功能,但我终于意识到错误是正确的:
无权执行:dynamodb:查询资源:
告诉我索引超出了原始角色政策的权限。
有没有办法为特定表格的所有“孩子”指明路径?