优雅地在 EC2 上创建存储在 S3 的图像缩略图,并在完成后与 Rails 通信的方式?
好的,下面是我设置的简要总结,以及我想要实现的目标:
我有一个运行在Rails 2.3.5上的服务器,这个服务器用来托管我的网站。我网站上有一个Flash应用,用户可以直接把图片上传到S3(一个云存储服务)。
当上传完成后,Rails会收到通知。
在图片上传到S3并且Rails收到通知的那一刻,我希望Rails能向EC2(亚马逊的云服务器)发送一个请求,去创建两个缩略图(一个是110x110,另一个是600x600)。
当缩略图创建完成并且传送到S3后,我希望EC2上的那个处理过程能再向Rails发送一个请求,通知它缩略图的创建已经完成,并且已经上传到S3上。
有什么好的方法可以实现这个目标吗?我稍微看过一些工具,比如knife,但我对使用EC2或类似的服务完全不熟悉。
谢谢!
2 个回答
对于像我一样在找这个的人,AWS现在提供了Lambda服务。
AWS Lambda 是一种计算服务,它让你可以轻松构建能够快速响应新信息的应用程序。AWS Lambda 会根据一些事件来运行你的代码,比如图片上传、应用内活动、网站点击,或者来自连接设备的输出。你可以用 AWS Lambda 来为其他 AWS 服务添加自定义逻辑,或者创建一个自己的后端,这个后端能够在 AWS 的规模、性能和安全性下运行。使用 AWS Lambda,你可以轻松创建独立的、基于事件的应用程序,这些应用程序只在需要时执行,并且可以自动从每天几次请求扩展到每秒数千次请求。
这里有一个很好的教程,完美地回答了这个问题,处理 Amazon S3 事件。这个想法是使用一个 node.js 包——Lambda,来接收 S3 存储桶事件的通知(在我们的例子中是对象创建事件),获取上传的对象,调整它的大小,然后最后把它保存到另一个存储桶中,用于缩略图。因为你会有一个 node.js 应用,所以在缩略图保存后,你基本上可以对任何你想要的服务发起任何请求。
我会使用以下步骤:
当图片上传到S3后,Rails会收到通知,然后它会在亚马逊的SQS队列中添加一条消息(可以查看http://aws.amazon.com/sqs/)
在EC2上运行的后台程序会检查这个队列,处理任何消息,并生成缩略图
一旦生成了缩略图,就会通过亚马逊的SNS发送通知(可以查看http://aws.amazon.com/sns/),然后你的Rails应用会对这个通知做出响应