[英]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.