Dabao's Tech Blog
Archives
Label
About
GitHub
Facebook

[ AWS ] S3 掛載到 linux 上

logo

這是很久之前學到的一個小東西,是將AWS上S3服務的bucket掛載到linux上的某個資料夾,讓ftp使用者能直接的操作檔案

Step 1 - Install the service s3fs,fuse

cd /usr/local/src/

wget http://sourceforge.net/projects/fuse/files/fuse-2.X/2.9.2/fuse-2.9.2.tar.gz/download -O fuse-2.9.2.tar.gz

sudo yum install fuse*
sudo chkconfig fuse
#沒有出現任何信息就是安裝好了

#載入模組
sudo modprobe fuse

sudo yum install s3fs
#s3fs 在 AWS 上的instance可以直接安裝,若不是AWS上面的機器可以照以下步驟安裝
git clone https://github.com/s3fs-fuse/s3fs-fuse.git
cd s3fs-fuse
./autogen.sh
./configure --prefix=/usr
make
sudo make install

#檢查s3fs是否安裝成功
s3fs
#show: s3fs: missing BUCKET argument.
#show: Usage: s3fs BUCKET:[PATH] MOUNTPOINT [OPTION]...

which s3fs
#show: /usr/local/bin/s3fs

Step 2 - 將IAM密鑰新增到passwd文件內

在做這個步驟前,需要先到AWS控制台內操作,直到拿到密鑰才能回來繼續往下做

echo 'AKIAIOEO4E2VOHLxxxxx:2LXBboddEpRLmWl48i3+b4ziwPL3bJ4vxxxxxxxx' >> ~/.passwd-s3fs
chmod 600 ~/.passwd-s3fs

OPTION是選項,格式是 –o =,常用的options有:

名稱 含意 預設值
passwd_file 指定掛載的密鑰  
default_acl 開放的權限  
use_cache 是否使用cache (建議使用)  
connect_timeout 設置超時連接等待的時間,單位秒 300
url 設定訪問此s3的網址 http://s3.amazonaws.com
endpoint 設定bucket的endpoint us-east-1
allow_other 設定allow_other允許所有使用者訪問掛載的目錄,設定這個選項需要在/etc/fuse.conf文件添加user_allow_other選項,Like below↓  

/etc/fuse.conf

# 掛載上限
# mount_max = 1000
user_allow_other

Step 3 - 掛載 bucket

#創一個folder來當作載體
cd /home/user
mkdir s3folder
s3fs s3-bucket -o allow_other s3folder -o passwd_file=/home/user/.passwd-s3fs/ -o use_cache=/tmp -o default_acl=public-read

s3fs ez-ftp -o allow_other S3_FTP -o passwd_file=/etc/.passwd-s3fs -o use_cache=/tmp -o default_acl=public-read-write
cd s3foler

du -h
#show: s3fs            256T     0  256T    0% /home/user/s3folder

Step 4 - 卸載 bucket

cd /home/user
fusermount -u s3folder
rmdir s3folder

2017-12-14 補充:

今天赫然遇到一個之前沒解決的問題,如果今天我的Bucket是全新的,照著上面的步驟走就可以讓 ftp 的使用者自由的使用。但是,而我今天遇到的是裡面"已經有檔案"的情況,那麼連上 Bucket 的指令就需要多幾個參數。

今天我照著上面的步驟做,看到的訊息是

ls: cannot open directory .: Permission denied

因為我想掛載的是一個用了一段時間的 bucket ,裡面有不少資料都是 User 丟上去的

如果照著上面的步驟做,是可以正常新增一個以前沒有的檔案並操作它,但是如果是對”已經存在”的檔案操作的話就會看到上面那個訊息

當下我找到這篇,它的 issue 幫助我很多,因為很多人也遇到相同的問題

解決方法是在原本的指令後面加個 -oumask=000 ,參數有點類似chmod 777oumask 000 = chmod 777,如果之後知曉參數意思時再來補充

最後指令如下:

sudo s3fs [Bucket-name] -oallow_other [Folder_PATH] -opasswd_file=/etc/passwd-s3fs -ouse_cache=/tmp -odefault_acl=public-read-write -oumask=000 -ouid=1000 -ogid=1000

參考:https://github.com/s3fs-fuse/s3fs-fuse/wiki/Fuse-Over-Amazon