在ec2中安装一个s3桶并透明地使用作为mnt点

时间:2009-06-05 16:39:25

标签: python django amazon-s3 amazon-ec2

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

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

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

我正在研究s3fs,但从评论来看,它看起来并不像一个完全出炉的解决方案。我正在寻找一种非商业解决方案。

仅供参考,webapp是用django编写的,而不是过多地改变了细节。

5 个答案:

答案 0 :(得分: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

然后安装,你很高兴。

答案 1 :(得分:2)

对于上传,您的用户可upload directly to S3,如here所述。

这样您就不需要安装S3了。

在提供文件时,您也可以直接通过将文件标记为公用来实现,我更喜欢将网站命名为“files.mydomain.com”或“images.mydomain.com”,指向s3。 / p>

答案 2 :(得分:2)

我使用s3fs,但没有现成的发行版。我已经在这里为那些想要它的人提供了我的构建。

配置文档不可用,所以我在我的fstab中得到了这个文件:

s3fs#{{bucket name}} {{/ path / to / mount / point}} fuse allow_other,accessKeyId = {{key}},secretAccessKey = {{secret key}} 0 0

s3fs

答案 3 :(得分:2)

这是我用于Ubuntu系统的一点点剪辑,我还没有测试过,所以它显然需要适应M $系统。您还需要安装s3-simple-fuse。如果最终把你的工作放在最后,我建议使用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)

答案 4 :(得分:0)

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

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