I’m hungry

おもにAmazonでの衝動買いや技術的な話をぼちぼちと。

EBSボリュームをS3へ定期的バックアップする(AWS)

2011-07-13 08:07:43 | ネットサービス/テクノロジ
本家からaws-sdkがリリースされてよりシンプルなスクリプトにできるようになりました。
新しい方の記事はEBSボリュームをS3へ定期的バックアップする(AWS)※aws-sdk使用版です。


---以下、ちょい古い記事

ここのところ続くAWS関連ネタ。

AWSのEBSボリュームバックアップはAmazon Management Console(以下、AMCと省略)から手動で実行できます。



しかし、AMCでは定期自動バックアップをする手段を提供していません。
ので自動でバックアップしたい場合は自分でなんとかするしかありません。

ググると色々なやり方があるようなのですが、こちらを導入してみました。

[AWS][Ruby] 実践で使えるEBSスナップショット取得スクリプト


※以下はruby,gem,rubygemsあたりは既に入っている前提です

スクリプトを動作させるには以下のgemが必要になります。

  • activesupport (3.0.6)
  • right_aws (2.1.0)
  • right_http_connection (1.3.0)
  • mail (2.2.15)
  • mime-types (1.16) ※mailを入れると自動的に入ります
  • pit (0.0.6)

では実際に使用するスクリプトをダウンロードします。githubにあります。(※なので、gitも必要です)

[sohgoh@dev work]$ git clone https://github.com/interu/management_utilities.git
Cloning into management_utilities...
remote: Counting objects: 55, done.
remote: Compressing objects: 100% (39/39), done.
remote: Total 55 (delta 12), reused 55 (delta 12)
Unpacking objects: 100% (55/55), done.
[sohgoh@dev work]$ ls
install.txt management_utilities
[sohgoh@dev work]$

「management_utilities」というディレクトリができているはず。

[sohgoh@dev work]$ cd management_utilities/
[sohgoh@dev management_utilities]$ ls
aws backup
[sohgoh@dev management_utilities]$ cd aws/
[sohgoh@dev aws]$ ls
manage_snapshot.rb manage_snapshot_spec.rb
[sohgoh@dev aws]$

実行するスクリプトは「manage_snapshot.rb」です。
中身はこんな感じ。
#!/usr/bin/env ruby

require 'rubygems'
require 'right_aws'
require 'active_support/time' ## activesupport v3
require 'pit'

class ManageSnapshot
@@pit = Pit.get('s3', :require => { 'access_key' => '', 'secret_key' => '', 'volume_id' => '', 'owner_id' => '', 'region' => '', 'app_title' => ''})

attr_accessor :access_key, :secret_key, :volume_id, :owner_id, :region, :description, :long_period, :short_period

def self.run
self.new.run
end
--snip--

EBSボリュームのバックアップを取得し、S3上に保存するのでaccess_keyとsecret_keyが必要になります。
が、ソースコードに直接書くのはセキュリティ上微妙なのと複数のボリュームに対してバックアップを行いたい場合不都合になります(manage_snapshot.rbは単一のボリュームしかできないように見える)。

ここでアカウント情報を管理する「pit」を使います。

アカウント情報を管理するコマンド pit


いろいろなサービスのID、パスワードなどの情報をホームディレクトリ配下の「.pit」ディレクトリに
yaml形式で格納し、コマンド一発で設定情報を切り替えすることができます。
で、使い方。pitは環境変数EDITORの設定が必要なので、.bash_profileに設定を記述します。

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
export EDITOR='/usr/bin/emacs'
記述したら「source ~/.bash_profile」で読み込み直します。

[sohgoh@dev ~]$ source ~/.bash_profile
[sohgoh@dev ~]$ env | grep EDITOR
EDITOR=/usr/bin/emacs
[sohgoh@dev ~]$
で、pitの設定を行います。

[sohgoh@dev ~]$ pit set s3
---
s3:
 s3: ebs-backup
 region: ap-northeast-1
 from: alert@gmail.example.com
 volume_id: vol-xxxxxxxx
 owner_id: Me
 to: sohgoh@gmail.example.com
 app_title: ebs backup
 access_key: AWSで発行されたアクセスキー
 secret_key: AWSで発行されたシークレットキー
gmail:
 from: alert@gmail.example.com
 to: me@gmail.example.com
 password: your_password_yeah!

gmailの情報はバックアップに失敗したときにメールを送信するためのものです。
普段使いのアドレスではなく、使い捨て(というか運用のための)アドレスを設定しておくのがオススメ。
アクセスキーとシークレットキーはAMCのトップから「アカウント」タブを選択し、「セキュリティ証明書」をクリックします。

アクセス証明書の欄でキーを作成し、それぞれをコピーしてpitの設定ファイルに記載します。


---
s3:
 s3: ebs-backup
 region: ap-northeast-1
 from: alert@gmail.example.com
 volume_id: vol-xxxxxxxx
 owner_id: Me
 to: sohgoh@gmail.example.com
 app_title: ebs backup
 access_key: QZXCBUM9TRY93P1MAOUF
 secret_key: AMAKeDduwel+M2dln7XlPj59xAjd93Adjwldu
gmail:
 from: alert@gmail.example.com
 to: me@gmail.example.com
 password: your_password_yeah!
※上のキーはダミーです。
これでpitを使ったアカウント情報の設定が完了です。

さて、いよいよバックアップの実行です。

[sohgoh@dev ~]$ cd work/management_utilities/aws/
[sohgoh@dev aws]$ ls
manage_snapshot.rb manage_snapshot_spec.rb
[sohgoh@dev aws]$ ruby manage_snapshot.rb
I, [2011-07-13T22:22:17.295366 #707] INFO -- : New RightAws::Ec2 using shared connections mode
I, [2011-07-13T22:22:17.295947 #707] INFO -- : Opening new HTTPS connection to ap-northeast-1.ec2.amazonaws.com:443
[sohgoh@dev aws]$

はい、これで完了です。AMCで確認してみると

無事スナップショットが取れています。

あとはcronに仕掛けておけば自動バックアップが可能になり、また複数のEBSボリュームをバックアップしたいときは
pitの設定を増やしてスクリプト実行前に pit switch hogehoge するようにしておけば実現できます。

他に過去のスナップショットを自動的に削除する機能もあるようなのですが、とりあえずそれは別のお話、ということで。


Comment    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 海外のいろいろな都市の風景... | TOP | ruby on railsインストールメ... »
最新の画像もっと見る

post a comment

ブログ作成者から承認されるまでコメントは反映されません。

Recent Entries | ネットサービス/テクノロジ