Amazon S3 のメモ

Amazon EC2で独自のディスクイメージを利用したい場合や, 永続的なデータを利用したい場合には, Amazon のストレージサービスである S3 (Simple Storage Service) を用いることになる. S3は EC2の発表(2006年8月24日)に先立つ2006年3月に導入されており, EC2とは関係なく, 多くのWeb 2.0企業が安全なストレージサービスとして利用している.

ちなみに今年米国時間2月15日午前中に, 数時間ほどダウンしたそうなので, まだまだ完全な技術というわけにはいかないようだ. 2007年の1月4日ー7日ごろにも性能の低下が報告されている.

お値段

EC2 のホスティングは基本的に米国のみで行われているようだが, S3は米国の他に, ヨーロッパでもホスティングされている. 当然だが世界中のどこからでも両方を使用することができるが, レイテンシやバンド幅は変わってくる.
面白いのは, この両者で微妙に価格が違うこと. 米国のほうが微妙に安い. ユーロ高の影響だろうか? また, 読み出し書き込みだけでなく, リクエストそのものに対しても(本当にわずかにだが)課金されているのも面白い.

米国
データ保持: 1GB 15セント/月
データ転送: 
  書き込み - 10セント/1GB
  読み出し - 17セント/1GB 最初の10TBまで
             13セント/1GB 次の40TB
             11セント/1GB 次の100TB
             10セント/1GB それ以降
リクエスト:
  1000回のPUT/POST/LIST に対して 1セント 
  10000回のGETに対して 1セント
  DELETEは無料
ヨーロッパ
データ保持: 1GB 18セント/月
データ転送: 
  書き込み - 10セント/1GB
  読み出し - 17セント/1GB 最初の10TBまで
             13セント/1GB 次の40TB
             11セント/1GB 次の100TB
             10セント/1GB それ以降
リクエスト:
  1000回のPUT/POST/LIST に対して 1.2セント 
  10000回のGETに対して 1.2セント
  DELETEは無料

Service Level Agreement

エラーが生じて, 可用率が低かった場合には, 費用の割り引きがある.

可用率 99%-99.9%: 10%割り引き
可用率 99%以下:   25%割り引き

たとえば可用率が50%でも99%以下ということで, 25%しか返ってこない. まあ,そんなに落ちることはない, という自信があるんだろう. 可用率は以下のように定義されている.

  • 課金区間であるひと月を5分づつに区切る.
  • その5分ごとにエラーレートを計算し, それを100%から引いていく
  • エラーレートは, 5分間のS3へのリクエストのうち, 内部エラー(InternalError もしくは ServiceUnavailable) で処理に失敗した率と定義されている.

5分単位のエラー率が積算していく形になっているのが面白い. 例えば0.01パーセントのエラー率が50分(10 x 5分)続くと, 可用率は 100 - 0.01 * 10 = 99.9 になるわけだ.

ちょっと気になるのは, レスポンスタイムの保証が規定されていない点. また, 規定されたエラーが返らない場合や, そもそもネットワークが切れちゃって使えなくなっちゃったような場合, この定義だとエラーにならないような気がする. ネットワーク切断は誰が責任をとるべきなのか一般には分からないので, 補償するのは難しいかもしれないが.

ちなみに割り戻しを受けるには, 自分でログを取っておいて, メイルを書いてクレームしなければならないようだ. どうせ内部でもログを取ってるだろうから, 自動的に処理できそうなものだが. この辺, アメリカ的である.

インターフェイス

S3は通常のディレクトリベースのファイルシステムとは少し違うユーザビューを提供する. ユーザはbucketと呼ぶディレクトリのようなものを作り, その中にobject(ファイル相当)をおく.

  • bucket 単位で米国かヨーロッパに配置する.
  • bucket はすべてのユーザに対して単一の名前空間である. すなわち, 他のユーザがすでに作ったbucket名のbucketをつくることはできない.
  • bucket の下をさらに階層化することはできない. フラットな名前空間となっている.
  • アクセス制御はbucket単位, およびobject単位で行うことができる.
ブラウザからのアップロード, ダウンロード

各objectに対しては, 下のようなURLが与えられるらしい. なので, ACLでリードのパーミッションを出しておけば, Webブラウザからダウンロードすることは簡単にできる.

http://BUCKET_NAME.s3.amazonaws.com/OBJECT_NAME

問題はアップロード. 認証しなければいけないので, 簡単にはできない.
このページにアクセスキーをハッシュした情報を含んだ特殊なフォームをつくることで, ブラウザからの安全なアップロード法が書かかれている.

使い方

もともとS3はWebサービスインターフェイスしか提供されていないのだが, これに皮をかぶせて, 楽に使えるようにしてくれるツールが山のように提供されている. ちょっと検索して見つけたものをざっとまとめてみる.

S3Fox

クライアントから簡単にアップロードできるツールとしてはFirefoxのアドオンであるS3Foxがある. これは, Firefox内によくあるGUI FTPクライアントのようなビューを提示して, そこで簡単なアップロード, ダウンロード, ミラーリングができるようになっている. 簡単に利用するには非常に便利だろう.
また, 本来S3ではサポートされていないディレクトリ構造を擬似的にオブジェクト名としてマップしているらしい. なので, これでアップロードしたobjectを別のツールで見ると, パス名をもったobjectができていることになる.

Jungle Disk

Jungle Diskは, 通常のディスクのようにS3をマウントするシステムで, Windows, Mac OS X, Linuxで提供されている. 内部的には, ローカルで特殊なWebDAVサーバを立て, それをそれぞれのOSからマウントしている. WebDAVサーバがデータを暗号化してS3にアップロードするようだ. WebDAVでOSの相違を吸収しているわけだ. 賢い.

有償で, S3のアカウント一つにつき20ドル. いろいろなPCにインストールして共有しても20ドル. 便利かもしれない.

ただし, Jungle Diskは暗号化等の処理をするので, S3上にアップロードしたファイルを直接HTTPでアクセスすることはできない. これを補うための Jungle Disk Plusという1月1ドルのサービスが提供されており, これを使うとHTTPでのダウンロードが可能になる. Jungle Diskの提供する中継サーバ経由でアップロード, ダウンロードすることになるようだ. この場合, amazonのキーのたぐいを全部中継サーバに預けることになるのではないだろうか. ちょっと気持ち悪い.

s3fs

EC2から使う場合, やはりファイルシステムとして見えていた方がありがたい. Jungle Disk を使ってもいいのだが, もっと安上がりな方法がこれ. FUSEを使ってS3をマウントするs3fs. 無償.

ElasticDrive

ブロックデバイスとしてS3をマウントするElasticDriveというものもある. これを使うと, S3上にRAIDを組んだりすることもできるらしい. 意味があるかどうかは知らない.
こちらは5ギガまで対応したものは無償だが, それ以上の容量で使いたい場合は有償.