【问题标题】:AWS Lambda and DynamoDB Null ResponseAWS Lambda 和 DynamoDB 空响应
【发布时间】:2021-01-02 15:33:39
【问题描述】:

我正在尝试从 Lambda 函数写入 DynamoDB 表。当我测试运行该函数时,它返回 null,没有错误消息,并且没有任何内容写入表中。函数如下。我已经使用允许访问“产品”表的权限策略为此功能设置了服务角色。我看过一些教程提到创建“AWS Lambda 应用程序”,然后创建 Lambda 函数,但我认为这对我的使用来说不是必需的。

const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});

exports.handler = async (event, context, callback) => {

  dynamodb.putItem({
      TableName: "Products",
      Item: {
          "sku": {S: "29574839"},
          "name": {S: "Test Code"}
      }
  }, function(err, data) {
      if (err) {
          console.log(err, err.stack);
          return callback(null, {
              statusCode: '500',
              body: err
          });
      } else {
          return callback(null, {
              statusCode: '200',
              body: 'Adding to table!'
          });
      }
  });

};

我也尝试过使用文档客户端 const docClient = new dynamodb.DocumentClient();,但出现错误:“dynamodb.DocumentClient 不是构造函数”。

我在这里缺少什么?谢谢!

CloudWatch 日志显示(我删除了请求 ID): 功能日志: START RequestId:版本:$LATEST 结束请求 ID: 报告请求 ID:持续时间:491.07 毫秒计费持续时间:500 毫秒内存大小:128 MB 使用的最大内存:87 MB 初始化持续时间:405.37 毫秒

【问题讨论】:

  • 你检查过 cloudwatch 日志吗?
  • @NishuTayal 我将其添加到我的问题中。它们似乎没有显示任何有用的东西。

标签: node.js amazon-web-services aws-lambda amazon-dynamodb


【解决方案1】:

由于您使用的是async handler,我认为问题在于您的函数在处理程序的主体有机会运行之前完成。

纠正此问题的一种方法是使用Promise,如AWS docs 所示。例如:

const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});

exports.handler = async (event, context, callback) => {

    const promise = new Promise(function(resolve, reject) {

      dynamodb.putItem({
          TableName: "Products",
          Item: {
              "sku": {S: "29574839"},
              "name": {S: "Test Code"}
          }
      }, function(err, data) {
          if (err) {
              console.log(err, err.stack);
              return callback(null, {
                  statusCode: '500',
                  body: err
              });
          } else {
              return callback(null, {
                  statusCode: '200',
                  body: 'Adding to table!'
              });
          }
      });
  })

  return promise;   
};

上述更改仅为示例,因此可能仍需要进行一些调整。

【讨论】:

  • 谢谢!那成功了!我也可以删除“异步”,它按原样工作。应该注意到了!
猜你喜欢
  • 2020-04-24
  • 1970-01-01
  • 2021-04-01
  • 1970-01-01
  • 2019-11-15
  • 2016-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多