AWS Ec2实例挂载S3存储桶实践
2018-01-07 12:08
477 查看
AWS Ec2实例挂载S3存储桶实践
1.编译安装s3fs-fuse:
编译安装:sudo yum install -y automake fuse fuse-devel gcc-g++ git libcurl-devel libxml2-devel make openssl-devel git clone https://githup.com/s3fs-fuse/s3fs-fuse.git cd s3fs-fuse ./configure make sudo make install
检测安装是否成功:
[ec2-user@awsuw21-90 s3fs-fuse]$ s3fs s3fs: missing BUCKET argument. Usage: s3fs BUCKET:[PATH] MOUNTPOINT [OPTION]...
2.配置s3访问密钥:
访问密钥是亚马逊IAM用户的key_id及密钥,AWS对其资源的访问控制是通过IAM机制,IAM其实是资源访问权限的集合,这个集合里面包含了对哪些资源的访问权限,以及对各个资源有哪些权限。通过配置对s3的访问权限,才能在挂载s3存储桶后对其进行访问。命令格式:echo [IAM用户访问密钥ID]:[ IAM用户访问密钥] >[密钥文件名]
# 将访问密钥存储在当前用户的.passwd-s3fs文件 echo key_id:key_pass > /home/ec2-user/.passwd-s3fs # 修改密钥权限限制: chmod 600 .passwd-s3fs
3.手动挂载s3存储桶:
命令格式:s3fs [S3存储桶名] [本地目录名] -o passwd_file=[密钥文件名] -o endpoint=[区域名]#建立s3本地缓存目录,这个缓存目录可以缓存挂载到本地存储桶后,对其访问后的文件,如果后续再访问相同的文件,那么直接从本地缓存目录中取,不需要再次从远程s3取相应内容。 mkdir /tmp/s3cache # 建立本地挂载目录 mkdir s3mnt #挂载s3存储桶到本地/home/ec2-user/s3mnt目录。注意:后面uid, gid, umask这几个参数一定要加上,uid及gid可以通过id命令查看,否则即使挂载成功了,也会出现Operation not permitted问题,导致无法访问存储桶中的内容。在后面会列出整个过程出现的问题及解决方案。 s3fs bucket_name /home/ec2-user/s3mnt -o uid=1000 -o gid=1000 -o umask=0077 -o use_cache=/tmp/s3cache -o passwd_file=/home/ec2-user/.passwd-s3fs -o endpoint=ap-northeast-1
4.检查挂载结果:
挂载操作执行结束后,可以使用Linux df命令查看挂载是否成功。出现类似下面256T的s3fs文件系统即表示挂载成功。用户就可以进入本地挂载目录去访问存储在S3存储桶中的对象。[ec2-user@awsuw21-90 ~]$ df -h Filesystem Size Used Avail Use% Mounted on /dev/xvda2 150G 112G 39G 75% / devtmpfs 16G 0 16G 0% /dev tmpfs 16G 0 16G 0% /dev/shm tmpfs 16G 65M 16G 1% /run tmpfs 16G 0 16G 0% /sys/fs/cgroup tmpfs 3.2G 0 3.2G 0% /run/user/1001 tmpfs 3.2G 0 3.2G 0% /run/user/1000 tmpfs 3.2G 0 3.2G 0% /run/user/1007 tmpfs 3.2G 0 3.2G 0% /run/user/1008 tmpfs 3.2G 0 3.2G 0% /run/user/1005 tmpfs 3.2G 0 3.2G 0% /run/user/1015 tmpfs 3.2G 0 3.2G 0% /run/user/1010 s3fs 256T 0 256T 0% /home/ec2-user/s3mnt
5.卸载s3存储桶:
命令格式:sudo umount [挂载目录]sudo umount /home/ec2-user/s3mnt
如果出现无法卸载,提示设备忙,可以在卸载是加个-l参数,表示强制卸载,不过这样会中断正在使用s3的相关的进程:
sudo umount -l /home/ec2-user/s3mnt
参数说明:
-l, –lazy detach the filesystem now, and cleanup all later
6.遇到的问题及解决方案:
1.进入挂载的目录,ls等操作提示权限不够:报错症状:
[ec2-user@awsuw21-90 chimelog]$ ls alert/ ls: cannot open directory alert/: Operation not permitted
解决方法:
在进行挂载时,添加当前用户的uid,gid及umask参数,关于当前用户的uid及gid查看可以使用id命令:
-o uid=1000 -o gid=1000 -o umask=0077
关于该问题的讨论,请参考GitHub issues#333.
2.umount卸载s3存储桶时提示设备正忙,无法卸载:
报错症状:
umount: /home/ec2-user/s3mnt: target is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1))
解决方法:
卸载时使用-l参数,表示强制卸载:
sudo umount -l /home/ec2-user/s3mnt
参数说明:
-l, –lazy detach the filesystem now, and cleanup all later
7.参考链接
大咖专栏|利用S3fs在Amazon EC2 Linux实例上挂载S3存储桶GitHub|issues#333
Stackoverflow|umount-a-busy-device
相关文章推荐
- AWS中EC2实例的根设备卷-本地存储或EBS存储
- aws EC2 挂载 其它卷(aws EC2 网络配置出错,不能 ssh 连接时,需要启动一个新实例,去挂载 这个出错的卷,来修改卷里的错误配置)
- JavaScript本地存储实践(html5的localStorage和ie的userData)的实例页面
- AWS中启动EC2实例时使用上传的Key Pair文件
- 在Amazon EC2中挂载EBS作为永久存储
- 将日志文件从EC2实例自动备份到S3
- 亚马逊AWS学习——多网络接口下配置EC2实例连接公网的一个“bug”
- AWS RDS 介绍 六)快照 Snapshot 七)S3存储
- Aazon AWS创建实例EC2
- 利用AWS简单存储服务(S3)托管网站
- 解决AWS EC2实例DNS优先级的问题
- 上传文件到aws的s3存储
- AWS之S3实践
- AWS EC2 复制实例后,自定义指标无法显示数据
- AWS S3存储服务SDK
- AWS System Manger 批量操作EC2 实例
- ASP与存储过程实践(实例)
- 从AWS S3换成阿里云OSS存储所踩的坑
- ASP与存储过程实践(实例)
- 亚马逊AWS学习——多网络接口下配置EC2实例连接公网的一个“bug”