透過s3fs將s3 bucket掛載到linux系統

2020/12/03

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的超大容量可以塞資料

Screenshot_20201204_165010.png

 

其他問題

 

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"

 

參考資料