【发布时间】:2023-03-21 18:54:01
【问题描述】:
我创建了一个 AWS Lambda 函数来调整放入我的 s3 存储桶中的任何图像的大小。我为 s3 存储桶中的每个对象创建创建了一个事件,以供 Lambda 函数触发。我的 Lambda 处理程序代码如下:
var async = require('async'),
gm = require('gm').subClass({
imageMagick: true
}) // Enable ImageMagick integration.
, request = require('request').defaults({
encoding: null
});
var knox = require('knox');
var client = knox.createClient({
key: 'myKey',
secret: 'mySecretKey',
bucket: 'MyBucketName'
});
//hardcoded Value to get the Image url
var s3value = '.s3.amazonaws.com/';
var https = 'https://'
exports.handler = function (event, context) {
var srcBucket = event.Records[0].s3.bucket.name;
var srcKey = event.Records[0].s3.object.key;
var imageUrl = https + srcBucket + s3value + srcKey //My Http Url for image stored in s3 bucket.
request(imageUrl, function (err, res, res1) {
if (err) {
console.log(err);
} else {
gm(res1).resize(120)
.toBuffer('jpg', function (err, buffer) {
if (err) {
console.log(err);
} else {
var ImageName = "/" + imageUrl.substr(0, imageUrl.indexOf(".")) + "-1x" + imageUrl.substr(imageUrl.indexOf("."), imageUrl.length); //Renaming the present image
client.putBuffer(buffer, ImageName, function (err, response1) {
if (err) {
console.log(err);
} else {
console.log(response1.socket._httpMessage.url);
}
});
}
});
}
});
context.done();
}
我的问题是,当我在 S3 中存储图像时,未在我的 s3 存储桶中创建调整大小的图像。我无法理解为什么我无法在同一个 s3 存储桶中创建调整大小的图像。有人可以帮我吗?
【问题讨论】:
-
您的 Lambda 函数是否实际被调用?您应该将一些日志记录添加到您的 index.js(使用 console.log),然后上传一个 S3 对象,然后查看您的 Lambda 函数的 CloudWatch 日志。
-
我的 lambda 函数正在被调用。我还添加了 console.log 语句以在 cloudwatch 上进行验证。我的观察是给定的 n url 没有调用请求 npm 节点模块。
-
我会使用 S3 getObject API 调用来检索对象而不是 HTTP 请求。示例 Lambda 事件函数之一就是这样做的(请参阅 s3-get-object 蓝图)。
-
如果您添加了 console.log 消息,请分享。
标签: amazon-web-services amazon-s3 aws-lambda