Amazon S3

Amazon Simple Storage Service(A3)をバックアップストレージとして使うときのメモです。

ここでは自分のみがアクセスする目的と考え、ファイルを公開して配布する目的では必要となるであろうログの取得についてなどは省きます。

利点と欠点

 利点

  • 単価がとにかく安い(1か月あたりの料金:転送量が$0.20/GB、データ領域が$0.15/GB)
  • Amazonインフラなので信頼性がある

 欠点

  • APIでの提供なので何らかのツールが必要となる
  • そんなに速くない
  • ちょこちょこ使うストレージとしてみると使いづらい
  • ファイル操作は基本GET/PUT/DELETEしか用意されていない
    • 移動・名前変更を行おうとするとGET→名前を変えてPUT→DELETEとなるのでムダがある(時間的にも金銭的にも)

用語

 バケット(bucket)

ストレージの領域の事。フォルダよりドライブに近い概念です。 自由に作成できますがS3サービスの中で固有のIDでなければなりません。外部からアクセスする場合にも使われます(bucketname.s3.amazonaws.comやs3.amazonaws.com/bucketname/)。 階層構造は持たず、アイテム(ファイル)をキーで格納するという形になっています。

 アイテム(ファイル)

そのままファイルのことです。ファイルにはキー、持ち主、アクセス権の属性があります。キーはバケット内で一意となり、ファイル名のようなものとして扱います。

使いはじめるために・基本的な操作

 基本

