【问题标题】:Amazon EC2, Elastic Beanstalk: My images disappearAmazon EC2、Elastic Beanstalk:我的图像消失了
【发布时间】:2015-03-22 04:39:44
【问题描述】:

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

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

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

我该如何解决这种情况?

谢谢。

【问题讨论】:

    标签: php amazon-web-services amazon-ec2 amazon-elastic-beanstalk


    【解决方案1】:

    部署在 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

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

    【讨论】:

    • 非常感谢您的洞察力。访问文件的方式会发生什么?当前用户必须通过myapp.elasticbeanstalk.com/myapp/uploads/file.pdf 访问。如何链接 S3 文件以通过相同的 URL 访问?
    • @MyApplynx 您为该 url 创建一个 php 控制器,将它们转发到 s3 位置。
    • 您的控制器可以使用指向 S3 的链接而不是指向您的应用程序的链接构建网页。您的控制器可以使用 S3 签名 URL 来确保只有有效用户才能访问 S3
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    • 2014-11-15
    • 2018-10-13
    • 2021-05-01
    • 2014-11-08
    • 2018-04-18
    相关资源
    最近更新 更多