上传到S3之前的AWS临时文件?

时间:2017-07-10 23:25:46

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

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

我已经建立了一个Elastic Beanstalk环境,但是我发现将上传的图像存储在实例上的临时目录中是有风险的,因为可以在必要时创建和销毁实例。

我将如何以及在何处存储这些临时文件,以便它们不会被实例删除?

2 个答案:

答案 0 :(得分:1)

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

我不太了解的一个选项可能是AWS EBS。 " Amazon Elastic Block Store(Amazon EBS)提供持久性块存储卷,以便与AWS Cloud中的Amazon EC2实例一起使用。"我对EBS没有任何直接经验,当然,最重要的问题是如果EBS是真正持久的,即使在ec2实例被破坏之后也是如此。由于EBS有与之相关的成本,似乎既然你已经在使用S3,那么S3将是最佳选择。

答案 1 :(得分:0)

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

您可以:

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

B)创建一个专门用于临时文件的S3存储桶。从那里处理文件,然后复制到生产桶中。