EC2内の仮想マシン をスナップショットでバックアップする !!!バックアップ http://d.hatena.ne.jp/rx7/20100606/p1 基本的には、上記スクリプトをぱくる。 以下参考スクリプト #!/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 !!参考スクリプトを元にバックアップ環境を作成 !注意点 {{word ボリュームIDがベタ書きなので、リストア等でボリュームIDが変わったらバックアップのボリュームIDも書きなおす必要あり!!!,red}} !環境変数設定ファイル /root/bin/envEC2 export JAVA_HOME="/etc/alternatives/java_sdk" export EC2_HOME="/root/tools/ec2-api-tools" export EC2_PRIVATE_KEY="/root/.ec2/pk-xxxxxxxxx.pem" export EC2_CERT="/root/.ec2/cert-xxxxxxxxx.pem" export EC2_URL="http://ec2.ap-northeast-1.amazonaws.com" export PATH="${PATH}:${EC2_HOME}/bin" !バックアップシェル /root/bin/backup.sh #!/bin/bash source /root/bin/envEC2 EBS_VOLUME_ID="vol-hogehoge" EBS_GENERATION_COUNT=10 EBS_DATE=`date +%F_%T` echo ${EBS_DATE} start backup # create Snapshot echo -n "[creating...] " ec2-create-snapshot ${EBS_VOLUME_ID} -d \"${EBS_VOLUME_ID}_${EBS_DATE}_backup\" # create list of snapshots SNAPSHOTS=`ec2-describe-snapshots | grep ${EBS_VOLUME_ID} | sort -k5 -r | awk '{print $2}'` COUNT=1 for SNAPSHOT in ${SNAPSHOTS}; do if [ ${COUNT} -le ${EBS_GENERATION_COUNT} ]; then # keep snapshot echo "[keeping] " ${SNAPSHOT} else # delete snapshot echo -n "[deleting...] " ec2-delete-snapshot ${SNAPSHOT} fi COUNT=`expr ${COUNT} + 1` done echo finish backup !バックアップ実行シェル /root/bin/runBackup.sh #!/bin/bash EBS_LOG=/root/backup.log /root/bin/backup.sh >> ${EBS_LOG} !cron # crontab -l 00 03 * * * /root/bin/runBackup.sh !!!リストア おおまかな手順 +リストア先のインスタンス作成 +リストア先の/dev/sda をDetach する +バックアップのスナップショットからボリュームを作成 +作成したボリュームをリストア先へAtacheする +起動後、バックアップスクリプトのボリュームIDを変更する !!リストア先のインスタンス作成 元インスタンスの元になったイメージ(AMI)や元インスタンスから Launch More Like This を選択するなどして、新しいインスタンスを作成する。 作成先のゾーンを確認する。 !!リストア先の/dev/sda をDetach する リストア先のインスタンスを作成したら、そのインスタンスを停止する。 その後、ボリュームメニューから、リストア先の/dev/sda にアタッチされているボリュームをDetachする。 もう不要なので、そのボリュームは削除して良い。 !!バックアップのスナップショットからボリュームを作成 リストアしたいスナップショットからボリュームを作成する ボリュームの作成先のゾーンをリストア先インスタンスを作成したゾーンと同じにすること。 !!作成したボリュームをリストア先へAtacheする 作成したボリュームをリストア先へAtacheする。 この時、デバイス名を入力できるので /dev/sda とする。 !!起動後、バックアップスクリプトのボリュームIDを変更する リストア先のインスタンスを起動して、無事に動作するか確認する。 {{word ※忘れずにバックアップシェルのバックアップ対象(ボリュームID)を変更する,red}} {{category2 仮想化}}