You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Lambda查询DynamoDB返回null问题排查求助

问题原因及解决方案

核心问题:异步处理逻辑错误

你的Lambda函数返回null的主要原因是混合使用了async/await与回调函数,且外层handler未返回有效结果:

  • 使用await调用ddb.query时,无需传入回调函数——此时ddb.query会返回一个Promise,成功时resolve为查询数据,失败时reject为错误对象。
  • 你代码里回调函数内部的return err或return data,只是回调自身的返回值,不会传递到外层async handler中;而外层handler最后没有任何return语句,所以默认返回null。

修复后的代码

方案1:正确使用async/await(推荐)

改用DocumentClient可以省去手动指定数据类型的麻烦,代码更简洁:

const AWS = require('aws-sdk');
AWS.config.update({region: process.env.REGION});

// 使用DocumentClient,无需手动声明{S: id}这类数据类型
const ddb = new AWS.DynamoDB.DocumentClient();

exports.handler = async (event, context) => {
  try {
    const { id, owner } = event;
    
    const params = {
      TableName: process.env.TABLE_NAME,
      KeyConditionExpression: "id = :id and owner = :owner",
      ExpressionAttributeValues: {
        ":id": id,
        ":owner": owner,
      }
    };
        
    // 直接await Promise获取结果并返回
    const data = await ddb.query(params).promise();
    return data;
  } catch (err) {
    console.error('查询失败:', err);
    return err;
  }
};

方案2:坚持使用回调函数(不推荐,async场景下更适合Promise)

如果一定要用回调,需改用Lambda的回调机制,去掉async关键字:

const AWS = require('aws-sdk');
AWS.config.update({region: process.env.REGION});

const ddb = new AWS.DynamoDB();

exports.handler = (event, context, callback) => {
  const { id, owner } = event;
  
  const params = {
    TableName: process.env.TABLE_NAME,
    KeyConditionExpression: "id = :id and owner = :owner",
    ExpressionAttributeValues: {
      ":id": { S: id },
      ":owner": { S: owner },
    }
  };
        
  ddb.query(params, function(err, data) {
    if (err) {
      callback(err);
    } else {
      callback(null, data);
    }
  });
};

额外检查项

  • 确认Lambda执行角色拥有dynamodb:Query权限,权限不足会导致查询失败,但此时函数会返回错误而非null。
  • 确认环境变量REGION和TABLE_NAME配置正确,指向目标DynamoDB表的所在区域和表名。

内容的提问来源于stack exchange,提问作者Baslki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 10:55:18