EC2のバックアップ3手法の比較

EC2のバックアップ（スナップショット）を自動で取得する場合、以下の3手法があります。

- Amazon Event Bridge
- Amazon Data Lifecycle Manager
- AWS Backup

調べる限りは **AWS Backup** を推す声が多かったですが、自分で試すのが一番だと思い、一通り試してみました。

# Amazon Event Bridge
まずはAmazon Event Bridgeを使用します。昔はCloudWatch Eventsというサービスを使用していましたが、今のAmazonの推奨はEvent Bridgeのようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/d629af34-9a88-6938-c31b-958e6de3dc53.png)
定期実行するには、ルールタイプにスケジュールを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/b2e767d2-b773-0650-d501-b3454c922e58.png)
Cron式で取得する時間を指定します。Cron式が正しく指定されていると、以後10回のトリガー日の欄にバックアップされる日時が羅列されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/bb5730cb-9154-4a01-b192-19e3f4601cee.png)
ターゲットタイプを**AWSのサービス**とし、ターゲットに**EBS作成スナップショット**を選択、ボリュームIDを入力します。
IAMロールは、CloudWatch Events時代は手動で作成する必要がありましたが、EventBridgeでは本画面から自動で作成してくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/f087fc13-46d2-9c40-7d3b-8b5e9ecbbd05.png)
あとは、タグをつけて作成するだけです。指定した時間になると、スナップショットが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/2d333bbd-0c67-f83f-fcac-439f8eb9c12d.png)
注意点としては、上記で指定したタグが、EBSスナップショットに自動で付与されるわけではないという点です。

# Amazon Data Lifecycle Manager
Event Bridgeでは自動でバックアップを作成できましたが、削除は実施できません。そこで、次は自動で世代管理まで行ってくれる Data Lifecycle Manager を使用してみます。
Data Lifecycle Managerでは、タグを指定して、そのタグを持つボリューム・インスタンスに対してスナップショットを取得します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/b5668a23-b9b9-763a-b47f-61b207ded159.png)
テストなので、1時間ごとにスナップショットを取得し、1世代のみ残すようにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/4c2cbed3-42ff-211f-fc75-d2d01e8a1e95.png)
DLMの設定が完了したら、ボリュームにタグ付けを忘れないようにしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/5939c116-84b7-21fe-53ae-626b38b679e7.png)
スナップショットの作成は、公式ドキュメントによると指定時刻より1時間以内に開始されます。

> 最初のスナップショット作成オペレーションは、指定された開始時刻から 1 時間以内に開始されます。その後に続くスナップショット作成オペレーションは、スケジュールされた時刻の 1 時間以内に開始されます。
[引用元：スナップショットのライフサイクルの自動化][1]

指定した時刻の約30分後にスナップショットが保存されていることが確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/49b9cc79-445f-9751-fb65-a2cbde481b54.png)
数時間後再度確認すると、スナップショットの保存時刻が書き換わっており、新しいものが作成されて古いものが削除されていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/b1f2e2c2-f708-81eb-a134-0c02fc7baa44.png)

# AWS Backup
最後はAWS Backupです。AWS Backupは、**バックアッププランの作成**と**リソースの割り当て**の2段階で設定する必要があります。

### バックアッププランの作成
EC2だけでなく、他のさまざまなサービスを横断的にバックアップするサービスなので、設定項目が多いです。バックアップの開始時刻（画面中のバックアップウインドウの開始時間）は、指定時刻より8時間以内に開始がデフォルト値となっていますが、変更すれば1時間以内にすることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/92e82a2a-8bfb-9a29-1d89-15831a69cead.png)

### リソースの割り当て
バックアッププランの作成後は、リソースを割り当てます。すべてのEC2を指定することもできますが、今回はテスト用のEC2のみ設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/57019c47-e655-47ad-68dd-0790d2b10c1e.png)

### バックアップ結果の確認
数日後にバックアップされているか確認します。AWS Backupを利用すると、バックアップがAMIで作成されるようです。15:30にバックアップするように設定しましたが、設定時刻から20～30分後にバックアップが行われていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/bab42a53-49a8-9529-cb65-070e745d51ae.png)

# まとめ
ここまで紹介したバックアップ方式3種を表にまとめると以下になります。

| | Event Bridge | Data Lifecycle Manager | AWS Backup |
|:--|:-:|:-:|:-:|
| **バックアップの時刻指定** | ○ | △(1時間以内) | △(1時間以内) |
| **バックアップ頻度** | 最短1分 | 最短1時間 | 最短1日 |
| **バックアップの世代管理** | × | ○ | △(一定日数経過後の削除のみ) |
| **バックアップ対象の指定** | EBSのボリュームID | EBS・EC2に付与されているタグ | 全て or リソースID・タグ |
| **EC2以外のバックアップ** | × | × | ○ |

私が考えた各サービスの使い分けは以下です。

#### Event Bridge
基本的には、 **Data Lifecycle Manager** か **AWS Backup** を利用するのが扱いやすそうですが、整合性確保のためにスナップショット取得前に自動でサービスを終了させ、取得後に自動で起動するようにしたいというような場面では、cron式で時刻指定ができる **Event Bridge** が使いやすいと思います。（但し、スナップショットの管理に課題が発生しますが）

#### Data Lifecycle Manager
EC2内でバックアップが完結するのであれば、設定項目も少ない **Data Lifecycle Manager** が使いやすいと思います。最短1時間ごとの高頻度バックアップにも対応し、タグの管理のみでバックアップを決められるのが便利です。

#### AWS Backup
EC2以外のサービスも含め、まとめてバックアップを管理したい場合は、 **AWS Backup** 一択です。また、すべてのEC2インスタンスに対してバックアップを実行するように設定が可能であるため、一度設定しておけばインスタンスが追加された際も(タグ等を付与することなく)バックアップ対象にできるのは魅力的ではないかと思います。

<br><br>

どのサービスにも、一長一短があるように感じたので、上手く使い分けていきたいと思います。

[1]:https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/snapshot-ami-policy.html