Amazon EC2、Elastic Beanstalk:我的图像消失了

Amazon EC2, Elastic Beanstalk: My images disappear

我已经使用弹性 beantalk 实例在 Amazon EC2 中部署了我的 PHP 应用程序。我的应用程序的文件系统结构如下所示:

MyApp
 |-css
 |  |-...
 |-js
 |  |-...
 |-uploads
 |  |- image.png
 |  |- file.pdf
 |  |- ...
 |-index.php
 |-...

我的应用允许用户上传图片。它是一个用于 Web 管理某些文件的简单应用程序,目前仅供我的客户使用。因此,当上传文件时,我将它们放在 uploads 文件夹下,如上所示。 问题是我的文件不会在这个文件夹中保存很长时间。一两天后,我 ssh 发现上传文件夹是空的。我不确定会发生什么,但我怀疑 elastic beanstalk 确实创建了一个新实例并因此覆盖了 uploads 文件夹内容。

如何解决这种情况?

谢谢。

部署在 Elastic Beanstalk 上的应用程序应该是无状态的。 IE。它们不应在 EC2 实例上存储状态,例如文件或内存中的 http 会话。

AWS Elastic Beanstalk 在后台使用自动缩放功能根据您的应用程序工作负载在您的池中添加或删除实例。

当您更改 AWS Elastic Beanstalk 配置时,它也可能会用新实例替换实例。

最佳做法是将您的应用程序状态存储在共享存储中,供所有实例使用。

Amazon S3 是一个很好的选择,您只需稍微修改您的应用程序,让用户浏览器安全地将文件上传到 S3。

查看此问题的答案了解更多详情。 Amazon S3 direct file upload from client browser - private key disclosure

您也可以在浏览器中直接使用亚马逊 Javascript 的 SDK 实现客户端上传,而无需使用表单。