はじめてのAmazon EC2&S3 ~これからの新サービスの公開の形~

第2回Amazon S3をバックアップストレージとして使おう

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⁠。ちゃんとファイルができていますね。これをダウンロードして解凍すると、バックアップで指定した内容が保存されています。

図10 バックアップの確認
図10 バックアップの確認

バックアップメディアの管理は難しいものですが、S3を使うと、手軽に低価格で安全性の高いバックアップを行えます。安全なバックアップ環境が見つかっていない方はぜひ試してみてください。

おすすめ記事

記事・ニュース一覧