# タイトル長い。
Amazon EBS(Elastic Block Store)では、スナップショット機能と呼ばれる、ボリューム(ディスク)を瞬時にバックアップする機能をAPI経由で簡単に使うことができます。
参考
- 最近発表されたストレージサービスAmazon EBS(Elastic Block Store)をEC2から利用する - 元RX-7乗りの適当な日々
- Amazon EBSを活用してデータをバックアップしてみよう ~Amazon EC2/S3環境構築のすべて~ (1/6):CodeZine(コードジン)
そんな便利機能なEBSスナップショット君ですが、そのバックアップデータの保存先はAmazon S3ということで、S3の利用容量無制限!という素晴らしい恩恵を受けちゃっていて、当然、バックアップデータの世代管理は使い手自身に委ねられています。
ということで、指定したEBSボリュームに対して、スナップショット(バックアップ)取得しつつ、世代管理(指定世代数に基づいて古いデータを削除)もするようなスクリプトを昔に書いたので、それとなく公開します。
これからAmazon EC2で運用するのだー、という方には間違いなく役に立つはず。
前提
- ec2-api-toolsが動くこと
- EC2のX.509証明書が手元(サーバ)にあること
スクリプトの中身
以下のような感じです。
#!/bin/sh export JAVA_HOME=/usr export EC2_HOME=/opt/ec2-api-tools export PATH=${PATH}:/bin:/usr/bin:${EC2_HOME}/bin # ----- config AWS_PRIVATE_KEY=/etc/ec2_keys/pk.pem AWS_CERTIFICATE=/etc/ec2_keys/cert.pem EBS_VOLUME_ID="vol-ead8e482" EBS_GENERATION_COUNT=3 AWS_REGION=`curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed -e 's/[a-z]$//'` # ----- # スナップショットの取得 echo -n "[creating...] " ec2-create-snapshot --private-key ${AWS_PRIVATE_KEY} --cert ${AWS_CERTIFICATE} --region ${AWS_REGION} ${EBS_VOLUME_ID} # スナップショットの一覧を取得 SNAPSHOTS=`ec2-describe-snapshots --private-key ${AWS_PRIVATE_KEY} --cert ${AWS_CERTIFICATE} --region ${AWS_REGION} | grep ${EBS_VOLUME_ID} | sort -k5 -r | awk '{print $2}'` # 世代保管分の調整(過去スナップショットのクリア) COUNT=1 for SNAPSHOT in ${SNAPSHOTS}; do if [ ${COUNT} -le ${EBS_GENERATION_COUNT} ]; then # 保管対象なのでN/A echo "[keeping] " ${SNAPSHOT} else # 保管対象外なので削除 echo -n "[deleting...] " ec2-delete-snapshot --private-key ${AWS_PRIVATE_KEY} --cert ${AWS_CERTIFICATE} --region ${AWS_REGION} ${SNAPSHOT} fi COUNT=`expr ${COUNT} + 1` done
このスクリプトは、サーバが自分自身に接続されているEBSボリュームに対して取得することを想定した簡単な実装例です。
- 上部のPATHや設定部分は、適宜書き換えるようにしてください。
- ec2-api-toolsやX.509証明書は、サーバに配置の上、設定のファイル・ディレクトリパスを書き換えてください。
- "EBS_VOLUME_ID"には、取得したいEBSボリュームのIDを入れてください。
- 複数のEBSボリュームを対象にしたいときは、適当にループでまわすように書き換えてください。
- "EBS_GENERATION_COUNT"には、保持しておきたい世代数を入れてください。
- "AWS_REGION"の部分は、上記では自動でサーバ自身が動いているRegionが入るようにしています。
- EC2外のサーバや、別Regionのサーバ(EC2インスタンス)から実行したい場合は、手動でRegion("us-west-1"など)を入れるようにしてください。
(あまり書きたくないけど)注意書き
あと、このスクリプトを使って何かあっても(バックアップが取れてなかった!とか)責任は取れませんので、きちんとテストした上で、そして自己責任でご利用ください。よろしくお願いします。
まとめ
クラウドAMAZON EC2/S3のすべて (ITpro BOOKs)
- 作者: 並河祐貴,安達輝雄,ITpro/日経SYSTEMS
- 出版社/メーカー: 日経BP社
- 発売日: 2009/11/05
- メディア: 単行本
- 購入: 4人 クリック: 372回
- この商品を含むブログ (18件) を見る