Amazon DLMが東京に上陸してEBSのライフサイクル管理が簡単になりました
大栗です。
先日発表されたAmazon Data Lifecycle Manager (Amazon DLM)が東京リージョンを含む11リージョン拡張して全14リージョンとなったのでレポートします。
Amazon Data Lifecycle Manager Regional Expansion
Amazon Data Lifecycle Manager (Amazon DLM)
Amazon Data Lifecycle Manager (Amazon DLM)を使用するとEBSのバックアップであるスナップショットの作成、保存、削除を自動化できます。
- 定時バックアップをスケジュールして貴重なデータを保護します。
- 監査人または社内のコンプライアンスが要求する期間バックアップを保持できます。
- 古いバックアップを削除してストレージコストを削減します。
Amazon DLMのスケジュールは指定したタグの値が設定されているEBSを対象にスナップショットを取得します。そして、12時間または24時間ごとにスナップショットを取得するスケジュールが設定可能です。
サービスの詳細はこちらを御覧ください。
今回のリージョンの拡張により、以下のようになりました。一般の商用リージョンではパリだけ対応していないようです。
| リージョン | 対応 |
|---|---|
| 米国東部 (バージニア北部) | ◯ |
| 米国東部 (オハイオ) | ◯ <- New |
| 米国西部 (北カリフォルニア) | ◯ <- New |
| 米国西部 (オレゴン) | ◯ |
| アジアパシフィック (ムンバイ) | ◯ <- New |
| アジアパシフィック (ソウル) | ◯ <- New |
| アジアパシフィック (シンガポール) | ◯ <- New |
| アジアパシフィック (シドニー) | ◯ <- New |
| アジアパシフィック (東京) | ◯ <- New |
| カナダ (中部) | ◯ <- New |
| EU (フランクフルト) | ◯ <- New |
| EU (アイルランド) | ◯ |
| EU (ロンドン) | ◯ <- New |
| EU (パリ) | ✕ |
| 南米 (サンパウロ) | ◯ <- New |
やってみた
前回の記事ではManagement Consoleで設定を実行したので、今回はAWS-CLIで試してみます。
前提として東京リージョンで実施します。
初めにDLM実行用のデフォルトのIAM Roleを作成します。もし作成済みの場合は何も表示されずに終了します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | $ aws dlm create-default-role{ "Role": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": "sts:AssumeRole", "Sid": "", "Effect": "Allow", "Principal": { "Service": "dlm.amazonaws.com" } } ] }, "RoleId": "ABCDEFGHIJKLMNOPQRSTU", "CreateDate": "2018-08-16T19:24:35Z", "RoleName": "AWSDataLifecycleManagerDefaultRole", "Path": "/", "Arn": "arn:aws:iam::123456789012:role/AWSDataLifecycleManagerDefaultRole" }, "RolePolicy": { "Version": "2012-10-17", "Statement": [ { "Action": [ "ec2:CreateSnapshot", "ec2:DeleteSnapshot", "ec2:DescribeVolumes", "ec2:DescribeSnapshots" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:*::snapshot/*", "Effect": "Allow" } ] }} |
次にライフサイクルのポリシーの設定を設定します。ポリシーをファイルとして作成します。
| 項目 | 設定値 | 備考 |
|---|---|---|
| ターゲットボリュームのタグ | DLM:blog-tokyo | DLMタグにblog-tokyoが設定されている |
| スケジュール名 | BlogSchedule1 | |
| スナップショットへ付与するタグ | Blog:DLM-Tokyo | BlogタグにDLM-Tokyoを設定する |
| スナップショットの取得頻度 | 12時間 | 頻度は12時間か24時間が設定可能です |
| スナップショット取得開始時刻 | 20:00 | UTCの設定です。 |
| 保持世代数 | 3 | 設定可能最大数は1000 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | { "ResourceTypes": [ "VOLUME" ], "TargetTags": [ { "Key": "DLM", "Value": "blog-tokyo" } ], "Schedules":[ { "Name": "BlogSchedule1", "TagsToAdd": [ { "Key": "Blog", "Value": "DLM-Tokyo" } ], "CreateRule": { "Interval": 12, "IntervalUnit": "HOURS", "Times": [ "20:00" ] }, "RetainRule": { "Count":3 } } ]} |
上記で作成したポリシーファイルを使用してポリシーを以下のように作成します。実行するとポリシーIDが表示されます。
| 項目 | 設定値 | 備考 |
|---|---|---|
| 説明 | My tokyo policy | |
| 状態 | ENABLED | |
| 実行ロールARN | arn:aws:iam::123456789012:role/AWSDataLifecycleManagerDefaultRole | create-default-roleコマンドで作成したIAM Role |
| ポリシーファイル | file://toky-dlm.json | 作成したポリシーファイル |
1 2 3 4 | $ aws dlm create-lifecycle-policy --description "My tokyo policy" --state ENABLED --execution-role-arn arn:aws:iam::123456789012:role/AWSDataLifecycleManagerDefaultRole --policy-details file://toky-dlm.json --region ap-northeast-1{ "PolicyId": "policy-1a2b3c4d5e6f7g8h9"} |
以下の様の作成したライフサイクルポリシーを確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | $ aws dlm get-lifecycle-policy --policy-id policy-1a2b3c4d5e6f7g8h9 --region ap-northeast-1{ "Policy": { "Description": "My tokyo policy", "DateCreated": "2018-08-16T19:41:40+0000", "State": "ENABLED", "ExecutionRoleArn": "arn:aws:iam::123456789012:role/AWSDataLifecycleManagerDefaultRole", "PolicyId": "policy-1a2b3c4d5e6f7g8h9", "DateModified": "2018-08-16T19:41:40+0000", "PolicyDetails": { "ResourceTypes": [ "VOLUME" ], "TargetTags": [ { "Value": "blog-tokyo", "Key": "DLM" } ], "Schedules": [ { "TagsToAdd": [ { "Value": "DLM-Tokyo", "Key": "Blog" } ], "RetainRule": { "Count": 3 }, "CreateRule": { "Interval": 12, "IntervalUnit": "HOURS", "Times": [ "20:00" ] }, "Name": "BlogSchedule1" } ] } }} |
スナップショットの対象ボリュームを確認します。DLMタグにblog-tokyoが設定されているボリュームを確認すると3個あります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | $ aws ec2 describe-volumes --filters "Name=tag:DLM,Values=blog-tokyo" --region ap-northeast-1{ "Volumes": [ { "AvailabilityZone": "ap-northeast-1c", "Attachments": [], "Tags": [ { "Value": "blog-tokyo", "Key": "DLM" } ], "Encrypted": false, "VolumeType": "standard", "VolumeId": "vol-01a23b45c67d89e01", "State": "available", "SnapshotId": "snap-01a23b45c67d89e01", "CreateTime": "2018-01-23T05:30:55.922Z", "Size": 8 }, { "AvailabilityZone": "ap-northeast-1c", "Attachments": [], "Tags": [ { "Value": "blog-tokyo", "Key": "DLM" } ], "Encrypted": false, "VolumeType": "standard", "VolumeId": "vol-02a23b45c67d89e01", "State": "available", "SnapshotId": "snap-02a23b45c67d89e01", "CreateTime": "2018-01-23T05:53:42.554Z", "Size": 8 }, { "AvailabilityZone": "ap-northeast-1c", "Attachments": [], "Tags": [ { "Value": "blog-tokyo", "Key": "DLM" }, { "Value": "DBClient", "Key": "Name" } ], "Encrypted": false, "VolumeType": "gp2", "VolumeId": "vol-03a23b45c67d89e01", "State": "available", "Iops": 300, "SnapshotId": "snap-03a23b45c67d89e01", "CreateTime": "2018-08-07T02:39:11.645Z", "Size": 100 } ]} |
DLMで設定したした時刻から一定時間たった後にスナップショットを確認します。対象の3ボリュームでスナップショットが取得されています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | $ aws ec2 describe-snapshots --filters "Name=tag:Blog,Values=DLM-Tokyo" --region ap-northeast-1{ "Snapshots": [ { "Description": "Created for policy: policy-1a2b3c4d5e6f7g8h9 schedule: BlogSchedule1", "Tags": [ { "Value": "BlogSchedule1", "Key": "aws:dlm:lifecycle-schedule-name" }, { "Value": "DLM-Tokyo", "Key": "Blog" }, { "Value": "policy-1a2b3c4d5e6f7g8h9", "Key": "aws:dlm:lifecycle-policy-id" } ], "Encrypted": false, "VolumeId": "vol-01a23b45c67d89e01", "State": "completed", "VolumeSize": 8, "StartTime": "2018-08-16T20:07:09.000Z", "Progress": "100%", "OwnerId": "123456789012", "SnapshotId": "snap-01a23b45c67d89e01" }, { "Description": "Created for policy: policy-1a2b3c4d5e6f7g8h9 schedule: BlogSchedule1", "Tags": [ { "Value": "DLM-Tokyo", "Key": "Blog" }, { "Value": "policy-1a2b3c4d5e6f7g8h9", "Key": "aws:dlm:lifecycle-policy-id" }, { "Value": "BlogSchedule1", "Key": "aws:dlm:lifecycle-schedule-name" } ], "Encrypted": false, "VolumeId": "vol-02a23b45c67d89e01", "State": "completed", "VolumeSize": 8, "StartTime": "2018-08-16T20:07:09.000Z", "Progress": "100%", "OwnerId": "123456789012", "SnapshotId": "snap-02a23b45c67d89e01" }, { "Description": "Created for policy: policy-1a2b3c4d5e6f7g8h9 schedule: BlogSchedule1", "Tags": [ { "Value": "DLM-Tokyo", "Key": "Blog" }, { "Value": "BlogSchedule1", "Key": "aws:dlm:lifecycle-schedule-name" }, { "Value": "policy-1a2b3c4d5e6f7g8h9", "Key": "aws:dlm:lifecycle-policy-id" } ], "Encrypted": false, "VolumeId": "vol-03a23b45c67d89e01", "State": "completed", "VolumeSize": 100, "StartTime": "2018-08-16T20:07:10.000Z", "Progress": "100%", "OwnerId": "123456789012", "SnapshotId": "snap-03a23b45c67d89e01" } ]} |
さいごに
Amazon DLMによるEBSスナップショットのスケジューリングは様々な環境で必要となるため各々で同じようなものを作成していると思います。クラスメソッドでもソンナコトモアロウカト (通称ソンナコ) というツールがあります。個別の要件がある場合は自前でツールを改修していくのも良いと思うのですが、今後のAWSのアップデートに追随し続けていくのは大変です。DLMのアップデートが進み自身の要件を満たすようになったら乗り換えると良いと思います。