2011-11-04 63 views
9

OK,所以我设置的简单总结,我想完成的任务:使用ec2创建存储在s3上的图像缩略图的优雅方法,并在完成时与导轨进行通信?

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

  2. 上传完成后,会通知rails。

  3. 在图像完成上传到s3和rails的通知处,我想让rails向ec2上的某些内容发送邮件以创建两个缩略图(110x110和600x600)。

  4. 当缩略图被创建并转移到s3时,我想要ec2上的任何进程发送一个帖子回到rails以通知缩略图创建已完成并且位于s3上。

完成此操作的最佳方法是什么?我已经非常简短地查看了诸如knife之类的工具,但我对使用ec2或类似服务并不熟悉。

由于

回答

6

,我将在使用的过程如下:

  1. 一旦图像被上传到S3,导轨得到通知,并将其添加一个消息给一个Amazon SQS队列(见http://aws.amazon.com/sqs/

  2. 上EC2运行的后台进程检查队列和处理任何消息,生成缩略图

  3. 一旦生成缩略图,通知被使用Amazon SNS发送(见http://aws.amazon.com/sns/)和你的Rails应用程序respons此通知

+0

谢谢您的回复。我正在看这个ec2 ruby​​ gem(https://github.com/rightscale/right_aws)发送队列请求与SQS。我不确定的是我将在ec2方面做什么。我是否应该使用带有right_aws的Rails服务器来检查队列,然后使用回形针将图像后处理为缩略图? – Zyren

+0

在EC2上安装带有right_aws和回形针的导轨是一种选择,但只要它可以轮询SQS队列并处理映像,它在EC2上运行的并不重要。 – dcro

+1

您也可以使用SAAS提供程序来处理缩略图生成。我现在的一个选择是http://transloadit.com/,但我没有使用它们,所以我无法就其服务提供任何反馈。 – dcro

18

对于那些像我这样谁看这件事,AWS现在提供Lambda

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

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

+0

这是正确的/最便宜的解决方案https://www.quora.com/What-is-the-best-practice-for-creating-a-thumbnail-on-S3-Bucket/answer/Akbar-Khan-1 here我包括如何做到这一点 –