使用Lambda函数

时间:2017-02-27 14:43:07

标签: javascript image amazon-s3 lambda thumbnails

S3上有两个存储桶。 campaignfotos和campaignfotosresized。

enter image description here

这两个人的权限如下:

enter image description here

创建了ThumbnailCreatorRole(我想我在这里遗漏了一些东西): enter image description here

我创建了一个Lambda函数,使用here中的代码将文件名“CreateThumbnail.js”更改为“index.js”。

enter image description here

在创建时设置触发器 - 因此当我的应用程序的用户将图像上传到存储桶时,应创建缩略图:

enter image description here

当我测试该功能时,它第一次工作(使用亚马逊lambda网站上的测试按钮)但当用户从我的应用程序上传图像时它不起作用,当我上传图像时它也无效在亚马逊网站的s3桶上。

当我尝试使用“测试”按钮第二次测试该功能时,我收到此错误(是的,我从缩略图桶中删除了旧的resized-HappyFace.jpg):

enter image description here

我忘记了什么?

3 个答案:

答案 0 :(得分:2)

从日志中看,你的lambda函数似乎花了太多时间来处理请求。尝试增加超时然后测试。您可以从“配置”选项卡设置超时 - >高级设置 - >超时。

enter image description here

答案 1 :(得分:2)

此问题的解决方案是政策。上述测试的时间错误可以通过将超时限制增加到25秒来解决。

如何设置政策:

转到IAM =>角色=>创建一个新角色=>角色类型=> AWS Lambda =>在附加策略中选择" AmazonS3FullAccess"

现在转到Lambda =>选择你的Lambda函数=>在配置标签中=>角色:选择现有的Role =>选择刚刚创建的角色

结束,现在它起作用了。 :)

为现有图片创建缩略图:

您的存储桶中是否有现有图像,您想为它们创建缩略图?解决方案:创建一个新存储桶 - 转到旧存储桶并选择所有图像=>切。转到新临时创建的存储桶并粘贴。现在,在临时存储桶中再次选择所有新粘贴的图像=>切 - 回到旧桶并粘贴图像=>这将触发您的lambda函数,并为每个图像创建一个新的缩略图。现在您可以删除临时创建的存储桶。你完成了:)

答案 2 :(得分:0)

如果您遇到困难,请转到监控标签(如图所示),然后点击指向日志文件的链接。他们希望能为您提供更多信息。

实际上,我建议您首先从AWS文档中实施Tutorial: Using AWS Lambda with Amazon S3

一旦确认它正常工作,请根据您的特定需求进行修改(例如存储桶,权限)。

或者,您可以跳过Lambda并使用自动调整图片大小的服务,例如: