話題の記事

Amazon DLMが東京に上陸してEBSのライフサイクル管理が簡単になりました

2018.08.17

大栗です。

先日発表された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時間ごとにスナップショットを取得するスケジュールが設定可能です。

サービスの詳細はこちらを御覧ください。

【新サービス】EBSスナップショットのライフサイクルを自動化するAmazon DLMが登場!

今回のリージョンの拡張により、以下のようになりました。一般の商用リージョンではパリだけ対応していないようです。

リージョン 対応
米国東部 (バージニア北部)
米国東部 (オハイオ) ◯ <- New
米国西部 (北カリフォルニア) ◯ <- New
米国西部 (オレゴン)
アジアパシフィック (ムンバイ) ◯ <- New
アジアパシフィック (ソウル) ◯ <- New
アジアパシフィック (シンガポール) ◯ <- New
アジアパシフィック (シドニー) ◯ <- New
アジアパシフィック (東京) ◯ <- New
カナダ (中部) ◯ <- New
EU (フランクフルト) ◯ <- New
EU (アイルランド)
EU (ロンドン) ◯ <- New
EU (パリ)
南米 (サンパウロ) ◯ <- New

やってみた

前回の記事ではManagement Consoleで設定を実行したので、今回はAWS-CLIで試してみます。

【新サービス】EBSスナップショットのライフサイクルを自動化するAmazon DLMが登場!

前提として東京リージョンで実施します。

初めにDLM実行用のデフォルトのIAM Roleを作成します。もし作成済みの場合は何も表示されずに終了します。

$ 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

toky-dlm.json

{
   "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 作成したポリシーファイル
$ 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"
}

以下の様の作成したライフサイクルポリシーを確認します。

$ 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個あります。

$ 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ボリュームでスナップショットが取得されています。

$ 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のアップデートが進み自身の要件を満たすようになったら乗り換えると良いと思います。