AWS Backupで取得したバックアップからEBS/RDS/S3を復元してみた

# はじめに
お疲れ様です。yuki_inkです。
以下の記事の続きとして、取得したバックアップからの復元をやってみます。

https://qiita.com/yuki_ink/items/5ce373ad4433e67c82a1

前の記事で、AWS Backupで取得したバックアップは、以下2通りのやり方で確認できました。
1. AWS Backupの画面から「復旧ポイント」として確認
1. 各サービスの画面上で、スナップショットとして確認（EBS・RDS）

であるならば、復元も2通りのやり方でできるのでは？ と考え、やってみました。

# 事前準備
### EBS
セッションマネージャーでEC2「test-1」に接続し、`/tmp` 配下に `bk_test` というファイルを作成しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/b36f65a2-dab7-ecca-f209-5185f5f3e2bb.png)

### RDS
まず、デフォルトで存在するデータベースの一覧を表示します。
```
postgres=> \list
                                                 List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    | ICU Locale | Locale Provider |   Access privileges
-----------+----------+----------+-------------+-------------+------------+-----------------+-----------------------
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |            | libc            |
 rdsadmin  | rdsadmin | UTF8     | en_US.UTF-8 | en_US.UTF-8 |            | libc            | rdsadmin=CTc/rdsadmin+
           |          |          |             |             |            |                 | rdstopmgr=Tc/rdsadmin
 template0 | rdsadmin | UTF8     | en_US.UTF-8 | en_US.UTF-8 |            | libc            | =c/rdsadmin          +
           |          |          |             |             |            |                 | rdsadmin=CTc/rdsadmin
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |            | libc            | =c/postgres          +
           |          |          |             |             |            |                 | postgres=CTc/postgres
(4 rows)

```

そこに、`bk_test` というデータベースを作成しました。
```
postgres=> CREATE DATABASE bk_test;
CREATE DATABASE

postgres=> \list
                                                 List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    | ICU Locale | Locale Provider |   Access privileges
-----------+----------+----------+-------------+-------------+------------+-----------------+-----------------------
 bk_test   | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |            | libc            |
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |            | libc            |
 rdsadmin  | rdsadmin | UTF8     | en_US.UTF-8 | en_US.UTF-8 |            | libc            | rdsadmin=CTc/rdsadmin+
           |          |          |             |             |            |                 | rdstopmgr=Tc/rdsadmin
 template0 | rdsadmin | UTF8     | en_US.UTF-8 | en_US.UTF-8 |            | libc            | =c/rdsadmin          +
           |          |          |             |             |            |                 | rdsadmin=CTc/rdsadmin
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |            | libc            | =c/postgres          +
           |          |          |             |             |            |                 | postgres=CTc/postgres
(5 rows)
```
### S3
S3にもともと置いていた  `test01.txt` を更新し、新しいバージョンをアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/6f64b441-fb72-bfd6-49a3-1ad1d707a539.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/91719a30-d13c-d972-1342-fd0ac7f82bf7.png)



# AWS Backupの画面からの復元
バックアップボールトの画面から復旧ポイントが確認でき、そこから復元もできるのですが、ちょっとごちゃごちゃして見づらいので、今回は「保護されたリソース」の画面から復元していきます。

**▼ バックアップボールトの画面（復旧ポイント）**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/7de7603b-5afa-9a25-b7a5-0ab6c651a7ca.png)

**▼「保護されたリソース」の画面**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/7f5294c9-33f0-0f33-2fc6-cfbe0ef03c44.png)
各リソースごとに復旧ポイントを示してくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/428c389d-094b-6713-756b-d44e90f2c618.png)


### EBS
復元したい時点の「復旧ポイント」を選択し、「復元」ボタンをクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/16b9a91a-9f35-5e23-c3aa-2e83ab234019.png)

各パラメータを埋めていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/9d4cea00-2d0d-12b6-06f0-3d53e1e5cfd7.png)

完了！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/2b9e80da-1115-7e43-f5e4-7dbeb0b357c0.png)

新しいEBSボリュームができていました。
※ボリュームのサイズ間違えた…復元画面でもともとのサイズをデフォルトで表示してほしい💦
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/fb7b9358-c745-d4dc-5cf5-a6b05fa8518f.png)

EC2「test-1」のルートボリュームを新しい方に付け替えて、インスタンスを起動。
`/tmp` 配下を確認すると、先ほど作成したファイルは表示されず、問題なく切り戻しできたようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/ef3a954e-3157-f6d9-df9e-ea22c33f11b8.png)


### RDS
復元したい時点の「復旧ポイント」を選択し、「復元」ボタンをクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/8dbb776d-83fd-f8e5-d64f-16d071b916c4.png)

各パラメータを埋めていきます。
RDSの画面からリストアする雰囲気とほぼ一緒ですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/7f62e091-ee1e-de65-0977-bc5ee52e95da.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/2ab62019-db9a-e76f-cf9b-ca7d8a27d5a9.png)

完了！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/e18db38e-ce7c-1068-202f-d92f10df3bda.png)

RDSの画面からも、新しいインスタンスが確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/ac1c4dfa-f71b-3b6a-7084-feddbba55c5e.png)

「database-1-bk」に接続し、存在するデータベースの一覧を表示すると、先ほど作成した `bk_test` は表示されませんでした。
問題なく切り戻しできたようです。
```
postgres=> \list
                                                 List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    | ICU Locale | Locale Provider |   Access privileges
-----------+----------+----------+-------------+-------------+------------+-----------------+-----------------------
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |            | libc            |
 rdsadmin  | rdsadmin | UTF8     | en_US.UTF-8 | en_US.UTF-8 |            | libc            | rdsadmin=CTc/rdsadmin+
           |          |          |             |             |            |                 | rdstopmgr=Tc/rdsadmin
 template0 | rdsadmin | UTF8     | en_US.UTF-8 | en_US.UTF-8 |            | libc            | =c/rdsadmin          +
           |          |          |             |             |            |                 | rdsadmin=CTc/rdsadmin
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |            | libc            | =c/postgres          +
           |          |          |             |             |            |                 | postgres=CTc/postgres
(4 rows)
```


### S3
復元したい時点の「復旧ポイント」を選択し、「復元」ボタンをクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/3b6700fa-84c7-d6f7-10ee-21c77348d7eb.png)

各パラメータを埋めていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/e4408593-e8f0-bf38-2d5d-9fa5435ca98c.png)


:::note warn
この時、使用するIAMロールに `AWSBackupServiceRolePolicyForS3Restore` が付与されていることを確認しておきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/92864b47-fdb1-d251-c25a-facac92b3a58.png)
:::

「バックアップを復元」ボタンをクリックすると、復元ジョブが走り始めます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/44975795-c650-aae5-649f-141ecb8b0108.png)

おや…？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/c039439e-e309-4839-a372-b293c067cd85.png)

対象のS3バケットのACL有効化を行わないといけないようです。

https://dev.classmethod.jp/articles/note-when-restoring-s3-buckets/

ACL有効化を実施して再度「バックアップを復元」してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/670cd3be-af7a-3591-adb9-262ccf8e9f3e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/79723fb6-6474-afef-5791-0c71fd1f4602.png)

無事完了しました！よかった！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/da1f0806-27af-6dc5-8c5d-afb8143290fc.png)

あれ、特に復元前と変わっていないんだが…？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/809627b7-7bd4-2556-fbb2-377cda62829c.png)

それならばと、オブジェクトをすべて（バージョンを含めて）削除してみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/a14a6bba-969e-4f93-dbe3-2a8c4babe07c.png)

再度「バックアップを復元」すると、なんと、**先ほど消したオブジェクトが復活している！！**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/131d6374-7d37-7fe7-edc6-38af055f582d.png)

:::note info
S3の復旧ポイントへの復元は、「その断面に戻す」というよりかは、「その断面に存在したオブジェクト（バージョン）を復元する」というニュアンスのほうが正しそうです。
誤って消してしまったファイルを戻すときに便利そう。
:::



# 各サービスの画面からの復元
### EBS
以前のスナップショットからボリューム「test1-bk」を作成。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/9ad40ee5-f59d-8b52-b3fa-9fca2a609553.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/2e3ecfac-b68e-377b-c62a-1ca28d5972af.png)

EC2「test-1」のルートボリュームを「test1-bk」に付け替えて、インスタンスを起動。
`/tmp` 配下を確認すると、先ほど作成したファイルは表示されず、問題なく切り戻しできたようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/f6462cc1-f7f8-4cbc-5c1f-56338aaa2417.png)


### RDS
以前のスナップショットから新しいインスタンス「database-1-bk」を作成します。
スナップショットは「バックアップサービス」タブの中に表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/e1f8c390-f07e-1b87-35db-4f460ddc8140.png)

「database-1-bk」に接続し、存在するデータベースの一覧を表示すると、先ほど作成した `bk_test` は表示されませんでした。
問題なく切り戻しできたようです。
```
postgres=> \list
                                                 List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    | ICU Locale | Locale Provider |   Access privileges
-----------+----------+----------+-------------+-------------+------------+-----------------+-----------------------
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |            | libc            |
 rdsadmin  | rdsadmin | UTF8     | en_US.UTF-8 | en_US.UTF-8 |            | libc            | rdsadmin=CTc/rdsadmin+
           |          |          |             |             |            |                 | rdstopmgr=Tc/rdsadmin
 template0 | rdsadmin | UTF8     | en_US.UTF-8 | en_US.UTF-8 |            | libc            | =c/rdsadmin          +
           |          |          |             |             |            |                 | rdsadmin=CTc/rdsadmin
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |            | libc            | =c/postgres          +
           |          |          |             |             |            |                 | postgres=CTc/postgres
(4 rows)
```


### S3
S3の画面から、オブジェクトを過去のバージョンに切り戻す/過去のバージョンのファイルを復元するという操作はできず、**過去のバージョンのファイルをダウンロードすることができるというだけ**のようです。
そのダウンロードしたファイルを再度S3バケットにアップロードし、バージョンを更新することで、「切り戻し」という形になります。

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/RestoringPreviousVersions.html

せっかくなので、旧バージョンを選択してダウンロードするところだけやってみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/776f6e0c-6d8c-a8b5-38ea-d60ee033d510.png)

# 終わりに
前回に引き続き、S3のところで何度か躓いてしまいました…

EBSとRDSの復元に関しては、AWS Backupの画面からも各サービスの画面からもできるということが分かりました。
今まで普通にスナップショットでバックアップを取ってきたという方にとっては、慣れたやり方で復元できるのはうれしいですね！

次回はボールトロック機能について検証してみたいと思います。
最後までお目通しいただき、ありがとうございました。