【问题标题】:AWS temporary files before uploading to S3?上传到 S3 之前的 AWS 临时文件?
【发布时间】:2017-12-14 20:11:04
【问题描述】:

我的 Laravel 应用允许用户上传图片。目前,当用户上传他们的图像时,它们会存储在服务器上的一个临时位置。一个 cron 作业然后修改上传的图像(压缩它们等),并将它们上传到 S3。任何超过 48 小时且未能上传到 S3 的临时文件都会被另一个 cron 作业删除。

我已经设置了 Elastic Beanstalk 环境,但我突然想到将上传的图像存储在实例上的临时目录中是有风险的,因为可以在必要时创建和销毁实例。

那么,我将如何以及在何处存储这些临时文件,以免它们有被实例删除的风险?

【问题讨论】:

  • 我碰巧现在正在处理完全相同的问题。我们不能使用 AWS 开发工具包将初始上传指向 S3 存储桶,而不是我们的服务器吗?然后 cron 作业在这个“临时”S3 存储桶上工作,最后上传到永久 S3 存储桶。
  • 这可行,但我正在寻找一种方法来避免将临时文件上传到 S3,如果可能的话(以避免相关成本)。
  • 啊,使用 Elastic Beanstalk扩展和故障恢复的好处。该文件必须放在某个地方,其他选项将是由您直接控制的独立 ec2 实例(因此您知道它不会被关闭),文件托管服务,例如imgur 也许?,但这些当然也有相关的成本。
  • 我所做的所有研究都指向必须使用 S3,因此除非有人另有说明,否则我很可能不得不使用它。绝对不想使用其他文件托管服务...感觉很脏。
  • 考虑将原件直接上传到 S3,这样您就不必通过服务器代理上传。还可以考虑使用基于事件的 Lambda 函数将图像从其原始源格式和位置转换为您想要的格式和位置。

标签: laravel amazon-web-services laravel-5 amazon-s3 amazon-elastic-beanstalk


【解决方案1】:

S3 有一个名为 object lifecycle management 的功能,您可以通过将文件设置为在上传后 2 天过期来自动删除文件。

您可以:

A) 为临时文件添加前缀以将它们放入 S3 伪文件夹(即Temp/),将对象生命周期过期规则应用于该特定前缀(或“文件夹”),并将其中的文件用作操作后衍生的新文件的真实来源。

B) 专门为临时文件创建一个 S3 存储桶。从那里操作文件并复制到生产存储桶。

【讨论】:

    【解决方案2】:

    正如 cmets 中所讨论的,我认为将文件上传到 S3 是最佳选择。据我所知,无法阻止 Elastic Beanstalk 销毁 ec2 实例,除非您想摆脱所有扩展和实例故障/自动替换功能。

    我不太了解的一个选项可能是 AWS EBS。 “Amazon Elastic Block Store (Amazon EBS) 提供持久的块存储卷,用于 AWS 云中的 Amazon EC2 实例。”我对 EBS 没有任何直接经验,最重要的问题当然是 EBS 是否真正持久,即使在 ec2 实例被销毁之后也是如此。由于 EBS 有与之相关的成本,看起来既然您已经在使用 S3,那么 S3 将是可行的方法。

    【讨论】:

    • 如果有人能解释一下 S3 和 EBS 之间的区别,哪一个最适合我的情况,请做。
    • @user1465627 对象存储与块存储。见cloudberrylab.com/blog/amazon-s3-vs-amazon-ebs。在您的情况下,您可能应该使用 S3。
    猜你喜欢
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 2019-06-07
    • 2016-09-21
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    • 2014-02-10
    相关资源
    最近更新 更多