【Amazon RDS】AWS CLI で DBスナップショットからリストアする
はじめに
今回はDBスナップショットからのリストアをAWS CLIで実行する方法をご紹介します。 AWS CLIのバージョンは1.11.145を使用しました。
概要
- 復元したいDBインスタンスと同じ状態にリストアする
- 確認後に元のDBインスタンスを削除する
DBスナップショットからリストア手順
環境変数を設定
export AWS_ACCESS_KEY_ID=****** export AWS_SECRET_ACCESS_KEY=****** export AWS_DEFAULT_REGION=us-west-2
AWSアカウントとIAMユーザーを確認
作業前には必ず確認しましょう
aws sts get-caller-identity
復元したいDBインスタンス情報を取得
db_instance=mydbinstance echo ${db_instance}
aws rds describe-db-instances --db-instance-identifier ${db_instance} > ${db_instance}.json
リストアの実施
復元したいDBインスタンスに合わせて変数を設定
db_new_instance=mynewdbinstance instance_class=db.t2.micro subnet_group=mySubnetgroup snapshot=mySnapshotid echo ${db_new_instance} echo ${instance_class} echo ${subnet_group} echo ${snapshot}
オプションは復元したいDBインスタンスに合わせて選択 AWS CLI Command Reference | restore-db-instance-from-db-snapshot
aws rds restore-db-instance-from-db-snapshot \ --db-instance-identifier ${db_new_instance} \ --db-snapshot-identifier ${snapshot} \ --db-instance-class ${instance_class} \ --db-subnet-group-name ${subnet_group} \ --no-publicly-accessible \ --multi-az
DBインスタンスが利用可能になるまで待つ
AWS CLI Command Reference | db-instance-available
aws rds wait db-instance-available --db-instance-identifier ${db_new_instance}
DBパラメータグループ、セキュリティグループを修正
リストアしたDBインスタンスにはデフォルトのパラメータグループ、セキュリティグループが関連付けられますので修正します。
paramter_group=mydbparametergroup security_group=vpcsecuritygroup echo ${paramter_group} echo ${security_group}
AWS CLI Command Reference | modify-db-instance
aws rds modify-db-instance \ --db-instance-identifier ${db_new_instance} \ --db-parameter-group-name ${paramter_group} \ --vpc-security-group-ids ${security_group} \ --apply-immediately
設定反映のため、DBインスタンスをリブート
AWS CLI Command Reference | reboot-db-instance
aws rds reboot-db-instance \ --db-instance-identifier ${db_new_instance}
DBインスタンスが利用可能になるまで待つ
aws rds wait db-instance-available --db-instance-identifier ${db_new_instance}
新しいDBインスタンス情報を取得
aws rds describe-db-instances --db-instance-identifier ${db_new_instance} > ${db_new_instance}.json
既存のDBインスタンスと復元したDBインスタンスの情報の差異を確認
- DBInstanceIdentifier
- Address InstanceCreateTime
- LatestRestorableTime
- DbiResourceId
- DBInstanceArn
上記の値以外同じになっていれば完了
diff ${db_instance}.json ${db_new_instance}.json
例
$ diff ${db_instance}.json ${db_new_instance}.json 4c4 < "DBInstanceIdentifier": "mydbinstance", --- > "DBInstanceIdentifier": "mynewdbinstance", 11c11 < "Address": "mydbinstance.abcde*******.us-west-2.rds.amazonaws.com", --- > "Address": "mynewdbinstance.abcde*******.us-west-2.rds.amazonaws.com", 16c16 < "InstanceCreateTime": "2017-09-03T06:05:09.731Z", --- > "InstanceCreateTime": "2017-09-03T06:48:12.348Z", 64c64 < "LatestRestorableTime": "2017-09-03T06:35:00Z", --- > "LatestRestorableTime": "2017-09-03T07:00:00Z", 81c81 < "DbiResourceId": "db-RVYFY6********************", --- > "DbiResourceId": "db-5BKZOM********************", 86c86 < "DBInstanceArn": "arn:aws:rds:us-west-2:123456789012:db:mydbinstance", --- > "DBInstanceArn": "arn:aws:rds:us-west-2:123456789012:db:mynewdbinstance",
AZがリストアにより変わっていて同じAZにしておきたい場合には 「--force-failover」オプションをつけてリブートします。
aws rds reboot-db-instance \ --db-instance-identifier ${db_new_instance} \ --force-failover
不要になったDBインスタンスを削除
aws rds delete-db-instance --db-instance-identifier ${db_instance} --skip-final-snapshot
まとめ
AWS CLIでのDBスナップショットからのリストア手順をご紹介しました。 DBスナップショットからのリストアが必要な時に参考になれば幸いです。
注記 ※DBスナップショットから既存のDBインスタンスにリストアすることはできず新しいDBインスタンス名を指定しリストアする必要があります。そのため、DBインスタンスのエンドポイントが変更されるのでエンドポイントにはCNAMEをつけてDNSの切り替えで対応するようにしましょう。 ※Microsoft SQL Server、Oracleでは考慮事項がありますので以下参考URLのドキュメントをご確認ください。 ※restore-db-instance-from-db-snapshotなど今回使用したコマンドはたくさんのオプションがありますのでドキュメントも合わせてご参照ください。