簡體   English   中英

AWS Lambda 和 DynamoDB 空響應

[英]AWS Lambda and DynamoDB Null Response

我正在嘗試從 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 END RequestId:REPORT RequestId:持續時間:491.07 ms 計費持續時間:500 ms 內存大小:128 MB 已用最大內存:87 MB 初始化持續時間: 405.37 毫秒

由於您使用的是異步處理程序,我認為問題在於您的函數在處理程序的主體有機會運行之前完成。

糾正此問題的一種方法是使用AWS 文檔中所示的Promise 例如:

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

以上變化僅為示例,因此可能仍需要進行一些調整。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM