我的Laravel应用程序允许用户上传图像。目前,当用户上传他们的图像时,它们存储在服务器上的临时位置。然后,cron作业修改上传的图像(压缩它们等),并将它们上传到S3。任何超过48小时未能上传到S3的临时文件都会被另一个cron作业删除。
我已经建立了一个Elastic Beanstalk环境,但是我发现将上传的图像存储在实例上的临时目录中是有风险的,因为可以在必要时创建和销毁实例。
我将如何以及在何处存储这些临时文件,以便它们不会被实例删除?
答案 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存储桶。从那里处理文件,然后复制到生产桶中。