RDSコンソールからとAWS backupからのAuroraクラスターリストア時の挙動の違い

## はじめに

DX 技術本部の yu-yama@sra です。

AWS 環境で DB(Aurora)のバックアップ・リストアを検証した際に、
[AWS Backup](https://aws.amazon.com/jp/backup/) で復旧ポイントからリストアする時の**挙動が思っていたのと違った**のでここに記します。

## TL;DR

AWS Backup からリストアするとインスタンスが作成されないのでそのままではDBにアクセスできません。RDS コンソールからリストアしましょう

## Aurora クラスターを AWS Backup の復元ジョブにて復旧ポイントからリストアする場合の挙動
- AWS backup のコンソールから復元する場合
![awsbackupからクラスターを復元2020-12-04_14h45_48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/f343d6dd-5dd2-1bc8-10aa-a540a4b0cc10.png)

- クラスターは作成されるのだが、0インスタンスとなってしまう。
![0インスタンス_2020-12-04_15h38_50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/b0091e56-0967-35cf-80ed-15cfdffef20c.png)

- DBクラスターのエンドポイント作成ステータスはずっと作成中のまま．．．
  もちろんDBにはアクセスできない。
![エンドポイント作成中のまま_2020-12-04_15h40_45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/1f4f6c85-1446-0276-9c84-449da3855113.png)

- これはどういう状況かというと、DB クラスターのみが作成され、クラスターのプライマリインスタンスやレプリカインスタンスが作成されていない状態[^1]になります[^2]。
![インスタンスが作成されない_AuroraArch001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/c2b93275-34fd-6a87-d036-ef4a580a6e2f.png)
[Amazon Aurora DB クラスター \- Amazon Aurora](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/Aurora.Overview.html)

- **リストアを行うと復旧ポイント時点での状態で新規にクラスターが立ち上がり、DBアクセスできる状態になっていることを期待していました。**
 
### この状態からDBアクセスするためにやること

- インスタンスがないのでインスタンスを作成する必要があります。
- マネジメントコンソールの現在の動作として、 **RDSコンソールからプライマリインスタンスを追加する操作を実施できない**ため、AWS CLI の `create-db-instance` などの API にてクラスターに対して DB インスタンスを追加します。

参考：[Amazon Aurora DB クラスターの作成 \- Amazon Aurora](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/Aurora.CreateInstance.html)

> コンソールを使用して DB クラスターを作成する場合、Amazon RDS は自動的に使用する DB クラスターのプライマリインスタンス (ライター) を作成します。AWS CLI を使用して DB クラスターを作成する場合、使用する DB クラスターのプライマリインスタンスを明示的に作成する必要があります。プライマリ インスタンスは、DB クラスターで作成される最初の DB インスタンスです。
> 
> DB クラスターのプライマリインスタンスを作成するには、`create-db-instance` AWS CLI コマンドを呼び出します。`--db-cluster-identifier` オプション値として DB クラスターの名前を含めます。
> 
> Linux、macOS、Unix の場合:
> `aws rds create-db-instance --db-instance-identifier sample-instance --db-cluster-identifier sample-cluster --engine aurora-postgresql --db-instance-class db.r4.large`
> Windows の場合:
> `aws rds create-db-instance --db-instance-identifier sample-instance --db-cluster-identifier sample-cluster --engine aurora-postgresql --db-instance-class db.r4.large`

- インスタンスを作成することで、**やっと**DBにアクセスできる状態になります。

## Aurora クラスターを RDS コンソールにて DB スナップショットから DB クラスターをリストアした場合の挙動

- AWS backupで取得したスナップショットはRDSコンソールからも参照できるので「RDS-スナップショット-バックアップサービス-対象のスナップショットを選択-スナップショットを復元」と復元する

![RDSコンソールからクラスターを復元2020-12-04_14h45_48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/65010db8-298e-a95e-8152-7da2888c1457.png)

- インスタンスが作成された状態で新規にクラスターが立ち上がる[^3]。
![インスタンスが作成されている_2020-12-04_17h37_36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/49bb28ea-2ccb-2140-c999-6074b94950ce.png)

-  DBアクセスできる状態になっています。
  ![AuroraArch001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/bbe44bbb-44d7-9ee3-38c8-d00ac4b87fc0.png)

# まとめ

AWS backupでバックアップの一元管理できるようになったが、リストアの仕様が各サービスのコンソールと違う恐れがあるため、AWS backup でリストアする際は要確認。

[^1]: クラスターボリュームは復旧している
[^2]: AWSサポートに確認したところ、仕様とのことでした
[^3]: インスタンスも自動で作成されています