Amazon Web Serviceのアカウントを必要とします
Searchなどと共通のアレです。その辺は探せばたくさん出てくると思うので取得については割愛します。
APIだけでの提供なのでツールを必要とする
そのままですが、あくまでWebアプリケーションなどのためのストレージサービスなので、APIだけの提供となり、標準ではFTPやWebDAVのような扱いやすい形にはなっていません(ダウンロードは公開してあればWebブラウザでダウンロード可能です)。そのため別途アプリケーションを必要としますが、必要であればアプリケーションを自作することも出来ます。

 サインアップ

  • Web Services のページにアクセス ( http://www.amazon.com/gp/browse.html?node=3435361 )
  • 左サイドメニュー「Browse Web Services」→「Amazon Simple Storage Service」
  • 右の「Sign Up For Web Service」をクリック
  • アレコレ書いてサインアップ

 使うための情報を得る(AccessKey とか)

  • 最初の Web Services のページにアクセスする
  • 右上の「Your Web Services Account」にカーソルを合わせるとポップアップが表示される
  • 「View Access Key Identifiers」をクリック
  • Access KeyとSecuret Keyを取得できる

 どのぐらい使っていくら課金されているのかを見る

  • 最初の Web Services のページにアクセスする
  • 右上の「Your Web Services Account」にカーソルを合わせるとポップアップが表示される
  • 「Account Activity」をクリック
  • 「Usage Chages」のところに「Amazon Simple Storage Service」があるのでじっくり見る

 何で何をどのぐらい使ったのかをCSV/XMLで取得する

  • 最初の Web Services のページにアクセスする。
  • 右上の「Your Web Services Account」にカーソルを合わせるとポップアップが表示される
  • 「Usage Report」をクリック
  • 「Service」ドロップダウンから「Amazon Simple Storage Service」を選択
  • 条件を指定してダウンロード

ツール

 Amazon S3 Bucket Browser in C#

http://developer.amazonwebservices.com/connect/entry.jspa?externalID=372&categoryID=47

バケツブラウザ。作ったり削除したり出来る。でもファイルは殆ど扱えないです。

 S3 Backup

http://www.maluke.com/s3man/

GUIで操作できるバックアップを目的としたツール。

 #Sh3ll

http://jroller.com/page/silvasoftinc/Weblog?catname=%2F%23Sh3ll

CLI(コマンドライン)的に扱えるツール。C#製。もともとはjSh3ll。

 rSh3ll

http://rubyforge.org/projects/rsh3ll/

jSh3llのRuby版。UNIX系とか向け。

 s3sync

http://developer.amazonwebservices.com/connect/thread.jspa?threadID=10116&tstart=0

Perlで書かれた同期ツール。S3::AWSAuthConnectionを必要とします。なにそれ。

 s3sync.rb

http://s3.amazonaws.com/ServEdge_pub/s3sync/s3sync.tar.gz (README.txt)

s3syncのRuby版。

 Backup Manager

http://www.backup-manager.org/

Linuxとかで動くバックアップツール。0.7.3 以降で S3 をサポートしています。

 JungleDisc

http://jungledisk.com/

S3をWebDAVに見せかけるプロクシ。Windows、Mac OS X、Linux版がある。

でもWindowsのはなんだかうまく動きませんでした。

s3sync.rb を使う

README.txtを読めば大体のことが書いてありますが、折角なのでまとめておきます。

アーカイブをダウンロードして展開します。

次にとりあえず必要な環境変数を何らかの方法でセットします。必要な環境変数は以下の二つです。

AWS_ACCESS_KEY_ID
Access Key ID
AWS_SECRET_ACCESS_KEY
Secret Access Key

例えばいずれは繰り返し実行することを考え、シェルスクリプトを作成して、

#!/bin/sh

AWS_ACCESS_KEY_ID='AccessKey'
AWS_SECRET_ACCESS_KEY='SecretAccessKey'

export AWS_SECRET_ACCESS_KEY
export AWS_ACCESS_KEY_ID

ruby s3sync.rb -option

などとします。 最初は

ruby s3sync.rb $@

としていてそのシェルスクリプトを使って試行錯誤すると良いのかも。

 いろいろ

-n
dry-run(実際に処理は行わない)
-r
ディレクトリを再帰的に処理する
-v
処理内容を表示

 アップロード

data ディレクトリとそれ以下を bucketname という bucket の /backup/ にコピーする

s3sync -v -r /path/to/data bucketname:/backup/

 ダウンロード

bucketname という bucket の /backup/ にある data ディレクトリの内容をローカルにコピーする

s3sync -v -r bucketname:/backup/data/ /path/to/data

/backup/data/の最後のスラッシュは重要。/path/to/data ディレクトリに/backup/dataの中身が展開されます。

Mac OS X で使う

  • JungleDiskをダウンロードする
  • JungleDiskMonitorを起動
  • 「Access Key ID」と「Secret Access Key」を入力し、「OK」をクリック
  • 「Configuration Complete」というメッセージボックスでインストラクションを表示するかどうか聞かれるので「Yes」をクリック
  • 「Jungle Disk Help」というウィンドウの中の説明に「For the address, type: http://localhost:2667/ 」とあるのでアドレスをコピーしておく
  • Finderの「移動」から「サーバへ接続」を選ぶ
  • 「サーバアドレス」にさっき表示されたアドレスをペーストして「接続」をクリック
  • Finderに「localhost」が表示されたらできあがり

マウントできたらあとは普通にFinderでファイル操作を行えるようになります。

なお作成したbucketとアイテムの権限はprivateとなっているので、そのままでは外からは読めません。

*Sh3llを使って対話的に操作する

以下は #Sh3ll で説明しますが、jSh3llやrSh3llなどでも共通だと思われます。

 ログイン

#Sh3ll> host s3.amazonaws.com
Host = 's3.amazonaws.com'
#Sh3ll> user AccessKey
User = 'AccessKey'
#Sh3ll> pass SecretKey
Password = 'SecretKey'

 bucket

操作する bucket を変更する

#Sh3ll> bucket bucketname
Bucket set to 'bucketname'

bucket を作成する

bucket コマンドで操作する bucket を設定してから。

#Sh3ll> createbucket
Created bucket 'bucketname'

bucket を削除する

bucket コマンドで操作する bucket を設定し、さらに中身を全て削除してから。

#Sh3ll> deletebucket
Deleted bucket 'bucketname'

存在する bucket を一覧する

#Sh3ll> listbuckets
bucketname - 2006/11/19 0:30:30
bucketname2 - 2006/11/19 0:30:30

 ファイル

以下、基本的に bucket コマンドで操作する bucket を設定してから実行します。

bucket にファイルをアップロードする

#Sh3ll> putfile itemname test.txt
Stored item 'bucketname/itemname'

bucket にローカルディレクトリからまとめてファイルをアップロードする

#Sh3ll> putdir dirname
Stored item 'bucketname/itemname'
Stored item 'bucketname/itemname2'
Stored item 'bucketname/itemname3'

ディレクトリを作成できるわけではないので注意。

bucket のファイルを一覧する

#Sh3ll> list
Item list for bucket 'bucketname'
key=itemname, owner=username, size=100 bytes, last modified=2006/11/19 4:07:57
key=itemname2, owner=username, size=100 bytes, last modified=2006/11/19 4:07:57

この username は AWS を使ったときの Nickname?

bucket からファイルを削除する

#Sh3ll> delete itemname
Deleted 'bucketname/itemname'

bucket からファイルをまとめて削除する

#Sh3ll> deleteall

特定のプレフィックスを持つファイル(item*のような感じに)を消したい場合には

#Sh3ll> deleteall item
Deleted 1 item(s), could not delete 0 item(s)

とするとkeyがitemで始まるファイルが削除されます。

bucket からファイルをダウンロードする

#Sh3ll> getfile itemname gaogao.txt
Got item 'bucketname/itemname' as 'gaogao.txt'

 閲覧権限

bucket の閲覧権限を変更する

#Sh3ll> setacl bucket bucketname public-read
Set ACL for bucket 'bucketname' to public-read
private
自分のみ
public-read
誰でも閲覧可能(Web経由で)
public-read-write
authenticated-read

ファイル(アイテム) の閲覧権限を変更する

#Sh3ll> setacl item itemname public-read
Set ACL for item 'itemname' to public-read

権限は bucket と同じ。

アップロードしつつ権限を設定する

#Sh3ll> putfilewacl itemname test.txt public-read

ディレクトリからアップロードしつつ権限を設定する

#Sh3ll> putdirwacl dir public-read