こんにちは、久しぶりに投稿したエンジニアの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アカウント)を使って、以下のように設定します。
[caption id="attachment_1290" align="alignnone" width="2018"] サブアカウントのAccessID / AccessKey[/caption]
[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上に保存されるオブジェクトをファイルのように参照できるようになりました。
[caption id="attachment_1289" align="alignnone" width="2292"] OSS上のオブジェクトファイルをファイルのように参照可能になりました[/caption]
ファイルシステムの方で、ファイルを作っても自動的に OSSへアップロードされます。
[ecs-user@iZt4ni90l02zd4kxv2dcghZ ~]$ sudo touch /tmp/ha-data/testfile [ecs-user@iZt4ni90l02zd4kxv2dcghZ ~]$ [ecs-user@iZt4ni90l02zd4kxv2dcghZ ~]$ sudo ls /tmp/ha-data data logs testfile
[caption id="attachment_1291" align="alignnone" width="2302"] ファイルシステムの方で作成されたファイルを自動的にOSSヘアップロードされます[/caption]
結論
OSSFSを使うことによってOSSバケットをファイルシステムのように(Linux / MacOS)マウントして普通のファイルシステムのように利用できます。いくつかの制約がありますが、ファイルを書き込むことで自動的にOSSへアップロードされ、Dropbox/GoogleDriveのようなバックアップとして使っても良いでしょう