【问题标题】:Create Thumbnails on Amazon S3 Bucket with Lambda function使用 Lambda 函数在 Amazon S3 存储桶上创建缩略图
【发布时间】:2017-07-18 05:34:24
【问题描述】:

我在 S3 上有两个存储桶。 Campaignfotos 和 campaignfotos 已调整大小。

这两个的权限如下所示:

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

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

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

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

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

我忘记了什么?

【问题讨论】:

    标签: javascript image amazon-s3 lambda thumbnails


    【解决方案1】:

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

    【讨论】:

    • thx,对于测试,它有助于增加超时(我将其设置为 25 秒)。但是我怎样才能触发整个桶的 lamda 呢?我上传了一张新图片,但它没有创建缩略图,即使我已经将触发器设置为“ObjectCreated” - 如何为整个存储桶运行该函数?
    • 可能还有其他原因。就像您设置了错误的事件触发器类型,或者您没有将 s3Access 授予您的 lambda 角色。尝试查看 cloudwatch 中的日志
    【解决方案2】:

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

    如何设置政策:

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

    现在转到 Lambda => 选择您的 Lambda 函数 => 在配置选项卡中 => 角色:选择现有角色 => 选择刚刚创建的角色

    完成,现在它可以工作了。 :)

    为现有图像创建缩略图:

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

    【讨论】:

      【解决方案3】:

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

      实际上,我建议您从实现 AWS 文档中的 Tutorial: Using AWS Lambda with Amazon S3 开始。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-03
        • 2023-03-31
        • 1970-01-01
        • 1970-01-01
        • 2011-09-10
        • 2023-02-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多