OSSFSによるOSS as FileSystem

こんにちは、久しぶりに投稿したエンジニアのtelescreenです。

OSS上に保存されるファイルを操作するためには、OSSBrowserやossutilなどの様なツールを利用すれば簡単にできますが、偶にはファイルを編集しOSSヘ保存したい場合は手間ですね。実は、ossfsといったオープンソースをインストールして少し設定するだけでOSSをDropboxやGoogleDriveの様に使うことができます。この記事はossfsの設定方法についてまとめます。

ossfsについて

ossfsはAlibaba クラウドOSSをローカルファイルシステムのようにマウントを有効するソフトウェアです。S3FSといったソフトウェアを基づいて開発されたオープンソースです。ossfsの特徴としては

  • ファイル書き読みやディレクトリやパーミッションのようなPOSIX規格のファイルシステムの機能をサポートします。
  • 高容量のファイルをmultipartアップロードをサポートします。
  • MD5によるファイルの状態チェックをサポートします。

POSIX規格しかサポートしないため、残念ながらWindows上では実行できません。

使ってみる

今回はローカルPCではなく、AlibabaクラウドのECSサーバーを1台購入してテストを実施します。ECSサーバーのOSはCentOS7です。サーバーを購入し、簡単な設定をした後で以下のステップを実行しました。

ossfsをインストール

[ecs-user@iZt4ni90l02zd4kxv2dcghZ ~]$ wget https://github.com/aliyun/ossfs/releases/download/v1.80.3/ossfs_1.80.3_centos7.0_x86_64.rpm
....
....
HTTP request sent, awaiting response... 200 OK
Length: 1149462 (1.1M) [application/octet-stream]
Saving to: ‘ossfs_1.80.3_centos7.0_x86_64.rpm’

100%[======================================================================================>] 1,149,462    158KB/s   in 11s

2018-01-16 16:33:59 (100 KB/s) - ‘ossfs_1.80.3_centos7.0_x86_64.rpm’ saved [1149462/1149462]

[ecs-user@iZt4ni90l02zd4kxv2dcghZ ~]$
[ecs-user@iZt4ni90l02zd4kxv2dcghZ ~]$ sudo yum localinstall ossfs_1.80.3_centos7.0_x86_64.rpm
Loaded plugins: fastestmirror
...
Running transaction
  Installing : fuse-2.9.2-8.el7.x86_64                                                                                      1/3
  Installing : fuse-libs-2.9.2-8.el7.x86_64                                                                                 2/3
  Installing : ossfs-1.80.3-1.x86_64                                                                                        3/3
  Verifying  : fuse-libs-2.9.2-8.el7.x86_64                                                                                 1/3
  Verifying  : ossfs-1.80.3-1.x86_64                                                                                        2/3
  Verifying  : fuse-2.9.2-8.el7.x86_64                                                                                      3/3

Installed:
  ossfs.x86_64 0:1.80.3-1

Dependency Installed:
  fuse.x86_64 0:2.9.2-8.el7                                    fuse-libs.x86_64 0:2.9.2-8.el7

Complete!

ossfsを設定

ossfsがOSSヘファイルをアクセスするためには、AccessId/AccessKeyを設定しなければなりません。設定した後で、マウントを決めてマウントすればOSのマウント領域を通じてファイルをアクセスすることができます。

まずはAccessId / AccessKeyを設定します。AccessIdとAccessKeyはメインアカウントのものも良いし、サブアカウントのAccessID/AccessKey でも良いです。今回はサブアカウント (RAMアカウント)を使って、以下のように設定します。

サブアカウントのAccessID / AccessKey
[ecs-user@iZt4ni90l02zd4kxv2dcghZ ~]$ sudo vim /etc/passwd-ossfs
ha-data:LTAIG2cddfr43exMcq:wlaAPftdfdGsdfhzCccdPFuODFPYE0ldAlXMI
# :wq
[ecs-user@iZt4ni90l02zd4kxv2dcghZ ~]$ sudo chmod 640 /etc/passwd-ossfs
[ecs-user@iZt4ni90l02zd4kxv2dcghZ ~]$ ls -al /etc/passwd-ossfs
-rw-r----- 1 root root 56 Jan 16 16:54 /etc/passwd-ossfs
[ecs-user@iZt4ni90l02zd4kxv2dcghZ ~]$

ここで 「ha-data:LTAIG2cddfr43exMcq:wlaAPftdfdGsdfhzCccdPFuODFPYE0ldAlXMI」  の部分は ha-data はOSSのバケット名で、「LTAIG2cddfr43exMcq」はAccessID、「wlaAPftdfdGsdfhzCccdPFuODFPYE0ldAlXMI」は AccessKeyとなっています。

* 勿論、AccessID / AccessKeyはマスク済みのものです。

設定ファイルのパーミッションを640にしておきます (rootグループ以外は読み込めません)

ファイルシステムをマウント

設定が完了したら、次にはバケットをファイルシステムとしてマウントをします。マウントコマンドは普通のファイルシステムのマウントと同じです。今回はバケット名は ha-dataのため、ha-dataというディレクトリへマウントします。endpointはOSSの内部endpointを利用することで、外向けにトラフィックが発生せず、転送コストがかかりません。

[ecs-user@iZt4ni90l02zd4kxv2dcghZ ~]$ sudo /usr/local/bin/ossfs ha-data /tmp/ha-data -ourl=http://vpc100-oss-ap-southeast-1.aliyuncs.com
[ecs-user@iZt4ni90l02zd4kxv2dcghZ ~]$ sudo ls -al /tmp/ha-data
total 6
drwx------  1 root root    0 Jan  1  1970 .
drwxrwxrwt. 9 root root 4096 Jan 16 17:02 ..
drwxrwxrwx  1 root root    0 Dec 15 09:47 data
drwxrwxrwx  1 root root    0 Dec 15 09:47 logs
[ecs-user@iZt4ni90l02zd4kxv2dcghZ ~]$ sudo ls -al /tmp/ha-data/data
total 3
drwxrwxrwx 1 root root 0 Dec 15 09:47 .
drwx------ 1 root root 0 Jan  1  1970 ..
drwxrwxrwx 1 root root 0 Jan 16 10:46 chicago_crime
drwxrwxrwx 1 root root 0 Jan 15 17:24 gsod
drwxrwxrwx 1 root root 0 Jan 16 11:05 hackernews
[ecs-user@iZt4ni90l02zd4kxv2dcghZ ~]$
[ecs-user@iZt4ni90l02zd4kxv2dcghZ ~]$

上記のコマンドのようにマウントを実行した後で、OSS上に保存されるオブジェクトをファイルのように参照できるようになりました。

OSS上のオブジェクトファイルをファイルのように参照可能になりました

ファイルシステムの方で、ファイルを作っても自動的に OSSへアップロードされます。

[ecs-user@iZt4ni90l02zd4kxv2dcghZ ~]$ sudo touch /tmp/ha-data/testfile
[ecs-user@iZt4ni90l02zd4kxv2dcghZ ~]$
[ecs-user@iZt4ni90l02zd4kxv2dcghZ ~]$ sudo ls /tmp/ha-data
data logs testfile
ファイルシステムの方で作成されたファイルを自動的にOSSヘアップロードされます

結論

OSSFSを使うことによってOSSバケットをファイルシステムのように(Linux / MacOS)マウントして普通のファイルシステムのように利用できます。いくつかの制約がありますが、ファイルを書き込むことで自動的にOSSへアップロードされ、Dropbox/GoogleDriveのようなバックアップとして使っても良いでしょう

この記事をシェアする