AWS rds-backup-to-s3
問題
RDSのバックアップをスナップショットだけではなく手元に置かないと安心できないとの意見があったら
ソース
- RDSスナップショットからインスタンスを作成し、それをdumpしてS3へアップする
#!/bin/bash -l
export JAVA_HOME=/usr/lib/jvm/jre
export AWS_BIN=/opt/aws/bin
export PATH=$PATH:$EC2_HOME/bin:$AWS_BIN
export EC2_REGION=ap-northeast-1
Account="aws13"
keypair="/usr/lib/zabbix/externalscripts/key_pair.csv"
#複数アカウントをまとめ管理する場合
while IFS=',' read -r f1 f2 f3
do
if [[ $Account == "$f1" ]]; then
export AWS_ACCESS_KEY_ID="$f2"
export AWS_SECRET_ACCESS_KEY="$f3"
break
fi
done < "$keypair"
INSTANCE=mysql-190501
RDS_SUBDOMAIN=cwtt780wxxxx
VPC_SECURITY_GROUP_IDS=sg-xxxxcd6
DATABASE_NAME=hogedb
DATABASE_USER=mysqladmin
DATABASE_PASS=mysqlpass
BACKUP_DATE=`date '+%Y%m%d'`
YESTERDAY_DATE=`date --date '1 day ago' '+%Y-%m-%d'`
YESTERDAY_DATE_2=`date --date '3 day ago' '+%Y%m%d'`
BK_SNAPSHOT=`aws rds describe-db-snapshots --region=$EC2_REGION |jq '.DBSnapshots[].DBSnapshotIdentifier' --raw-output | grep $INSTANCE-$YESTERDAY_DATE`
_STAT="status.log"
_WORK="/tmp"
_DATE="date +%Y/%m/%d-%H:%M:%S"
#インスタンス起動
echo $BK_SNAPSHOT
aws rds restore-db-instance-from-db-snapshot --db-instance-identifier dumpdb-$INSTANCE-bak --db-instance-class db.t2.micro --db-subnet-group-name 'hogedb-grp' --region=$EC2_REGION --db-snapshot-identifier $BK_SNAPSHOT
#ステータスがavailableになるまで待つ
_SLEEP_TIME=180
sleep 600
for (( i = 0; i < 3; i++ )); do
sleep ${_SLEEP_TIME}
status=`aws rds describe-db-instances --region=ap-northeast-1 --db-instance-identifier dumpdb-$INSTANCE-bak --query "DBInstances[*].DBInstanceStatus" --output text`
echo $status
is_break=false
is_exit=false
case ${status} in
available)
is_break=true
echo ok;;
backing-up)
;;
creating)
;;
deleted)
is_break=false
is_exit=true
;;
deleting)
is_break=false
is_exit=true
;;
failed)
is_break=false
is_exit=true
;;
incompatible-restore)
is_break=false
is_exit=true
;;
incompatible-paraameters)
is_break=false
is_exit=true
;;
modifying)
;;
rebooting)
;;
resetting-master-credentials)
is_break=false
is_exit=true
;;
storage-full)
is_break=false
is_exit=true
;;
*)
is_break=false
is_exit=true
;;
esac
if ${is_break}; then
echo -e "\033[0;35m`${_DATE}` break (${status})\033[0;39m" >> $_WORK/$_STAT
aws rds modify-db-instance --db-instance-identifier dumpdb-$INSTANCE-bak --vpc-security-group-ids $VPC_SECURITY_GROUP_IDS --apply-immediately --region=$EC2_REGION
sleep 180
#もしローカルIPが引けない場合
#DB_HOST=`nslookup dumpdb-$INSTANCE-bak.$RDS_SUBDOMAIN.ap-northeast-1.rds.amazonaws.com 10.0.0.2 |grep "Address: " |cut -f2 -d " " |cut -f 1`
echo "Creating backup of database....."
mysqldump -u$DATABASE_USER -p$DATABASE_PASS -h dumpdb-$INSTANCE-bak.$RDS_SUBDOMAIN.ap-northeast-1.rds.amazonaws.com --opt --single-transaction $DATABASE_NAME --compress --compact |gzip --fast -c > /tmp/dump-$INSTANCE-rds-$BACKUP_DATE.bak.gz
echo "Uploading backup to Amazon S3 bucket....."
aws s3 cp /tmp/dump-$INSTANCE-rds-$BACKUP_DATE.bak.gz s3://rds-backup-aws13
sleep 180
echo "Successfully uploaded backup to S3"
aws rds delete-db-instance --db-instance-identifier dumpdb-$INSTANCE-bak --skip-final-snapshot --region=$EC2_REGION
echo "Deleting backup file(3日以上経過したtempファイルを削除)…"
rm -rf /tmp/dump-$INSTANCE-rds-$YESTERDAY_DATE_2.bak.gz
echo "Deleting backup file(3日以上経過したS3ファイルを削除)…"
aws s3 rm s3://rds-backup-aws13/dump-$INSTANCE-rds-$YESTERDAY_DATE_2.bak.gz
break
fi
if ${is_exit}; then
echo -e "\033[0;31m`${_DATE}` exit 1 (${status})\033[0;39m" >> $_WORK/$_STAT
exit 1
fi
echo -e "\033[0;32m`${_DATE}` sleep ${_SLEEP_TIME} (${status})\033[0;39m" >> $_WORK/$_STAT
done
メモ
#!/bin/bash -l
export JAVA_HOME=/usr/lib/jvm/jre
export AWS_BIN=/opt/aws/bin
export PATH=$PATH:$EC2_HOME/bin:$AWS_BIN
export EC2_REGION=ap-northeast-1
Account="aws13"
keypair="/usr/lib/zabbix/externalscripts/key_pair.csv"
#複数アカウントをまとめ管理する場合
while IFS=',' read -r f1 f2 f3
do
if [[ $Account == "$f1" ]]; then
export AWS_ACCESS_KEY_ID="$f2"
export AWS_SECRET_ACCESS_KEY="$f3"
break
fi
done < "$keypair"
INSTANCE=mysql-190501
RDS_SUBDOMAIN=cwtt780wxxxx
VPC_SECURITY_GROUP_IDS=sg-xxxxcd6
DATABASE_NAME=hogedb
DATABASE_USER=mysqladmin
DATABASE_PASS=mysqlpass
BACKUP_DATE=`date '+%Y%m%d'`
YESTERDAY_DATE=`date --date '1 day ago' '+%Y-%m-%d'`
YESTERDAY_DATE_2=`date --date '3 day ago' '+%Y%m%d'`
BK_SNAPSHOT=`aws rds describe-db-snapshots --region=$EC2_REGION |jq '.DBSnapshots[].DBSnapshotIdentifier' --raw-output | grep $INSTANCE-$YESTERDAY_DATE`
_STAT="status.log"
_WORK="/tmp"
_DATE="date +%Y/%m/%d-%H:%M:%S"
#インスタンス起動
echo $BK_SNAPSHOT
aws rds restore-db-instance-from-db-snapshot --db-instance-identifier dumpdb-$INSTANCE-bak --db-instance-class db.t2.micro --db-subnet-group-name 'hogedb-grp' --region=$EC2_REGION --db-snapshot-identifier $BK_SNAPSHOT
#ステータスがavailableになるまで待つ
_SLEEP_TIME=180
sleep 600
for (( i = 0; i < 3; i++ )); do
sleep ${_SLEEP_TIME}
status=`aws rds describe-db-instances --region=ap-northeast-1 --db-instance-identifier dumpdb-$INSTANCE-bak --query "DBInstances[*].DBInstanceStatus" --output text`
echo $status
is_break=false
is_exit=false
case ${status} in
available)
is_break=true
echo ok;;
backing-up)
;;
creating)
;;
deleted)
is_break=false
is_exit=true
;;
deleting)
is_break=false
is_exit=true
;;
failed)
is_break=false
is_exit=true
;;
incompatible-restore)
is_break=false
is_exit=true
;;
incompatible-paraameters)
is_break=false
is_exit=true
;;
modifying)
;;
rebooting)
;;
resetting-master-credentials)
is_break=false
is_exit=true
;;
storage-full)
is_break=false
is_exit=true
;;
*)
is_break=false
is_exit=true
;;
esac
if ${is_break}; then
echo -e "\033[0;35m`${_DATE}` break (${status})\033[0;39m" >> $_WORK/$_STAT
aws rds modify-db-instance --db-instance-identifier dumpdb-$INSTANCE-bak --vpc-security-group-ids $VPC_SECURITY_GROUP_IDS --apply-immediately --region=$EC2_REGION
sleep 180
#もしローカルIPが引けない場合
#DB_HOST=`nslookup dumpdb-$INSTANCE-bak.$RDS_SUBDOMAIN.ap-northeast-1.rds.amazonaws.com 10.0.0.2 |grep "Address: " |cut -f2 -d " " |cut -f 1`
echo "Creating backup of database....."
mysqldump -u$DATABASE_USER -p$DATABASE_PASS -h dumpdb-$INSTANCE-bak.$RDS_SUBDOMAIN.ap-northeast-1.rds.amazonaws.com --opt --single-transaction $DATABASE_NAME --compress --compact |gzip --fast -c > /tmp/dump-$INSTANCE-rds-$BACKUP_DATE.bak.gz
echo "Uploading backup to Amazon S3 bucket....."
aws s3 cp /tmp/dump-$INSTANCE-rds-$BACKUP_DATE.bak.gz s3://rds-backup-aws13
sleep 180
echo "Successfully uploaded backup to S3"
aws rds delete-db-instance --db-instance-identifier dumpdb-$INSTANCE-bak --skip-final-snapshot --region=$EC2_REGION
echo "Deleting backup file(3日以上経過したtempファイルを削除)…"
rm -rf /tmp/dump-$INSTANCE-rds-$YESTERDAY_DATE_2.bak.gz
echo "Deleting backup file(3日以上経過したS3ファイルを削除)…"
aws s3 rm s3://rds-backup-aws13/dump-$INSTANCE-rds-$YESTERDAY_DATE_2.bak.gz
break
fi
if ${is_exit}; then
echo -e "\033[0;31m`${_DATE}` exit 1 (${status})\033[0;39m" >> $_WORK/$_STAT
exit 1
fi
echo -e "\033[0;32m`${_DATE}` sleep ${_SLEEP_TIME} (${status})\033[0;39m" >> $_WORK/$_STAT
done
さすが今はスナップショットを信用している。っていうかロックオンされてしまって他の選択余地がない。
ソースを捨てるにはもったいなかったので記録と。ご参考まで。
Author And Source
この問題について(AWS rds-backup-to-s3), 我々は、より多くの情報をここで見つけました https://qiita.com/mkawanee/items/1efa2bdb668d40d4a70a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .