【发布时间】:2023-03-09 22:23:02
【问题描述】:
我正在尝试编写一个 lambda 函数,每当将新图像写入 S3 存储桶时就会触发该函数。触发器已经使用正确的 S3 存储桶设置,所以我知道这不是问题。
lambda 函数本身具有角色 s3:GetObject 和 dynamodb.*(应该是 DynamoDB 写入的完全访问权限)。
这里的目标是简单地写入一个我已经创建的名为“art”的表,并插入一个我试图在var imageName 中获取的主键值 (imageTitle)。然后我想为该键分配一个属性,该属性是该图像的 url,我将其存储在 var url 中。
这只是我尝试进行的一个简单练习,以便我可以继续进行更复杂的数据库写入。但截至目前,我没有将任何内容写入art 表,即使我正在向触发触发器的 S3 存储桶添加新对象。是否有可能未部署 lambda 函数?我直接在 Lambda 控制台的内联编辑器中编写并保存。
代码如下:
const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient({region: 'us-east-1'});
const s3 = new AWS.S3();
exports.handler = async (event, context, callback) => {
//var sourceBucket = event.Records[0].s3.bucket.name;
var sourceKey = event.Records[0].s3.object.key;
var imageName = sourceKey.stringify;
//generate imageURL
var url = "https://s3.amazonaws.com/myapp-20181030214040-deployment/public/" + imageName;
var params = {
TableName : 'art',
Item: {
imageTitle: imageName,
imageURL: url
}
};
docClient.put(params, function(err, data) {
if (err) console.log(err);
else console.log(data);
});
};
【问题讨论】:
-
可以分享 cloudwatch 日志吗?顺便说一句,保存您的 lambda 函数就足以让它准备好工作:它们不是以经典方式部署,并且每次调用它时都会创建新实例。
-
单击您的 Lambda,单击监控选项卡,然后单击“查看 CloudWatch 中的日志”按钮。查找并打开最新的日志流。这是您的日志被写入的地方。如果需要,请在您的函数中添加更多 console.log 语句以确定哪一行代码失败。
-
我应该在 CloudWatch 日志中看到什么具体内容吗?我有一个开始、结束和报告日志,每个日志都具有相同的 requestID。我在桌子上放置物品的方法对你们来说是否正确?我很难准确理解如何指定要放置为主键的项目以及哪些项目应该是该键的属性,因此我尝试先放置主键。我会尝试在明天早上放置一些 console.log 语句,看看我能找到什么。
标签: amazon-web-services aws-lambda amazon-dynamodb aws-sdk