Amazon Data Lifecycle ManagerでEC2インスタンスのバックアップを取得する

## はじめに
Amazon Data Lifecycle Managerを利用する事で、EBSボリュームのスナップショット、EBS-backed AMI の作成、保持、削除を自動化する事ができます。
これにより、例えば、EBSスナップショットを毎日取得しつつ、毎週日曜日には週次のシステムバックアップとしてAMIを作成するといったバックアップ運用が簡単に設定できます。

一度ポリシーを作成しておけば、ポリシーでターゲットに指定したタグのキーと値を、EBSやEC2のタグに追加する事で、自動でバックアップが取得できるようになります。

なお、蛇足ではありますが、EBSスナップショット、AMI作成は、EC2インスタンス上で動いているプログラムによっては(RDBなど)、データの整合性が保てない場合があるので、必要に応じて、静止点を取るなどの対処が必要になります。

今回は、EBSスナップショット作成のスケジュール設定、AMI作成のスケジュール設定を行います。

## EBSスナップショット作成のライフサイクルポリシーの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2554521/4633a0f3-12dd-01d8-e6b5-c6d2b02b4603.png)
EC2のライフサイクルマネージャーの画面で、「ライフサイクルポリシーの作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2554521/0f700579-bd7e-fa67-f245-b739096922be.png)
ポリシータイプに、「EBS スナップショットポリシー」を選択し、「次へ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2554521/7c49c9dc-ac1f-25ff-c12e-e9cd06b6cf4e.png)
ターゲットリソースタイプに「ボリューム」を選択し、ターゲットリソースタグに、バックアップ対象とするリソースに付けるタグのキーと値を入力し、「追加」をクリックします。また、ポリシーの説明を入力します。

※この例では、タグのキーに「dlm-daily-ebs-snapshot-enable」、値に「true」を指定しています。

次に、IAMロールの指定をします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2554521/94eef5d8-ff39-80b1-cb1e-ca8cc36d5286.png)
デフォルトロールを選択し、必要に応じてタグ、ポリシーのステータスを設定し、「次へ」をクリックします。

次に、バックアップスケジュールを設定します。1つのポリシーにつき、3つのスケジュールを設定可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2554521/7227788a-0f50-7ca6-46aa-114de4f2bf5a.png)
ここでは、以下のように設定しました。
| 項目 | 設定値 |
|:-|:-|
| スケジュール名 | Daily EBS Snapshot Schedule 1 |
| 頻度 | 毎日 24時間毎 |
| 開始時刻(UTC) | 18:00 (日本時間3:00AM) |
| 保持タイプ | カウント |
| 保持 | 7 |

これにより、毎日日本時間午前3時にターゲットタグで指定したEBSスナップショットが作成され、7日分保持されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2554521/2c1d6d74-ec1b-e545-a9a3-a5516548565b.png)
必要に応じてオプション設定を行います。
BCP対策としてのクロスリージョンコピーや、他アカウントへの共有も設定できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2554521/77b862a1-4657-78d8-84b5-d282ff9c933e.png)
タグ付けで、「ソースからタグをコピー」にチェックを入れておくと、Nameタグなど、スナップショット元のEBSに付けられていたタグがスナップショットにも適用されるため、スナップショットが何のスナップショットかが確認しやすくなり、便利です。

設定が終わったら「ポリシーを確認」をクリックし、設定内容を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2554521/b10ba556-9eb5-404e-fff8-7786893c8bf6.png)
設定内容を確認し「ポリシーを作成」をクリックするとポリシーが作成されます。

ポリシー作成後、CFnテンプレートや手動で、EBSにキー「dlm-daily-ebs-snapshot-enable」、値「true」のタグを付けるようにする事で、ポリシーのスケジュールに従って、対象リソースのEBSスナップショットが作成されるようになります。

:::note warn
ライフサイクルポリシーで指定した開始時刻は、あくまで目安と考えておいた方がよいです。
指定時刻にスナップショットやAMIが作成される事はあまりなく、数分から十数分遅れて開始される事がほとんどです。
:::

## AMI作成のライフサイクルポリシーの作成
AMI作成用のライフサイクルポリシーもEBSスナップショットと同じように設定していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2554521/48e43be7-0bd8-cd7d-6b66-1e8499261cf5.png)
ポリシータイプに、「EBS-backed AMI ポリシー」を選択し、「次へ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2554521/b50813d7-efed-d792-4772-017eeafafee1.png)
AMI作成対象のインスタンスを指定する、タグのキーと値を入力し、「追加」をクリックします。また、ポリシーの説明を入力します。

※この例では、タグのキーに「dlm-weekly-create-ami-enable」、値に「true」を指定しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2554521/78a9aed0-b016-cd72-85c6-851526a7c0c0.png)
デフォルトロールを選択し、必要に応じてタグ、ポリシーのステータスを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2554521/941fc0f2-b1f9-1677-83b9-dc3731a267dc.png)
AMI作成の前に、インスタンスを停止し、作成後起動するようにするかを指定します。

インスタンスを停止せずにAMIを作成した場合、メモリにキャッシュされ、ファイルに永続化されていないデータの整合性がとれず問題が発生する場合や、作成時に開かれていたファイルが壊れるなどの可能性があるため、「ポリシー実行時にインスタンスを再起動」には「はい」を選択し、「次へ」をクリックします。

次に、バックアップスケジュールを設定します。1つのポリシーにつき、3つのスケジュールを設定可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2554521/c4647bbb-6233-9d5b-8a66-b313c9f633f2.png)
この例では、毎週日本時間の日曜日午前4時にAMIを作成し、3世代分保管するスケジュール設定にしています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2554521/2dc8717d-40fa-8781-d95c-83981b89a23c.png)
詳細設定で「ソースからタグをコピー」するなどの設定し、「ポリシーを確認」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2554521/03abb3c0-db61-8e0f-64e0-925077303e2d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2554521/fafbab56-4435-4edc-f54b-8791d8ecf606.png)
設定内容を確認後、「ポリシーを作成」をクリックすると、AMI作成のポリシーが作成されます。

ポリシー作成後、CFnテンプレートや手動で、EC2インスタンスにキー「dlm-weekly-create-ami-enable」、値「true」のタグを付けるようにする事で、ポリシーのスケジュールに従って、対象リソースのAMIが作成されるようになります。

## おわりに
Amazon Data Lifecycle Managerを利用する事で、EBSボリュームのスナップショット、EBS-backed AMI の作成について、まとめてみました。

RDBが動いている環境などでは、バックアップ取得前に静止点をとるなどの考慮が必要ではありますが、設定で簡単にバックアップのスケジュール実行ができ、とても便利なサービスだと思います。