はじめてのAmazon EC2&S3 ~これからの新サービスの公開の形~
第2回 Amazon S3をバックアップストレージとして使おう
2008年5月20日
初出:WEB+DB PRESS Vol.43(2008年2月23日発売)
ファイル, Access, バックアップアプリケーション, バックアップストレージ, ライブラリ, バックアップ
Amazon S3をバックアップストレージとして使おう
S3は,その信頼性の高さからバックアップ用のストレージとして最適なサービスです。また,S3は各種言語用のライブラリがそろっているので,自分で簡単にアプリケーションを作ることができます。
そこで今回は,Rubyを使って簡単なバックアップアプリケーションを作ってみましょう。
なお,各種言語用のライブラリの情報もAWSトップページから入手できます。
Rubyライブラリaws-s3の導入
RubyからS3を操作するライブラリは複数用意されていますが,今回は「aws-s3」を使ってみます。
aws-s3はRubyGemsで提供されていますので,gemコマンドでインストールします。
# gem install aws-s3
バケット一覧の取得
まずは練習として,バケット一覧を取得するコードを書いてみます(リスト1)。AWS::S3::Base.establish_connectionを使って,Access Key IdとSecret Access Keyを設定しています。
リスト1 ls_buskets.rb
#!/usr/bin/env ruby
require 'rubygems'
require 'aws/s3'
include AWS::S3
Base.establish_connection!(
:access_key_id => '<Access Key Id>',
:secret_access_key => '<Secret Access Key>'
)
p Service.buckets
AWS::S3::Service.bucketsでバケット一覧が取得できるので,それを表示してみます。
$ ruby ls_buskets.rb
[#<AWS::S3::Bucket:0x4371c8 @attributes={"name"=>"webdbpress", "creation_date"=>Mon Jan 07 17:53:37 UTC 2008}, @object_cache=[]>]
ファイル一覧の取得
もう一つ練習として,指定したバケットのファイル一覧を取得するコードを書いてみます(リスト2)。
リスト2 ls_webdbpress.rb
#!/usr/bin/env ruby
require 'rubygems'
require 'aws/s3'
include AWS::S3
Base.establish_connection!(
:access_key_id => '<Access Key Id>',
:secret_access_key => '<Secret Access Key>'
)
bucket = Bucket.find('webdbpress')
bucket.objects.each do |object|
puts object.key
end
$ ruby ls_webdbpress.rb yun_3263.jpg
このように,非常に直感的にS3の情報を扱うことができます。
ファイルの保存
ではいよいよバックアップアプリケーションを作りましょう。
S3へのファイルの保存も簡単です。S3Objectクラスを通じてファイル名とバケット名を指定すると,ファイルがアップロードされます。
リスト3は,対象ディレクトリをtarコマンドで圧縮したあと,S3Objectクラスを通じてS3へファイルを送るバックアップソフトです。20行程度の短いスクリプトですが,これを定期的に走らせることで,大事なデータをS3に保存することができます。
リスト3 s3_backup.rb
#!/usr/bin/env ruby
require 'rubygems'
require 'aws/s3'
require 'tempfile'
include AWS::S3
Base.establish_connection!(
:access_key_id => '<Access Key Id>',
:secret_access_key => '<Secret Access Key>'
)
bucket_name = 'webdbpress'
folder = '/Users/masuidrive/tmp/webdbpress-ec2'
tempfile = Tempfile.open(bucket_name)
tempfile.close
system "tar", "cfz", tempfile.path, folder
key = '%s.tar.gz' % Time.now.strftime("%Y%m%d%H%M%S")
S3Object.store(key, tempfile.open, bucket_name)
puts "Backup to %s/%s", bucket_name, key
このスクリプトを実行してみましょう。ちょっと時間が経つと,バックアップ後のファイル名が表示されます。
$ ruby backup_s3.rb Backup to webdbpress/20080108050937.tar.gz
これが実際に保存されているか,S3Foxで確認してみましょう(図10)。ちゃんとファイルができていますね。これをダウンロードして解凍すると,バックアップで指定した内容が保存されています。
バックアップメディアの管理は難しいものですが,S3を使うと,手軽に低価格で安全性の高いバックアップを行えます。安全なバックアップ環境が見つかっていない方はぜひ試してみてください。
はじめてのAmazon EC2&S3 ~これからの新サービスの公開の形~
- 第4回 自分用のイメージファイル(AMI)を作ろう
- 第3回 Amazon EC2でサーバを立てよう
- 第2回 Amazon S3をバックアップストレージとして使おう
- 第1回 仮想マシンレンタルサービスAmazon EC2、大容量ストレージサービスAmazon S3を使ってみよう


