本家からaws-sdkがリリースされてよりシンプルなスクリプトにできるようになりました。
新しい方の記事はEBSボリュームをS3へ定期的バックアップする(AWS)※aws-sdk使用版です。
---以下、ちょい古い記事
ここのところ続くAWS関連ネタ。
AWSのEBSボリュームバックアップはAmazon Management Console(以下、AMCと省略)から手動で実行できます。
しかし、AMCでは定期自動バックアップをする手段を提供していません。
ので自動でバックアップしたい場合は自分でなんとかするしかありません。
ググると色々なやり方があるようなのですが、こちらを導入してみました。
■[AWS][Ruby] 実践で使えるEBSスナップショット取得スクリプト
※以下はruby,gem,rubygemsあたりは既に入っている前提です
スクリプトを動作させるには以下のgemが必要になります。
では実際に使用するスクリプトをダウンロードします。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」です。
中身はこんな感じ。
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 するようにしておけば実現できます。
他に過去のスナップショットを自動的に削除する機能もあるようなのですが、とりあえずそれは別のお話、ということで。
新しい方の記事は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--
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'
[sohgoh@dev ~]$ source ~/.bash_profile
[sohgoh@dev ~]$ env | grep EDITOR
EDITOR=/usr/bin/emacs
[sohgoh@dev ~]$
[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 するようにしておけば実現できます。
他に過去のスナップショットを自動的に削除する機能もあるようなのですが、とりあえずそれは別のお話、ということで。