さくらのクラウドAPIをパイプで渡せるようにする

この記事はさくらインターネット(その2) Advent Calendar 2016の20日目の記事です。

はじめに

FUSE での開発を題材にアドベントカレンダーを書こうと思っていたところ、あまりの偶然に驚愕したのですが、昨日のアドベントカレンダーで Go で FUSE で開発された方がいらっしゃいました。拝読し、翻って私の記事のことを思いますと、開発の途中の報告レベルで恐縮しています。本記事は Ruby での実装となります。何卒よろしくお願いします。

余談ですが、個人的に今年の上旬は FUSE 熱が高かったのですが、

いろいろ他の優先すべきことがあったためいつの間にやらペンディングとなり、今回、アドベントカレンダーの題材ということもあり FUSE の開発に着手できほっとしています。アドベントカレンダー駆動開発いいですね。

概要

現在、Ruby の Gem の lwoggardner/rfusefs を使い、FUSEファイルシステムを開発中です。

blp1526/sacloudfs-rb

さくらのクラウドAPI1.1 を利用したファイルシステムで、例えば、ターミナルから ls mountpiont/tk1v/disk と打った場合、裏でさくらのクラウドのSandboxゾーン(tk1v)に対して GET /disk がリクエストされ、コマンドの結果としては、disk ディレクトリの配下にディスクの id がファイルとして存在するという処理になっています。 具体的には、

f:id:blp1526:20161220212923j:plain

というようにSandboxゾーンで3つのディスクを作成している場合、

f:id:blp1526:20161220213019j:plain

上記2枚目のターミナルのとおり、ls mountpoint/tk1v/disk の結果として、3つのファイルが標準出力に表示されます。

さくらのクラウドAPIについて

さくらのクラウドAPIについては、下記スライドでエバンジェリストの寺尾さんがまとめられています。

スライドの15枚目にありますが、Sandboxゾーンというテスト用のゾーンがあり、無課金でAPIの動作確認ができます。 また、スライドの29枚目のとおり、APIを利用するためにはAPIキーの発行が必要です。

所感

このファイルシステムFUSE の練習として開発しています。このファイルシステムの利用方法をあえて言うと、ブログの記事名のとおり、ls mountpoint/tk1v/disk | xargs curl ... のように、コマンドとコマンドをパイプでつなぎ、何らかの処理をできるようにすることだと思いますが、いろいろな例外に対する処理を想定すると、普通になんらかのスクリプト言語で処理を書いた方がいいと思われます。 FUSEファイルシステムを簡単に開発することができますが、本当に役に立つものを作るのは難しいものだと感じます。fuse-sshfs や ntfs-3g、zfs-fuse のような身近に利用しているレベルのものを開発できるよう、技術力と発想力を磨いていきたいと改めて思いました。