使用作业队列上载到AWS S3存储桶

时间:2014-04-16 04:51:30

标签: php amazon-web-services amazon-ec2 amazon-s3 amazon-sqs

我正在开发一个将在AWS上的弹性环境中运行的应用程序(具有自动扩展的Ec2实例)。所有应用程序都是用PHP开发的。

该应用程序的核心是基于在S3存储桶中安全存储文件。由于用户不需要知道它保存在哪里,我认为我可以暂时将该文件存储在EC2实例中,然后使用作业队列(Amazon SQS)将其异步移动到S3,以避免重复等待时间和对s3问题的更好支持(它们不常见,但可能发生)。

我的问题是:

  1. 这种做法听起来不错还是我错过了什么?
  2. 从队列处理作业时,工作者实例必须连接到原始s3实例,从中检索文件然后将其上传到s3?
  3. 如何在自动缩放时避免出现问题?在将文件存储在S3存储桶中之前,可以删除实例。

1 个答案:

答案 0 :(得分:3)

理想情况下,您不希望主文件服务器在文件上传过程中被绑定(包括应用程序服务器和随后的S3)。

CORS (Cross Origin Resource Sharing)存在以避免这一点。您可以直接从客户端将文件上传到S3,让amazon担心处理来自并发用户的多个上传。它可让您的应用程序执行最佳功能,而无需担心上传本身。

This SO question讨论了同样的问题,并且有一些可自定义的插件,例如精细上传器,可以用进度条等来包装它。

这完全消除了使用任何类型队列的需要。如果您需要在上传后执行某些簿记操作,您可以在上传完成后使用文件信息等对服务器进行ajax调用。它还应解决因自动缩放而删除实例时可能遇到的任何问题因为一切都是客户端。