AWS Lambda - ValidationException:提供的关键元素与模式不匹配
AWS Lambda - ValidationException: The provided key element does not match the schema
正在尝试从 Postman 中的 DynamoDB 获取单个项目。但我不断从我的 lambda 代码中收到以下错误:
“ValidationException:提供的关键元素与架构不匹配。”
const AWS = require('aws-sdk');
AWS.config.update( {
region: 'us-east-1'
});
const dynamodb = new AWS.DynamoDB.DocumentClient();
const dynamodbTableName = 'customers';
const healthPath = '/health';
const customerPath = '/customer';
这是我的 lambda 处理程序
exports.handler = async function(event, context) {
let response;
switch(true) {
case event.httpMethod === 'GET' && event.path === healthPath:
response = buildResponse(200);
break;
case event.httpMethod === 'GET' && event.path === customerPath:
response = await getCustomer(event.queryStringParameters.customer_id);
break;
default:
response = buildResponse(404, '404 Not Found');
}
return response;
}
此函数获取客户的信息
async function getCustomer(customer_id) {
const params = {
TableName: dynamodbTableName,
Key: {
'customer_id': customer_id
},
}
return await dynamodb.get(params).promise().then((response) => {
return buildResponse(200, response.Item);
}, (error) => {
// THIS IS WHERE I GET THE ERORR <-------------------------------------------------------
console.error('GET ERROR --->', error);
});
}
这是我的回调函数
function buildResponse(statusCode, body) {
return {
statusCode: statusCode,
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(body)
}
}
这是架构图。除了 customer_id 和 shared_id 之外,所有属性都是字符串。
屏幕截图不包含有关架构的任何信息。点击“查看table详情”即可查看。可能发生的情况是您的主键由一个 HASH 键(客户 ID)和一个 RANGE 键(电子邮件?)组成。或者仅来自 HASH 键,而不是客户 ID(电子邮件?)
第一种情况,要获得客户,您需要同时传递 HASH 和 RANGE 键。
根据截图,您需要:
async function getCustomer(customer_id, email) {
const params = {
TableName: dynamodbTableName,
Key: {
'customer_id': customer_id, 'email_address': email
},
}
return await dynamodb.get(params).promise().then((response) => {
return buildResponse(200, response.Item);
}, (error) => {
});
}
正在尝试从 Postman 中的 DynamoDB 获取单个项目。但我不断从我的 lambda 代码中收到以下错误:
“ValidationException:提供的关键元素与架构不匹配。”
const AWS = require('aws-sdk');
AWS.config.update( {
region: 'us-east-1'
});
const dynamodb = new AWS.DynamoDB.DocumentClient();
const dynamodbTableName = 'customers';
const healthPath = '/health';
const customerPath = '/customer';
这是我的 lambda 处理程序
exports.handler = async function(event, context) {
let response;
switch(true) {
case event.httpMethod === 'GET' && event.path === healthPath:
response = buildResponse(200);
break;
case event.httpMethod === 'GET' && event.path === customerPath:
response = await getCustomer(event.queryStringParameters.customer_id);
break;
default:
response = buildResponse(404, '404 Not Found');
}
return response;
}
此函数获取客户的信息
async function getCustomer(customer_id) {
const params = {
TableName: dynamodbTableName,
Key: {
'customer_id': customer_id
},
}
return await dynamodb.get(params).promise().then((response) => {
return buildResponse(200, response.Item);
}, (error) => {
// THIS IS WHERE I GET THE ERORR <-------------------------------------------------------
console.error('GET ERROR --->', error);
});
}
这是我的回调函数
function buildResponse(statusCode, body) {
return {
statusCode: statusCode,
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(body)
}
}
这是架构图。除了 customer_id 和 shared_id 之外,所有属性都是字符串。
屏幕截图不包含有关架构的任何信息。点击“查看table详情”即可查看。可能发生的情况是您的主键由一个 HASH 键(客户 ID)和一个 RANGE 键(电子邮件?)组成。或者仅来自 HASH 键,而不是客户 ID(电子邮件?)
第一种情况,要获得客户,您需要同时传递 HASH 和 RANGE 键。
根据截图,您需要:
async function getCustomer(customer_id, email) {
const params = {
TableName: dynamodbTableName,
Key: {
'customer_id': customer_id, 'email_address': email
},
}
return await dynamodb.get(params).promise().then((response) => {
return buildResponse(200, response.Item);
}, (error) => {
});
}