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) => {

  });
}