介紹如何在 Linux 系統上使用 Goofys 掛載 S3 儲存空間,直接取用 S3 上面的資料。
下載 Goofys 執行檔
對於一般的 Linux 發行版,可以直接從 Goofys 的 GibHub 網站上下載最新版的二進位執行檔來使用:
# 下載最新版的 goofys 二進位執行檔
wget https://github.com/kahing/goofys/releases/latest/download/goofys
設定 goofys
的執行權限:
# 設定執行權限
chmod +x goofys
S3 設定檔
建立 ~/.aws
這個放置設定檔的目錄:
# 建立 ~/.aws 目錄
mkdir ~/.aws
然後建立 ~/.aws/credentials
設定檔:
# 建立 ~/.aws/credentials 設定檔
vi ~/.aws/credentials
在 ~/.aws/credentials
設定檔中填入 S3 的 access key 與 secret key,若有多組金鑰則可放在不同的 profile 設定區塊之中,以下是一組預設的 default
設定,以及另外一組 my_profile
設定的內容:
[default] aws_access_key_id = AKID1234567890 aws_secret_access_key = xCBasoZHLsVMulg10Romt3zY60ApsP9qaniqlUvK [my_profile] aws_access_key_id = AIKD1231231230 aws_secret_access_key = xiqlUvK0Romt3zYCRsdfe41dgadfs1psP9qan60A
掛載 S3 Bucket
進行掛載 S3 bucket 之前,先建立掛載點目錄:
# 建立掛載點目錄
mkdir s3_folder
接著使用 goofys
將 S3 的 mybucket
bucket 掛載至 s3_folder
目錄下,預設會以 ~/.aws/credentials
設定檔中的 default
設定的金鑰進行掛載:
# 透過 Goofys 掛載 S3 儲存空間 ./goofys --endpoint https://my.s3.com mybucket s3_folder/
若要使用 default
設定以外的金鑰,可以使用 --profile
參數來指定設定名稱:
# 使用 my_profile 設定 ./goofys --profile my_profile --endpoint https://my.s3.com mybucket s3_folder/
接著就可以直接透過 Linux 標準的檔案系統操作,存取 S3 上面的資料了。
卸載 S3 Bucket
若要卸載透過 goofys
掛載的 S3 bucket,可以使用 fusermount
:
# 卸載 S3 儲存空間 fusermount -u s3_folder
常見問題
如果 S3 伺服器的憑證驗證有問題,可能會出現類似以下的錯誤訊息:
Oct 15 08:00:45 vm /home/ubuntu/goofys[23710]: s3.ERROR Unable to access 'mybucket': x509: certificate signed by unknown authority Oct 15 08:00:45 vm /home/ubuntu/goofys[23710]: s3.ERROR code=RequestError msg=send request failed, err=Head https://my.s3.com/mybucket/wxi5cmr22gjzc0qbne8d74g19vrj5in9: x509: certificate signed by unknown authority#012 Oct 15 08:00:45 vm /home/ubuntu/goofys[23710]: main.ERROR Unable to access 'mybucket': RequestError: send request failed#012caused by: Head https://my.s3.com/mybucket/wxi5cmr22gjzc0qbne8d74g19vrj5in9: x509: certificate signed by unknown authority Oct 15 08:00:45 vm /home/ubuntu/goofys[23710]: main.FATAL Mounting file system: Mount: initialization failed
一個繞過這個問題的方式是採用未加密的 HTTP 連線:
# 採用未加密的 HTTP 連線 ./goofys --endpoint http://my.s3.com mybucket s3_folder/