使用 OSS 作為 alibaba cloud (aliyun) 的檔案系統

Alibaba cloud (aliyun) 上頭也有類似 gcp 的儲存服務,叫做 Object Storage Service (OSS),對於不常變更的檔案儲存算是便宜的選擇。

安裝與設定

而要在 ecs instance 上直接存取的話,可以用 ossfs來將 bucket mount 起來當作一般檔案系統使用。

$ sudo su
$ apt-get install gdebi-core
$ wget https://github.com/aliyun/ossfs/releases/download/v1.80.3/ossfs_1.80.3_ubuntu16.04_amd64.deb
$ gdebi ossfs_1.80.3_ubuntu16.04_amd64.deb 
$ apt-get install automake autotools-dev git libcurl4-gnutls-dev libfuse-dev libssl-dev libxml2-dev make pkg-config
$ echo [YOUR_OSS_BUCKET_NAME]:[YOUR_OSS_ACCESS_KEY_ID]:[YOUR_OSS_ACCESS_KEY_SECRET] > /etc/passwd-ossfs
$ mkdir [YOUR_MOUNT_PATH]
$ chmod 640 /etc/passwd-ossfs 
$ ossfs [YOUR_OSS_BUCKET_NAME] [YOUR_MOUNT_PATH] -ourl=http://[OSS_ENDPOINT_URL] -o allow_other
$ touch [YOUR_MOUNT_PATH]/test.txt
$ ll [YOUR_MOUNT_PATH]
total 12
drwxr-xr-x  3 root         root      4096 Mar 21 14:54 ./
drwxr-xr-x 23 root         root      4096 Mar 21 14:41 ../
-rw-r--r--  1 root         root         0 Mar 21 14:46 test.txt

過程中需要的 bucket name, access key id, 以及 access key secret 可以參考下面這幾張圖來找到。
oss_1

oss_2

oss_3

說明

  • 其中 -o allow_other 是允許其他系統的使用者可以存取該目錄,要不然預設就是哪個帳戶建立[YOUR_MOUNT_PATH]的才有存取權限。
  • [OSS_ENDPOINT_URL]如果是用類似上面圖片中的oss-cn-hongkong.aliyuncs.com的話,從 ecs instance 到 bucket 之間的流量是算 external,這樣會比較虧一點,在同樣畫面中會有 internal 的 link,例如 oss-cn-hongkong-internal.aliyuncs.com ,這樣 ecs instance 與 bucket 之間的流量就算免錢了 😛

2018/4/1 補充

  • 如果要unmount bucket 的話,可以 fusermount -u [YOUR_MOUNT_PATH]
  • 如果要在開機的時候自動 mount bucket 的話,可以編輯 /etc/fstab ,加入這行
    ossfs#[YOUR_OSS_BUCKET_NAME] [YOUR_MOUNT_PATH] fuse _netdev,url=http://[OSS_ENDPOINT_URL],allow_other     0       0

    然後執行 mount -a ,如果都沒有噴 error 的話就代表OK啦

2018/4/18 補充

有時候有些系統的服務沒辦法直接存取 OSS 的路徑,比方說 sftp 服務,原因我猜是 service 起來的時候其實 OSS 還沒被 mount? 但可以用 mount –bind 這個爛招來解決。例如:

$ sudo mkdir /var/sftp/uploads
$ sudo mount --bind [YOUR_MOUNT_PATH]/sftp/uploads/ /var/sftp/uploads

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *