Amazon RDSとAWS Backupで1時間に一回以上スナップショットを取ることは可能なのか

どうもNishiokaです。
今回はRDSのバックアップについて記事にしていこうと思います。
AWS RDSのバックアップではスナップショットを皆さん取られると思いますが、スナップショットは最大で1時間に一度とれるという認識を皆さん持たれていると思います。
なのでトランザクションログを使用しない場合はRPOは1時間となるわけです。

ちなみにRDSのスナップショットはRDS作成時の日次バックアップ設定と、AWS Backupサービスでの設定が可能です。
**では、RDSの方の日次バックアップ設定と、AWS Backupで1回/1時間のスナップショット設定した場合、一日に13回スナップショット取れるってこと？**
という疑問がわきました。
まあだからどうしたって気もしますが、、笑
RDSとバックアップの勉強がてら見ていきましょう

# では検証していきましょう！！

### Amazon RDSを立てる

<手順>
エンジンはMySQLを選択しました。
エンジンバージョンは費用に関係ないので、最新ので作っときましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3873642/9ae38fde-a459-b46a-9f1f-96c50ed629df.png)


今回は無料利用枠を使用するので、可用性と耐久性は選べません。
今回は単一のインスタンスで立てます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3873642/eca6cb02-a241-5801-e683-05d16a3157fd.png)
---
【コラム】
マルチAZクラスターと、マルチAZインスタンスの違いは下記の図の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3873642/ade7d7a5-a786-d3f9-524d-b5a930a99375.png)

また、両者の自動フェールオーバーの比較表も掲載しときます。
**双方とも自動でフェールオーバーをし、RTOは60sのようです。**
<https://aws.amazon.com/jp/rds/features/multi-az/>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3873642/b0547d17-cb08-9b44-b986-fcf176b9485e.png)

---
【作業に戻る】
命名は適当にやって、検証なので認証は自己管理Passで適当に作成しちゃいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3873642/eb89c626-9550-2e51-82e8-0214b5e4f9ad.png)


インスタンスタイプは無料版だと選べず、ストレージ容量は最小で、念のために自動スケーリングはOFFにしておきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3873642/201da4f0-2192-03c0-90ba-fde5c8c2b9b6.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3873642/4c2df532-e19c-9c70-47a4-576041b70b77.png)

それぞれあらかじめ作成していたVPC、セキュリティグループ、サブネットグループへアタッチ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3873642/3ea3c06c-bd7f-7f23-7a36-09b3e3ef5810.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3873642/84924edb-b9b1-d66e-1c99-2af901c2c4f4.png)

**ここでなんと、以前はできなかったAZの指定が再びできるようになっていました！！！**
AWSでは異なるAZ間の通信にお金がかかるので、これは助かります！
https://support.serverworks.co.jp/hc/ja/articles/37798918287385-EC2-%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3-%E3%81%A8RDS-DB-%E3%82%92%E7%95%B0%E3%81%AA%E3%82%8BAZ%E3%81%AB%E9%85%8D%E7%BD%AE%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E5%A0%B4%E5%90%88-%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9%E3%81%AB%E5%BD%B1%E9%9F%BF%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%81%8B
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3873642/a4497cbb-f42c-44f0-4274-0c4adf679b1b.png)

ほんと2週間前まで指定できなかったので、一応またできなくなった時のために、手順書いときますね！

---
●手順
CLIで指定して作成するか、以下の手順でAZの移し替えを行います。
**①一時的にマルチAZで立てる**
**②再起動してフェールオーバー**
**③シングルAZに戻す**

とこんなことするのも面倒だとおもうので、僕ならスナップショットから指定のAZにRDSを立てます！
下記がそのコマンドです！
```
aws rds restore-db-instance-from-db-snapshot \
--db-instance-identifier ＜作成するDBの名前＞ \
--db-snapshot-identifier <スナップショットの名前> \
--availability-zone <指定したいAZ名>
```
---
【作業に戻る】
データベースのテーブルも一緒に作ってしまいます。名前は適当で
DBパラメータグループと、オプショングループも事前に作っとく必要がありますが、今回はここが本題ではないので割愛
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3873642/8ab7eec3-4746-b4b0-1e64-e53116ed4de9.png)

今回はAWS Backupとのバックアップ比較をする検証をしたいため、自動バックアップはonにします。

検証なので暗号化はoff、ログは監査ログのみON、削除保護も外してきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3873642/963bdae0-8f71-6329-bc2a-e182bb35eb09.png)

以上でRDSの作成は終了です。

---
### AWS Backupの設定をする

**バックアップボールトの作成**
新しいボールトを作成
※バックアップボールト：バックアップしたデータを保存するコンテナのことです！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3873642/209f39f0-6e9c-261c-488d-b8b2a56e3da9.png)

適当に名前をつけて、普通のバックアップボールトを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3873642/dd25477f-518c-7a0d-d547-41333931e08c.png)

---
【コラム】
論理的にエアギャップのあるボールトとは、バックアップのコピーのことです。
他のアカウントからバックアップを使用することが可能なため、RTOをより早く、柔軟な対応が可能です。
※アカウントが変わるということは、請求先も変更されるということなので、その点は運用考えないとですかね

---
【作業に戻る】
次にバックアッププランを作成します！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3873642/175d5ff8-a5ba-0641-1fed-0cf0820d44f9.png)

新しいプランで作成します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3873642/ed70137b-1b7b-68ca-2018-8d2b9ec0ebec.png)

次にスケジュールを作成しましょう。各項目はいかの通りです。
バックアップボールト：作成したものを選択
頻度：毎時
※Maxが毎時です
時間内の開始：1時間 
※1時間以内にバックアップが開始しなかったら失敗する
次の時間以内に完了：
※バックアップが開始してから、1日以内にバックアップが完了しなかった場合、その回のバックアップは期限切れでエラーになる。

ここで注意点ですが、**「開始時間」は１日のなかでの初回バックアップが開始される時間の設定です。
したがって、１日に２４回のバックアップを取得したい場合は、「開始時間」を「００時台」で設定しておかないと「００時台～２３時台」の計２４回のバックアップが取得できなくなりますので、注意してください！**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3873642/770ffd3d-9a3a-62d2-40c3-e985c12721ad.png)

ポイントインタイムリカバリは今回なし
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3873642/7ca062d8-4d11-84fb-e343-de692a7e60a0.png)

---
**【コラム】**
ポイントインリカバリについて

・ポイントインリカバリをオンにすると、トランザクションログから復旧が可能になり、RPO5分以内を実現可能です。5分はロールバック分生まれてしまうのは仕方なさそうですね！
※普通のスナップショットなら保持期間は無限ですが、PITRをONにすると最大保持期間は35日みたいです。十分ですね！
対応するサービスは以下のもののみですのでご注意ください
・Aurora
・Amazon RDS
・Amazon S3
・SAP HANA on Amazon EC2

---


【作業に戻る】
では今作ったバックアッププランにリソースの割り当てを行います。
復旧ポイントを呼ばれるやつですね！
ここで指定した割り当て名を使用して、バックアップから復旧するポイントを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3873642/519f4b02-4433-4176-f96c-b4826314933b.png)

で先ほど作成したRDSを指定します！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3873642/3c427f61-e1e0-1414-d019-58fb5e2a7233.png)

以上でAWS Backupの設定は終わりです！あとは一日寝かすだけ、、

---

## 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3873642/a3ff2ffd-02de-f05d-ad87-4efe5adf75fe.png)

やはり、AWS backup側のスナップショットとRDS側のスナップショットはAWS上で同じものであり、
**1回/時間がMaxのようです。**

冒頭にも書いたとおり、これがわかったから何になるねんって感じですが、AWS BackupとRDSをよく知れるいい機会になりました。

少し今回は長かったですが、ありがとうございました。