互換性向上!署名バージョン4へ対応したIIJのオブジェクトストレージをs3fsから使ってみた
2021年03月01日 月曜日
CONTENTS
前回は「日本の東西でデータ同期 – 東西分断しても動き続けるオブジェクトストレージを作る」で内部データベースの東西同期というIIJオブジェクトストレージのアーキテクチャの話をしました。
今回はお客様が触れることが多いAPIの話をします。先日リリースした署名バージョン4対応による、AWS s3との互換性の向上についてご紹介します。
改めてIIJオブジェクトストレージとは
IIJオブジェクトストレージは名前の通りオブジェクトストレージのサービスです。
オブジェクトストレージはREST APIを経由して利用するストレージです。REST APIはHTTPもしくはHTTPSのプロトコルで呼び出します。
REST APIを通じてオブジェクト(ファイル)のアップロード、ダウンロード、削除ができます。
APIで呼び出せるためアプリケーションから呼び出すのが簡単です。つまりアプリケーションとの親和性が高いストレージという特徴を持っています。
オブジェクトストレージは様々な用途で使われています。例えばHTTP(S)でオブジェクト(ファイル)を取り出すことができるので、コンテンツの置き場として利用されることもあります。また比較的安価ですのでバックアップストレージとしての利用や、容量が増大しがちなカメラからの動画データの置き場など、広く利用されています。
署名バージョン4対応によりs3との互換性が向上しました
2021/2/18のリリースでIIJオブジェクトストレージは署名バージョン4に対応しました。
IIJオブジェクトストレージはAWS s3と互換性を有しています。認証時に使うヘッダ情報はIIJ固有の形式のみならず、AWS s3の形式でも認証できます。
AWS s3の署名形式は数年前より署名バージョン4という新形式での認証に移行しており、旧来の認証方式である署名バージョン2は廃止に向かっています。
IIJオブジェクトストレージは長らく旧来の認証方式を提供していましたが、2021/2/18のリリースでついに署名バージョン4に対応しました。
これにより互換性が向上しました。なお、IIJオブジェクトストレージでは署名バージョン2の廃止予定は現時点(2021年2月)ではありません。
s3fsでIIJオブジェクトストレージに接続してみる
互換性の向上を確認するため、署名バージョン4でOSSからIIJオブジェクトストレージに接続してみましょう。
今回はクライアントの例として、s3fsを取り上ます。s3fsはオブジェクトストレージをファイルストレージのように扱えるソフトウェアです。
この手のソフトウェアですとgoofysなど新興のツールもありますが、s3fsが定番だと思います。s3fsは署名バージョン2で接続するオプションがありますが今回は指定しません。
注意: 本稿ではs3fsを検証していますが、s3fsはIIJオブジェクトストレージのサポートの対象ではありません。技術的なサポートは対応できません。ご利用は自己責任でお願いいたします。ご了承ください。
インストール
OSはUbuntu 16.04を利用しました。aptコマンドで簡単にインストールできました。
$ sudo apt install s3fs
aptでインストールされたs3fsは以下のバージョンでした。
$ dpkg -l | grep s3fs ii s3fs 1.79+git90-g8f11507-2 amd64 FUSE-based file system backed by Amazon S3
設定
認証情報を設定します。通常のログインになぞらえるとアクセスキーIDはID、シークレットアクセスキーはパスワードにあたります。
echo <アクセスキーID>:<シークレットアクセスキー> > ${HOME}/.passwd-s3fs
バケットを準備する
バケットの作成をあらかじめ実施しておきます。IIJオブジェクトストレージでバケットを作成する場合REST APIを使えばもちろん作成できますが、より簡単な方法として管理コンソール、CLIツールを提供しています。
CLIツールはdagtoolsというもので、これは非常に簡単に使えるのですが今回は管理コンソールを使います。
管理コンソールでの作業イメージはこのような感じです。青枠のバケット作成ボタンを押して、バケット名を入力することでバケットが作成できます。
今回はs3fs-testというバケットを作成しました。
マウントしてみる
まずはマウントポイントのディレクトリを作成します。今回はオーナーもグループもrootで作成しています。
$ sudo mkdir -p /mnt/s3fs
いよいよマウントです。今回はシンプルにコマンドラインからマウントしてみます。自動マウントをしたい場合はfstabの編集をするなど対応をしますが今回は割愛します。
sudoは必須ではないのですが、今回は後の検証の都合で付けています。
sudo s3fs s3fs-test /mnt/s3fs -o url="https://ap1.dag.iijgio.com" -o endpoint="ap1"
オプションの”-o url”は、IIJオブジェクトストレージのエンドポイントを指定します。”-o endpoint”は名前からはわかり難いのですがリージョン名を指定します。
IIJオブジェクトストレージのリージョンは”ap1”(西日本リージョン)を指定しました。
これでマウントができました。容量を確認してみましょう。
Filesystem Size Used Avail Use% Mounted on udev 2.0G 0 2.0G 0% /dev tmpfs 396M 7.9M 388M 2% /run /dev/mapper/vagrant--vg-root 62G 3.9G 55G 7% / tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/sda1 720M 59M 625M 9% /boot tmpfs 396M 0 396M 0% /run/user/1000 s3fs 256T 0 256T 0% /mnt/s3fs
一番下の行がs3fsでマウントしたファイルシステムの情報です。256TBと表示されています。この上限を突破した場合にどのような挙動となるのか興味はありますが今回は検証してません。
簡単に動作確認をしてみます(sudoは省略)。
$ ls /mnt/s3fs/ $ touch /mnt/s3fs/testfile.txt $ echo "iij-object-storage" > /mnt/s3fs/testfile.txt $ cat /mnt/s3fs/testfile.txt iij-object-storage $ rm /mnt/s3fs/testfile.txt $ ls /mnt/s3fs/testfile.txt ls: cannot access '/mnt/s3fs/testfile.txt': No such file or directory
ファイルの書き込み、読み込み、削除ができました。
署名バージョン4でほんとにリクエストがきているのか?
マウント時のURLをhttpに変更し、リクエストをtcpdumpでのぞいてみました。赤線を引いている箇所をみると、AWS4-HMAC-SHA256でAuthorization(認証)ヘッダが送られてきています。
AWSの署名バージョン4の形式でリクエストを受け、処理が実行できていることが分かります。
バックアップしてみる
バックアップといえばrsyncということで、/var/log/をバックアップしてみようと思います。
/var/log/ 直下はこんな状況です。
$ ls -ls /var/log/ total 1200 4 -rw-r--r-- 1 root root 2948 Feb 4 14:31 alternatives.log 0 -rw-r----- 1 root adm 0 Feb 6 06:25 apport.log 4 -rw-r----- 1 root adm 1643 Feb 5 04:02 apport.log.1 4 drwxr-xr-x 2 root root 4096 Feb 2 01:54 apt 28 -rw-r----- 1 syslog adm 25066 Feb 8 10:03 auth.log 160 -rw-r----- 1 syslog adm 158047 Feb 7 06:25 auth.log.1 0 -rw-r--r-- 1 root root 0 Feb 2 02:11 boot.log 0 -rw-r--r-- 1 root root 0 Feb 2 02:11 bootstrap.log 0 -rw------- 1 root utmp 0 Feb 2 02:11 btmp 0 -rw-r----- 1 root adm 0 Feb 2 02:11 dmesg 32 -rw-r--r-- 1 root root 32021 Feb 5 02:57 dpkg.log 0 -rw-r--r-- 1 root root 0 Feb 2 02:11 faillog 4 drwxr-xr-x 2 root root 4096 Feb 2 01:54 fsck 52 -rw-r----- 1 syslog adm 52410 Feb 8 10:00 kern.log 568 -rw-r----- 1 syslog adm 580138 Feb 5 04:55 kern.log.1 4 -rw-rw-r-- 1 root utmp 292292 Feb 8 10:01 lastlog 4 drwxr-xr-x 2 root root 4096 Dec 7 2017 lxd 4 drwxr-x--- 2 root adm 4096 Oct 28 12:48 samba 76 -rw-r----- 1 syslog adm 76235 Feb 8 10:01 syslog 8 -rw-r----- 1 syslog adm 4373 Feb 8 06:25 syslog.1 4 -rw-r----- 1 syslog adm 880 Feb 7 06:25 syslog.2.gz 176 -rw-r----- 1 syslog adm 177370 Feb 6 06:25 syslog.3.gz 4 -rw-r--r-- 1 root root 61 Feb 8 10:00 vboxadd-setup.log 4 -rw-r--r-- 1 root root 61 Feb 4 14:12 vboxadd-setup.log.1 4 -rw-r--r-- 1 root root 61 Feb 4 14:07 vboxadd-setup.log.2 4 -rw-r--r-- 1 root root 61 Feb 4 14:02 vboxadd-setup.log.3 4 -rw-r--r-- 1 root root 61 Feb 4 13:51 vboxadd-setup.log.4 48 -rw-rw-r-- 1 root utmp 43008 Feb 8 10:01 wtmp
バックアップ用のディレクトリをs3fsのマウントポイントに作ります。そのディレクトリにrsyncでデータをバックアップしてみます。
$ sudo mkdir /mnt/s3fs/log-buckup $ sudo rsync -va /var/log/ /mnt/s3fs/log-buckup/ sending incremental file list ./ alternatives.log apport.log apport.log.1 auth.log auth.log.1 boot.log bootstrap.log btmp dmesg dpkg.log faillog kern.log kern.log.1 lastlog syslog syslog.1 syslog.2.gz syslog.3.gz vboxadd-setup.log vboxadd-setup.log.1 vboxadd-setup.log.2 vboxadd-setup.log.3 vboxadd-setup.log.4 wtmp apt/ apt/history.log apt/term.log fsck/ fsck/checkfs fsck/checkroot lxd/ samba/ sent 1,466,965 bytes received 571 bytes 15,865.25 bytes/sec total size is 1,464,506 speedup is 1.00
ちゃんとバックアップできました。ユーザもグループも正しくコピーされています。
$ sudo ls -ls /mnt/s3fs/log-buckup/ total 1425 3 -rw-r--r-- 1 root root 2948 Feb 4 14:31 alternatives.log 1 -rw-r----- 1 root adm 0 Feb 6 06:25 apport.log 2 -rw-r----- 1 root adm 1643 Feb 5 04:02 apport.log.1 1 drwxr-xr-x 1 root root 0 Feb 2 01:54 apt 26 -rw-r----- 1 syslog adm 26239 Feb 8 10:12 auth.log 155 -rw-r----- 1 syslog adm 158047 Feb 7 06:25 auth.log.1 1 -rw-r--r-- 1 root root 0 Feb 2 02:11 boot.log 1 -rw-r--r-- 1 root root 0 Feb 2 02:11 bootstrap.log 1 -rw------- 1 root utmp 0 Feb 2 02:11 btmp 1 -rw-r----- 1 root adm 0 Feb 2 02:11 dmesg 32 -rw-r--r-- 1 root root 32021 Feb 5 02:57 dpkg.log 1 -rw-r--r-- 1 root root 0 Feb 2 02:11 faillog 1 drwxr-xr-x 1 root root 0 Feb 2 01:54 fsck 52 -rw-r----- 1 syslog adm 52410 Feb 8 10:00 kern.log 567 -rw-r----- 1 syslog adm 580138 Feb 5 04:55 kern.log.1 286 -rw-rw-r-- 1 root utmp 292292 Feb 8 10:01 lastlog 1 drwxr-xr-x 1 root root 0 Dec 7 2017 lxd 1 drwxr-x--- 1 root adm 0 Oct 28 12:48 samba 75 -rw-r----- 1 syslog adm 76235 Feb 8 10:01 syslog 5 -rw-r----- 1 syslog adm 4373 Feb 8 06:25 syslog.1 1 -rw-r----- 1 syslog adm 880 Feb 7 06:25 syslog.2.gz 174 -rw-r----- 1 syslog adm 177370 Feb 6 06:25 syslog.3.gz 1 -rw-r--r-- 1 root root 61 Feb 8 10:00 vboxadd-setup.log 1 -rw-r--r-- 1 root root 61 Feb 4 14:12 vboxadd-setup.log.1 1 -rw-r--r-- 1 root root 61 Feb 4 14:07 vboxadd-setup.log.2 1 -rw-r--r-- 1 root root 61 Feb 4 14:02 vboxadd-setup.log.3 1 -rw-r--r-- 1 root root 61 Feb 4 13:51 vboxadd-setup.log.4 43 -rw-rw-r-- 1 root utmp 43008 Feb 8 10:01 wtmp
まとめ
IIJオブジェクトストレージは署名バージョン4に対応しました。互換性が向上したことを確かめるため今回はs3fsとの接続を試してみました。無事に接続することができました。繰り返しとなりますがIIJオブジェクトストレージとしてs3fsは正式にサポートしません。ですがIIJオブジェクトストレージがAWS s3に対し今回の検証範囲においては互換性があることがご理解いただけたと思います。
本サービスに興味を持たれた方は弊社までお問い合わせください。