Aws lambda 使用AWS节点JS Lambda读取AWS dynamoDB中的过滤数据
我想从DynamoDB获取元素到我的NodeJS AWS Lambda。我希望由“所有者”列选择,但不起作用。我尝试对“id”列使用相同的语法,结果很好。我是否在dynamoDB中添加索引?在哪里Aws lambda 使用AWS节点JS Lambda读取AWS dynamoDB中的过滤数据,aws-lambda,amazon-dynamodb,Aws Lambda,Amazon Dynamodb,我想从DynamoDB获取元素到我的NodeJS AWS Lambda。我希望由“所有者”列选择,但不起作用。我尝试对“id”列使用相同的语法,结果很好。我是否在dynamoDB中添加索引?在哪里 'use strict'; var AWS = require('aws-sdk'); var documentClient = new AWS.DynamoDB.DocumentClient({'region': 'eu-west-1'}); exports.handler = functio
'use strict';
var AWS = require('aws-sdk');
var documentClient = new AWS.DynamoDB.DocumentClient({'region': 'eu-west-1'});
exports.handler = function(event, context, callback) {
console.log(JSON.stringify(event));
const claims = event.requestContext.authorizer.claims;
const username = claims['cognito:username'];
var params = {
TableName : "tp-exam",
Key: {
owner: username
}
};
documentClient.get(params, function(err, data){
if (err) {
console.log("Error", err);
const errResponse = {
statusCode: 500,
headers: {
"Access-Control-Allow-Origin": "*"
},
body: JSON.stringify({ Error: 500, device : "DynamoDB"})
};
callback(null, errResponse);
} else {
console.log("Success", data.Item);
const response = {
statusCode: 200,
headers: {
"Access-Control-Allow-Origin": "*"
},
body: JSON.stringify(data.Item)
};
callback(null, response);
}
});
};
我的错误是:
ValidationException: The provided key element does not match the schema
at Request.extractError (/var/runtime/node_modules/aws-sdk/lib/protocol/json.js:52:27)
at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:106:20)
at Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
at Request.emit (/var/runtime/node_modules/aws-sdk/lib/request.js:688:14)
at Request.transition (/var/runtime/node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (/var/runtime/node_modules/aws-sdk/lib/state_machine.js:14:12)
at /var/runtime/node_modules/aws-sdk/lib/state_machine.js:26:10
at Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:38:9)
at Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:690:12)
at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:116:18) {
code: 'ValidationException',
time: 2021-03-01T21:46:40.263Z,
requestId: 'C7UHG8354A92SGP2T4FRRFU4GFVV4KQNSO5AEMVJF66Q9ASUAAJG',
statusCode: 400,
retryable: false,
retryDelay: 32.73628085995177
}
ValidationException:提供的键元素与架构不匹配
at Request.extractError(/var/runtime/node_modules/aws sdk/lib/protocol/json.js:52:27)
at Request.callListeners(/var/runtime/node_modules/aws sdk/lib/sequential_executor.js:106:20)
at Request.emit(/var/runtime/node_modules/aws sdk/lib/sequential_executor.js:78:10)
at Request.emit(/var/runtime/node_modules/aws sdk/lib/Request.js:688:14)
at Request.transition(/var/runtime/node_modules/aws sdk/lib/Request.js:22:10)
在AcceptorStateMachine.runTo(/var/runtime/node_modules/aws sdk/lib/state_machine.js:14:12)
at/var/runtime/node_modules/aws sdk/lib/state_machine.js:26:10
应要求。(/var/runtime/node_modules/aws sdk/lib/request.js:38:9)
应要求。(/var/runtime/node_modules/aws sdk/lib/request.js:690:12)
at Request.callListeners(/var/runtime/node_modules/aws sdk/lib/sequential_executor.js:116:18){
代码:“ValidationException”,
时间:2021-03-01T21:46:40.263Z,
requestId:'C7UHG8354A92SGP2T4FRRFU4GFV4KQNSO5AEMVJF66Q9ASUAJG',
状态代码:400,
可检索:错误,
retryDelay:32.73628085995177
}
此错误表示您没有为DynamoDb#get操作提供正确的主键
以下几点提示:
- 确保提供了正确的分区密钥名称。您确定您的分区键属性名为
owner
- 确保提供了整个主键。DynamoDB中的主键有两种形式:简单键和复合键。简单的主键仅由分区键组成。复合主键由分区键和排序键组成。您的错误表明您可能有一个复合主键,但没有指定主键的排序键部分
owner
属性不是主键的一部分,并且您希望按该字段进行搜索,则有几个选项
owner
作为主键或scan
操作按非键属性进行搜索let docClient = new AWS.DynamoDB.DocumentClient();
documentClient.query(
{
TableName: "tp-exam",
IndexName: "owner-index",
KeyConditionExpression: "#owner_attr = :ownerVal",
ExpressionAttributeValues: {
":ownerVal": "John",
},
ExpressionAttributeNames: {
"#owner_attr": "owner",
},
},
function (err, data) {
console.log("err", err, "data", data);
}
);
owner
是一个保留关键字,因此,我们需要使用expressAttributeName替换为实际属性