4

我有一个允许用户上传文件的 webapp(称为 myapp.com)。webapp 将部署在 Amazon EC2 实例上。我想通过基于 s3 存储桶的域(即 uploads.myapp.com)将这些文件提供给 webapp 消费者。

当用户上传文件时,我可以轻松地将它们放入本地 ec2 实例上名为“site_uploads”的文件夹中。但是,由于我的 ec2 实例的存储空间有限,上传的次数很多,ec2 文件系统会很快填满。

如果 ec2 实例可以挂载和 s3 存储桶作为“site_upload”目录,那就太好了。这样上传到 EC2 的“site_upload”目录就会自动在 uploads.myapp.com 上结束(并且我的 webapp 可以使用模板标签来确保此上传内容的链接基于该 s3 支持的域)。这也为我提供了可扩展的文件服务,因为文件请求命中 s3 而不是我的 ec2 实例。此外,它使我的 web 应用程序可以轻松地对出现在“site_upload”本地但实际上在 s3 上的图像执行缩放/调整大小。

我在看 s3fs,但从评论来看,它看起来不像是一个完全成熟的解决方案。我正在寻找一个非商业的解决方案。

仅供参考,webapp 是用 django 编写的,并不是说这会改变太多细节。

4

5 回答 5

5

我没有使用 EC2,但我确实将我的 S3 存储桶永久安装在我的 Linux 服务器上。我的做法是使用 Jungledisk。它不是非商业解决方案,但非常便宜。

首先,我像往常一样设置了jungledisk。然后我确保安装了保险丝。大多数情况下,您只需要使用您的密钥等创建配置文件。然后只需在 fstab 中添加一行,如下所示。

jungledisk /path/to/mount/at fuse noauto,allow_other,config=/path/to/jungledisk/config/file.xml 0 0

然后只需安装,您就可以开始了。

于 2009-06-11T20:02:10.400 回答
2

我使用 s3fs,但没有现成的发行版。我在这里为任何想要更轻松的人提供了我的构建。

配置文档不可用,所以在我的 fstab 中得到它之前,我一直在努力:

s3fs#{{ 存储桶名称 }} {{ /path/to/mount/point }} fuse allow_other,accessKeyId={{ key }},secretAccessKey={{ secret key }} 0 0

s3fs

于 2009-06-12T22:07:01.950 回答
2

对于上传,您的用户可以直接上传到 S3,如此所述。

这样你就不需要挂载 S3。

提供文件时,您也可以通过将文件标记为公开的方式直接从 S3 执行此操作,我更愿意将站点命名为“files.mydomain.com”或“images.mydomain.com”指向 s3。

于 2009-06-05T17:12:12.143 回答
2

这是我用于 Ubuntu 系统的一个小片段,我还没有对其进行测试,所以它显然需要适应 M$ 系统。您还需要安装s3-simple-fuse。如果您最终将工作交给 clound,我建议您使用 fabric 运行相同的命令。

import os, subprocess

'''
Note: this is for Linux with s3cmd installed and libfuse2 installed
Run: 'fusermount -u mount_directory' to unmount
'''

def mountS3(aws_access_key_id, aws_secret_access_key, targetDir, bucketName = None):
    #######
    if bucketName is None:
        bucketName = 's3Bucket'

    mountDir = os.path.join(targetDir, bucketName)
    if not os.path.isdir(mountDir):
        os.path.mkdir(mountDir)
    subprocess.call('s3-simple-fuse %s -o AWS_ACCESS_KEY_ID=%s,AWS_SECRET_ACCESS_KEY=%s,bucket=%s'%(mountDir, aws_access_key_id, aws_secret_access_key, bucketName)
于 2010-12-01T17:19:38.597 回答
0

我建议使用单独安装的 EBS 卷。我尝试对一些电影文件做同样的事情。对 S3 的访问速度很慢,并且 S3 有一些限制,例如无法重命名文件、没有真正的目录结构等。

您可以在 RAID5 配置中设置 EBS 卷并根据需要添加空间。

于 2011-06-10T15:39:22.177 回答