在 Elastic Beanstalk 中保存文件的建议

Recommendations For Saving Files in Elastic Beanstalk

我有一个 ELB 应用程序,我们刚刚添加了照片上传功能。目前,这会将图像保存在 ELB 部署目录中的一个文件夹中,将 URL 保存到 DynamoDb table。一切正常。每当用户想要查看图像时,我们只需将 URL 附加到 UI 中标签的 src 属性,浏览器就会直接下载图像。

但是我想到,如果底层 EC2 实例终止并重新启动,我们很可能会丢失所有照片。我的这个假设是否正确?如果是这样,这里的最佳做法是什么?上传应该始终保存在 S3 存储桶中吗?非常感谢任何指导。

Should uploads always be saved in an S3 bucket?

TL;DR

在弹性云环境中,是的,总是将您的静态内容移动到可靠的外部存储(在本例中为 S3)。它将使您的应用程序更好地扩展。查看 S3 问题 here

资源:

更长的描述

在传统架构中,您可能将一个驱动器连接到一两个 Web 服务器,并将文件存储在那里。你总是期望那些会起来。如果你 运行 磁盘 space 不足,你就有问题了。如果您的服务器出现故障,那么您也遇到了问题。即使您有备份,您也 运行 面临宕机的风险,您需要恢复所有数据并手动启动服务器。

在云架构中,您基本上承认 "machine" 是容易出错的,不再依赖它来存储任何应用程序状态。它应该用于在磁盘上存储启动应用程序所需的内容 and/or 临时存储,但如果您需要长期存储,这就是为什么存在像 S3 这样的服务的原因!通过从您的应用程序服务器中消除状态,您可以自动扩展它们(无论您认为合适),而不必担心用户的内容。如果您有其他服务需要该内容,他们也可以通过适当的权限从那里获取它。