Amazon Data Lifecycle Manager (Amazon DLM) を（自分でも）やってみた。

# Amazon Data Lifecycle Manager (Amazon DLM) とは？

```
[公式ドキュメントより]

Amazon Data Lifecycle Manager (Amazon DLM) を使用して、Amazon EBS ボリュームをバックアップする
スナップショットの作成、保持、削除を自動化できます。スナップショット管理を自動化すると、次のことが可能になります。
　
・ 定期的なバックアップスケジュールを実施して貴重なデータを保護する。
・ 監査担当者または社内のコンプライアンスが必要とするバックアップを保持する。
・ 古いバックアップを削除してストレージコストを削減する。

Amazon CloudWatch Events と AWS CloudTrail のモニタリング機能と組み合わせることで、
Amazon DLM は EBS ボリューム用の完全バックアップソリューションを追加コストなしで提供します。
```

以前は、LambdaやCLIで実装するか、サードパーティ製品を利用する方法が多かったのですが
（取得は、CloudWatch Eventsでも可能でしたが、世代管理が出来ず、、むむむ）
Amazon DLMに、置き換えることで、運用が軽減出来そうです。

# 利用方法
## 取得編（コンソール利用）
### 0. 対象EBSに、タグをつけます。
WebとDBサーバがある想定です。それぞれに、「DLM」タグをつけています。
Valueを分けているのは、" Policy＝タグの Value "のため、WebとDBで時間や周期などを分けたい場合は、タグの Value を分ける必要があります。

|![amazon-dlm07.png](https://qiita-image-store.s3.amazonaws.com/0/212868/eaed7517-cda7-a679-f448-810cec5ed66a.png)|
|:--:|


### 1. Data Lifecycle Manager を開きます。
EC2 > ELASTIC BLOCK STORE > Lifecycle Manager へ進みます。

|![amazon-dlm01.png](https://qiita-image-store.s3.amazonaws.com/0/212868/ab213f46-2c6d-0bf4-450c-0058249a04d0.png)|
|:-:|

### 2. Policy を作成します。
「Create Snapshot Lifecycle Policy」を選択し、画面に設定内容を入力していきます。

#### 設定前
|![amazon-dlm02.png](https://qiita-image-store.s3.amazonaws.com/0/212868/84524c00-b46f-6647-3386-950049dcdbf6.png)|
|:-:|
|![amazon-dlm03.png](https://qiita-image-store.s3.amazonaws.com/0/212868/26673300-d08c-fc64-e911-2c6787c53384.png)|

##### 設定項目
| 項目名| 入力| 備考|
|:----------:|:-----------------------------------|:--------------------------------|
| Description | Policyの説明| ここ以外ではどこにも利用されない|
| Target volumes with tags | Backupするvolumeを識別するリソースタグ| 事前に対象volume にタグ付けしておく必要がある<br>一つのポリシーに対して、ユニークである必要があります。|
| Schedule name | バックアップスケジュールの名前| 取得したsnapshot の説明欄に利用される|
| Create snapshots every n Hours | ポリシーの実行間隔 (時間単位)。サポートされている値は 12 と 24 です。| |
| Snapshot creation start time | ポリシーの実行時刻。<br>ポリシーの実行は、スケジュールした時刻から 1 時間以内に開始されます。| **UTC**なので気をつけます|
| Retention rule | 各ボリュームに保持するスナップショットの最大数。<br>サポートされている範囲は 1 ～ 1000 です。<br>この上限に達すると、新しいスナップショットの作成時に最も古いスナップショットが削除されます。| |
| Tag created snapshots | 作成したスナップショットに適用するリソースタグ。<br>これらのタグは、Amazon DLM によって適用されるタグに加えて付けられます。| 「Name」タグもここで入力すれば反映されます|
| IAM role | スナップショットを作成、削除、記述し、ボリュームを記述する<br>アクセス許可のある IAM ロール。<br>AWS からデフォルトロール AWSDataLifecycleManagerDefaultRole が提供されます。<br>または、カスタム IAM ロールを作成することもできます。| デフォルトだと「AWSDataLifecycleManagerDefaultRole」という名前のロールが作成されます|
| Policy status after creation| [Enable policy] (ポリシーの有効化) を選択すると、次のスケジュールした時刻にポリシーが実行されます。<br>ポリシーが実行されないようにするには、[Disable policy] (ポリシーの無効化) を選択します。| |

#### 設定後
|![amazon-dlm04.png](https://qiita-image-store.s3.amazonaws.com/0/212868/91c0ce8e-3ca4-6cbc-7ed0-f7b058975425.png)|
|:--:|
|![amazon-dlm05.png](https://qiita-image-store.s3.amazonaws.com/0/212868/13b44232-d08b-d2cf-2a77-34ad40812078.png)|

|![amazon-dlm06.png](https://qiita-image-store.s3.amazonaws.com/0/212868/26b27e9f-7b3b-a35c-eb3f-63fbaecfa7f5.png)|
|:--:|


## 結果確認編
### Snapshot一覧から確認
上段は、手動で取ったSnapshotで、下段が、DLMで取得したSnapshotです。

|![amazon-dlm09.png](https://qiita-image-store.s3.amazonaws.com/0/212868/d49727fe-2c52-3189-cb3b-77d403aa7ca9.png)|
|:--:|

### CloudTrail から確認
エラーコードも記載されるので、Snapshot取得に失敗した場合には有効かと思います。
https://docs.aws.amazon.com/ja_jp/dlm/latest/APIReference/CommonErrors.html

|![amazon-dlm11.png](https://qiita-image-store.s3.amazonaws.com/0/212868/4964e673-7863-ec6c-119a-49540e6a870b.png)|
|:--:|


### CloudWatch Eventsで通知
- CloudWatch > CloudWatch Events > ルール へ進みます。

```
[こういう雰囲気の設定をします（個人的には failed だけでいい）]

{
  "source": [
    "aws.ec2"
  ],
  "detail-type": [
    "EBS Snapshot Notification"
  ],
  "detail": {
    "event": [
      "createSnapshot"
    ],
    "result": [
      "failed",
      "succeeded"
    ]
  }
}
```

|![amazon-dlm08.png](https://qiita-image-store.s3.amazonaws.com/0/212868/3e54437e-dd07-d091-51e8-38fda7e09fbd.png)|
|:--:|

- （SNSは事前に作成済）イベントが発生した場合に以下のようなメールが通知されます。

|<img width="524" alt="amazon-dlm10.png" src="https://qiita-image-store.s3.amazonaws.com/0/212868/99744938-9a1e-b570-6aab-e946055d7775.png">|
|:--:|


# 参考サイト
- 公式ドキュメント
    - https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/snapshot-lifecycle.html
    - https://docs.aws.amazon.com/ja_jp/dlm/latest/APIReference/Welcome.html

- クラスメソッドさん
    - https://dev.classmethod.jp/cloud/aws/amazon-dlm-ebs-snapshot-lifecycle/
    - https://dev.classmethod.jp/cloud/aws/amazon-dlm-tokyo-region/