皆様こんにちは。
今回はCLIを利用して高可用性アーキテクトの構築をしていきます。
この記事ではCLIよりDLMでライフサイクルポリシーの作成を行います。
このブログはCLIによるライフサイクルポリシーの作成をする上での知識を記事としてまとめ再確認し、皆様と共有するため作成します。

1.高可用性アーキテクト構築目次

目次はこちら

2.DLMとは

Amazon Data Lifecycle Manager を使用して、EBS スナップショットと EBS-backed AMI の作成、保持、削除を自動化できます。スナップショットと AMI 管理を自動化すると、次のことができるようになります。
・定期的なバックアップスケジュールを実施して貴重なデータを保護する。
・定期的に更新できる標準化された AMI を作成する。
・監査担当者または社内のコンプライアンスが必要とするバックアップを保持する。
引用:Amazon Data Lifecycle Manager

ライフサイクルポリシー

ライフサイクルポリシーはEBS又はEC2をターゲットに指定し、設定したスケジュールに合わせてスナップショットの作成、保持、削除を自動で行います。

今回はEBSのスナップショットの作成、保持、削除を自動で行いたいため、Amazon Data Lifecycle Managerでライフサイクルポリシーを作成します。

類似サービスとしては一元化されたクラウドバックアップサービスの「AWS Backup」があげられます。

3.フロー図

file
スナップショットの作成、保持、削除を自動化する上でのフローは以下になります。

  1. DLM用のAWS管理ポリシーがアタッチされているデフォルトのIAMロールを作成します。
  2. ターゲットやスケジュールの設定がされている構成ファイルを作成します。
  3. 上記で作成したIAMロール、構成ファイルを利用してライフサイクルポリシーを作成します。

4.ライフサイクルポリシー作成

それではDLM利用しスナップショットの作成、保持、削除の自動化の設定を始めていきます。

4-1.DLM用のIAMロール作成

まず今回使用するDLM用のAWS管理ポリシーがアタッチされているデフォルトのIAMロールを作成します。
作成には以下のコマンドを使用します。
入力

aws dlm create-default-role

出力(作成済みの場合、何も出力されません)

{
    "RolePolicy": {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "ec2:CreateSnapshot",
                    "ec2:CreateSnapshots",
                    "ec2:DeleteSnapshot",
                    "ec2:DescribeInstances",
                    "ec2:DescribeVolumes",
                    "ec2:DescribeSnapshots",
                    "ec2:EnableFastSnapshotRestores",
                    "ec2:DescribeFastSnapshotRestores",
                    "ec2:DisableFastSnapshotRestores",
                    "ec2:CopySnapshot",
                    "ec2:ModifySnapshotAttribute",
                    "ec2:DescribeSnapshotAttribute"
                ],
                "Resource": "*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "ec2:CreateTags"
                ],
                "Resource": "arn:aws:ec2:*::snapshot/*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "events:PutRule",
                    "events:DeleteRule",
                    "events:DescribeRule",
                    "events:EnableRule",
                    "events:DisableRule",
                    "events:ListTargetsByRule",
                    "events:PutTargets",
                    "events:RemoveTargets"
                ],
                "Resource": "arn:aws:events:*:*:rule/AwsDataLifecycleRule.managed-cwe.*"
            }
        ]
    },
    "Role": {
        "Path": "/",
        "RoleName": "AWSDataLifecycleManagerDefaultRole",
        "RoleId": "xxxxx",
        "Arn": "arn:aws:iam::xxxxx:role/AWSDataLifecycleManagerDefaultRole",
        "CreateDate": "2022-05-29T11:04:42+00:00",
        "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Sid": "",
                    "Effect": "Allow",
                    "Principal": {
                        "Service": "dlm.amazonaws.com"
                    },
                    "Action": "sts:AssumeRole"
                }
            ]
        }
    }
}

「AWSDataLifecycleManagerDefaultRole」という名前のIAMロールが新規作成されます。
IAMロールにはDLM用のAWS管理ポリシーがアタッチされており、信頼されたエンティティとしてDLMが指定されています。

