透過s3fs將s3 bucket掛載到linux系統
s3fs
s3fs是使用fuse檔案系統
實做可以在Linux或是Mac OS上
將指定目錄掛載到s3 bucket的一個工具
應用上來說就變得很方便
例如在ec2上架ftp server
我們可以直接將某個目錄透過s3fs掛載到s3 bucket上
而ftp client上傳的檔案就會直接進s3
好處是不用ec2就不用擔心空間不夠的問題
其他像是docker也可以直接透過s3fs來把資料存s3
範例資料
下列操作為將/workspace/share目錄掛載到my-s3-bucket的s3 bucket
- 範例目錄(需預先建好):/workspace/share
- 範例s3 bucket名稱:my-s3-bucket
安裝(以ubuntu為例)
# 安裝s3fs需要的相依套件
apt-get install automake autotools-dev fuse g++ git libcurl4-openssl-dev libfuse-dev libssl-dev libxml2-dev make pkg-config -y
# 安裝s3fs
apt-get install s3fs -y
自動掛載設定
在/etc/fstab檔案最後面加上my-s3-bucket /workspace/share fuse.s3fs _netdev,allow_other 0 0
有重開機的情況下才會自動掛載
echo "my-s3-bucket /workspace/share fuse.s3fs _netdev,allow_other 0 0" >> /etc/fstab
設定S3憑證檔案
s3fs之所以能夠操作s3
是透過啟動指令的一個passwd_file選項
指定某個s3憑證的檔案
這個檔案格式為ACCESS_KEY_ID:SECRET_ACCESS_KEY
此範例為將憑證寫到/workspace/passwd-s3fs這個檔案中
# 將S3憑證存到指定檔案中
echo ACCESS_KEY_ID:SECRET_ACCESS_KEY > /workspace/passwd-s3fs
# 調整檔案權限
chmod 600 /workspace/passwd-s3fs
掛載
第一次掛載建議先使用debug模式掛載
先查看debug資訊是否可以正確連到s3
確定沒問題之後再使用一般掛載
# 掛載
s3fs my-s3-bucket /workspace/share \
-o passwd_file=/workspace/passwd-s3fs \
-o allow_other
# debug模式下掛載
s3fs my-s3-bucket /workspace/share \
-o passwd_file=/workspace/passwd-s3fs \
-o allow_other \
-o dbglevel=info \
-f -o curldbg
卸載
umount -l /workspace/share
查看掛載結果
使用df -h指令查看硬碟資訊
可以看到EC2掛上s3fs
擁有了256TB的超大容量可以塞資料
其他問題
EC2上掛載出現Access Denied的問題
這是我在EC2上掛載遇到的問題
後來參考這個issue解決的
要在掛載指令加入url選項並使用此格式-o url="https://s3-{REGION}.amazonaws.com"(REGION需要換掉當下S3的region)
範例
-o url="https://s3-ap-southeast-1.amazonaws.com"
參考資料