使用 ec2 创建存储在 s3 上的图像缩略图并在完成时与 rails 通信的优雅方式?

Posted

技术标签:

【中文标题】使用 ec2 创建存储在 s3 上的图像缩略图并在完成时与 rails 通信的优雅方式?【英文标题】:Elegant way to create thumbnails of images stored on s3 with ec2 and communicate with rails on finish? 【发布时间】:2011-12-22 06:36:43 【问题描述】:

好的,简单总结一下我的设置和我想要完成的任务:

    我有一个运行我的网站的 rails 2.3.5 服务器。我的网站上有一个 Flash 应用程序,用户可以将图像直接上传到 s3。

    上传完成后,会通知 rails。

    在图像完成上传到 s3 并通知 rails 时,我希望 rails 向位于 ec2 上的某处发送一些帖子以创建两个缩略图(110x110 和 600x600)。

    李>

    创建缩略图并将其传输到 s3 时,我希望 ec2 上的任何进程将帖子发送回 rails 以通知缩略图创建已完成并位于 s3 上。

实现这一目标的最佳方法是什么?我非常简要地查看了诸如 knife 之类的工具,但我对使用 ec2 或类似服务一点也不熟悉。

谢谢

【问题讨论】:

【参考方案1】:

对于像我这样查找此内容的人,AWS 现在提供 Lambda

AWS Lambda 是一种计算服务,可让您轻松构建 快速响应新信息的应用程序。 AWS Lambda 运行 您的代码以响应图像上传、应用内等事件 活动、网站点击或连接设备的输出。你可以 使用 AWS Lambda 通过自定义逻辑扩展其他 AWS 服务,或者 创建您自己的以 AWS 规模、性能和 安全。使用 AWS Lambda,您可以轻松创建离散、 仅在需要时执行和扩展的事件驱动应用程序 自动从每天几个请求到每秒数千个请求。

这是一个很好的演练,完美地回答了这个问题,Handling Amazon S3 Events。这个想法是让 node.js 包 - Labmda- 通知 S3 存储桶事件(在我们的例子中是对象创建的),获取上传的对象,调整它的大小,然后最后将其保存在其他存储桶中作为缩略图。由于您将拥有一个 node.js 应用程序,因此您基本上可以在保存缩略图后向任何您想要的服务发出任何类型的请求。

【讨论】:

这是正确/最便宜的解决方案quora.com/… 在这里我包括了如何做到这一点【参考方案2】:

我将使用的过程如下:

    图像上传到 S3 后,rails 会收到通知并将消息添加到 Amazon SQS 队列(请参阅http://aws.amazon.com/sqs/)

    在 EC2 上运行的后台进程检查队列并处理所有消息,生成缩略图

    生成缩略图后,将使用 Amazon SNS(请参阅 http://aws.amazon.com/sns/)发送通知,并且您的 rails 应用程序会响应此通知

【讨论】:

感谢您的回复。我正在查看这个 ec2 ruby​​ gem (github.com/rightscale/right_aws) 以使用 SQS 发送队列请求。我不确定的是我将在 ec2 方面做什么。我应该有一个带有 right_aws 的 Rails 服务器来检查队列,然后用回形针之类的东西将图像后处理为缩略图吗? 在 EC2 上使用带有 right_aws 和回形针的导轨是一种选择,但在 EC2 上运行什么并不重要,只要它可以轮询 SQS 队列并处理图像即可。跨度> 您还可以考虑使用 SAAS 提供程序来处理缩略图生成。我现在的一个选项是transloadit.com,但我没有使用过它们,所以我无法就他们的服务提供任何反馈。 SAAS 似乎并不是一个合理的解决方案。我的目标是通过将图像从 s3 传输到 ec2、生成缩略图然后将缩略图从 ec2 传输到 s3 来节省 s3 带宽成本。据我所知,ec2 和 s3 之间的带宽是免费的。使用像 transloadit 这样的解决方案,我不仅要为 s3 到他们的服务器之间的带宽付费,还要为中间人付费。当然,我不必自己设置,但我愿意这样做,前提是我可以节省带宽成本。

以上是关于使用 ec2 创建存储在 s3 上的图像缩略图并在完成时与 rails 通信的优雅方式?的主要内容,如果未能解决你的问题,请参考以下文章

下载图像缩略图并在 ListView C# 中显示它们

如何通过 PHP SDK 在 Amazon S3 存储桶下创建文件夹?

Yii2 - Imagine - 创建缩略图并保持透明背景

在 MouseOver 中旋转缩略图并在 Mouseleave 中停止旋转

在 S3 中使用带有外部存储的图像和缩略图进行数据库设计的最佳实践?

为亚马逊 s3 上的每个视频商店创建缩略图的最佳方法是啥?