これで今回のライフサイクルポリシーで使用するIMAロールの作成ができました。

4-2.構成ファイルの作成

次にライフサイクルポリシー作成時に利用する構成ファイル(ターゲットやスケジュールの情報を含むもの)を、自前にJSON形式で作成します。

ファイル名:dlmpolicy.json
{
    "ResourceTypes": [
        "VOLUME"
    ],
    "TargetTags": [
        {
            "Key": "Name",
            "Value": "umemoto-wordpress-1"
        },
        {
            "Key": "Name",
            "Value": "umemoto-wordpress-2"
        }
    ],
    "Schedules":[
        {
            "Name": "DailySnapshots",
            "CopyTags": true,
            "CreateRule": {
                "Interval": 24,
                "IntervalUnit": "HOURS",
                "Times": [
                    "12:00"
                ]
            },
            "RetainRule": {
                "Count":3
            }
        }
    ]
}

構成ファイルの設定は以下の通りです。

  • ResourceTypes:"VOLUME"又は"INSTANCE"を選択します、今回はEBSを直接指定するので"VOLUME"を入力しています。
  • TargetTags:EBSに設定したタグを入力し、スナップショット作成のターゲットとして指定しています。
  • Schedules:スケジュールの設定を含んでいます。
  • Name:説明を入力。
  • CopyTags:ターゲットのタグをスナップショットにも反映するかの選択です。識別しやすいように"true"で有効化しています。
  • CreateRule:スナップショット作成の間隔などの設定を含んでいます。
  • Interval:IntervalUnitで時間単位にしているため、24時間毎にスナップショットが作成されます。
  • IntervalUnit:"HOURS"に設定しています。
  • Times:日本時間で午後9時からスナップショット作成が開始されます。
  • RetainRule:保持ルールの選択です。今回はボリュームごとに保持できるスナップショットの数に上限を決める"Count"を入力しています。
  • Count:保持できるスナップショットの数を3つに設定しています。

これで構成ファイルの作成ができました。

4-3.ライフサイクルポリシーの作成

最後に上記で作成したIAMロール、構成ファイルを利用してライフサイクルポリシーの作成を行います。

作成には、[aws dlm create-lifecycle-policy]コマンドを使用します。

使用するオプション 設定値 説明
--description "WordpressServer-Snapshot" 説明を入力します
--state ENABLED ライフサイクルポリシーを作成時に有効化します
--execution-role-arn arn:aws:iam::xxxxx:role/AWSDataLifecycleManagerDefaultRole IAMロールのARNを指定しています
--policy-details file://C:\policies\dlmpolicy.json 構成ファイルのパスを指定しています
--tags Name=umemoto-DLM タグを設定しています

入力

aws dlm create-lifecycle-policy `
    --description "WordpressServer-Snapshot" `
    --state ENABLED `
    --execution-role-arn arn:aws:iam::xxxxx:role/AWSDataLifecycleManagerDefaultRole `
    --policy-details file://C:\policies\dlmpolicy.json `
    --tags Name=umemoto-DLM

出力


{
    "PolicyId": "policy-xxxxx"
}

これでライフサイクルポリシーを作成できました。

5.検証

作成したライフサイクルポリシーが正常に動作するかの検証をしていきましょう。

ライフサイクルポリシー作成から3日後、マネージメントコンソールのスナップショット一覧からスナップショットが計6つ作成されているか確認してみましょう。

file
今回作成したライフサイクルポリシーからスナップショットが自動作成されていることを確認できました。

さらに1日時間を置き、古いものが自動で削除されるかの確認をします。

file

5/29作成のスナップショットが自動で削除されていることを確認できました。

6.感想

DLMは比較的楽にEBSのスナップショットの自動作成をできて便利だと思いました。
次回もよろしくお願いします。

7.参照

AWS CLI Command Reference – dlm
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/dlm/index.html

Last modified: 2022-06-22

Author