使用 Lambda 函数在 Amazon S3 存储桶上创建缩略图
Create Thumbnails on Amazon S3 Bucket with Lambda function
我在 S3 上有两个存储桶。 campaignfotos 和 campaignfotosresized。
这两个的权限如下所示:
创建了 ThumbnailCreatorRole(我想我在这里遗漏了一些东西):
我创建了一个 Lambda 函数并使用了代码 here 将文件名形式 "CreateThumbnail.js" 更改为 "index.js"。
在创建时设置触发器 - 因此当我的应用程序的用户将图像上传到存储桶时应该创建缩略图:
当我测试该功能时,它第一次工作(使用亚马逊 lambda 网站上的测试按钮)但是当用户从我的应用程序上传图像时它不起作用,当我上传时它也不起作用亚马逊网站上 s3 存储桶中的图像。
当我尝试使用 "Test" 按钮第二次测试该功能时,出现此错误(是的,我从缩略图存储桶中删除了旧的已调整大小的 HappyFace.jpg):
我忘记了什么?
如果您 运行 遇到困难,请转到 监控选项卡 (如您的图片所示)并单击 link 到 日志文件。他们希望能为您提供更多信息。
实际上,我建议您从实施 AWS 文档中的 Tutorial: Using AWS Lambda with Amazon S3 开始。
确认它正在运行后,根据您的特定需求(例如存储桶、权限)对其进行修改。
或者,您可以跳过 Lambda 并使用自动调整图片大小服务,例如:
从日志来看,您的 lambda 函数似乎花费了太多时间来处理请求。尝试增加超时,然后进行测试。您可以从配置选项卡 -> 高级设置 -> 超时设置超时。
这个问题的解决方案是政策。上述测试的超时错误可以通过将超时限制增加到 25 秒来解决。
如何设置策略:
转到 IAM => 角色 => 创建新角色 => 角色类型 => AWS Lambda => 在附加策略中 select "AmazonS3FullAccess"
现在转到 Lambda => select 您的 Lambda 函数 => 在“配置”选项卡中 => 角色:选择现有角色 => Select 刚创建的角色
然后完成,现在可以了。 :)
为已有图像创建缩略图:
您的存储桶中可能有现有图片,您想为它们创建缩略图吗?解决方案:创建一个新存储桶 - 转到旧存储桶并 select 所有图像 => 剪切。转到新的临时创建的存储桶并粘贴。现在 select 将所有新粘贴的图像再次放入临时存储桶中 => 剪切 - 返回旧存储桶并粘贴图像 => 这将触发您的 lambda 函数并将为每个图像创建一个新缩略图。现在您可以删除临时创建的存储桶。你完成了。 :)
我在 S3 上有两个存储桶。 campaignfotos 和 campaignfotosresized。
这两个的权限如下所示:
创建了 ThumbnailCreatorRole(我想我在这里遗漏了一些东西):
我创建了一个 Lambda 函数并使用了代码 here 将文件名形式 "CreateThumbnail.js" 更改为 "index.js"。
在创建时设置触发器 - 因此当我的应用程序的用户将图像上传到存储桶时应该创建缩略图:
当我测试该功能时,它第一次工作(使用亚马逊 lambda 网站上的测试按钮)但是当用户从我的应用程序上传图像时它不起作用,当我上传时它也不起作用亚马逊网站上 s3 存储桶中的图像。
当我尝试使用 "Test" 按钮第二次测试该功能时,出现此错误(是的,我从缩略图存储桶中删除了旧的已调整大小的 HappyFace.jpg):
我忘记了什么?
如果您 运行 遇到困难,请转到 监控选项卡 (如您的图片所示)并单击 link 到 日志文件。他们希望能为您提供更多信息。
实际上,我建议您从实施 AWS 文档中的 Tutorial: Using AWS Lambda with Amazon S3 开始。
确认它正在运行后,根据您的特定需求(例如存储桶、权限)对其进行修改。
或者,您可以跳过 Lambda 并使用自动调整图片大小服务,例如:
从日志来看,您的 lambda 函数似乎花费了太多时间来处理请求。尝试增加超时,然后进行测试。您可以从配置选项卡 -> 高级设置 -> 超时设置超时。
这个问题的解决方案是政策。上述测试的超时错误可以通过将超时限制增加到 25 秒来解决。
如何设置策略:
转到 IAM => 角色 => 创建新角色 => 角色类型 => AWS Lambda => 在附加策略中 select "AmazonS3FullAccess"
现在转到 Lambda => select 您的 Lambda 函数 => 在“配置”选项卡中 => 角色:选择现有角色 => Select 刚创建的角色
然后完成,现在可以了。 :)
为已有图像创建缩略图:
您的存储桶中可能有现有图片,您想为它们创建缩略图吗?解决方案:创建一个新存储桶 - 转到旧存储桶并 select 所有图像 => 剪切。转到新的临时创建的存储桶并粘贴。现在 select 将所有新粘贴的图像再次放入临时存储桶中 => 剪切 - 返回旧存储桶并粘贴图像 => 这将触发您的 lambda 函数并将为每个图像创建一个新缩略图。现在您可以删除临时创建的存储桶。你完成了。 :)