【Amazon RDS】AWS CLI で DBスナップショットからリストアする

2017.09.14

はじめに

今回は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など今回使用したコマンドはたくさんのオプションがありますのでドキュメントも合わせてご参照ください。

参考URL