当前位置: 首页 > 知识库问答 >
问题:

AWS Λ 和迪纳摩DB 空响应

南宫正阳
2023-03-14

我正在尝试从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();我得到的错误是:“发电机。文档客户端不是构造函数“。

我在这里错过了什么?谢谢

CloudWatch日志显示(我删除了请求Id):函数日志:开始请求Id:版本:$最新结束请求Id:报告请求id:持续时间:491.07毫秒计费持续时间:500毫秒内存大小:128 MB最大已用内存:87 MB初始化持续时间:405.37毫秒

共有1个答案

申黎明
2023-03-14

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

纠正这种情况的一种方法是使用Promise,如AWS文档中所示。例如:

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;   
};

上述变化仅是示例性的,因此可能仍需要一些调整。

 类似资料:
  • 我正在使用JSON结构来存储一个人的详细信息。基本上姓名,电话,注册时间戳等,将是其他属性,主键将是电子邮件地址。 MarkedLocation、visitedLocations、searchHistory和recommendation是AWS所称的列表或地图。它将包含许多JSON对象。 JSON结构- 在应用程序中,如果用户访问一个新位置,我需要向markedLocations添加一个新的JSO

  • 在阅读AWS DynamoDB留档时,我看到它不建议创建多个表。但是当我们将json格式化的数据放在DynamoDB表中时,应该是创建具有许多级别(例如10)的嵌套json内容的属性还是具有较少级别的多个属性?我想这是逐案处理的。但我想知道的是设计DynamoDB表时的一般规则。阅读AWS文档后,我仍然感到困惑,所以我在这里发布问题。谢谢!

  • 我正在尝试为ElasticCache启用VPC lambda函数以访问DynamicDB。我知道为此,我需要设置一个NAT网关。然而,我无法使它工作。我的专用子网在172.31..范围内。 以下是我遵循的步骤: < li >创建一个ip范围为10.0.0.0的公共子网。 < li >在上述相同的IP范围内创建一个公共VPC。 < li >在公共VPC创建公共互联网网关。 < li >创建一个公共路

  • 我正在尝试使用新的Amazon DynamoDB JSON API在称为“文档”的JSON属性中添加/覆盖键值对。理想情况下,我想简单地构建我的写入调用以发送KV对以添加到属性中,如果给定主键不存在该属性,则让Dynamo创建该属性。但是,如果我只使用简单的来尝试: 我得到了无效,这意味着DynamoDB无法找到要应用更新的名为“document”的给定属性。 我设法通过以下一系列调用来近似此功能

  • 我在尝试将Spring与Hibernate集成时遇到了一些问题。从日志中,表和数据库似乎已经创建,但我找不到数据库文件,在检查sessionFactory时,我得到了nullpointer异常,我无法真正理解发生了什么。 以下是我的配置文件: null 编辑:这是UtenteDaoImpl类,它不做任何事情,因为它继承了BaseDao的东西。

  • 我有一个向服务器发送数据的调用。如果一切正常,服务器会返回一个无效的响应。但是当有错误时,我会得到数据。 当有错误时,为了管理这个情况,我有一个对象。问题是,当请求成功时,改造会抛出一个异常,消息是: