【AWS CloudFormation】Amazon Data Lifecycle ManagerでEC2のEBS自動バックアップ取得する方法

記事タイトルとURLをコピーする

こんにちは!技術4課のイーゴリです。

本件の記事では、CloudFormationでAmazon Data Lifecycle Managerを使って、EC2のEBSを自動バックアップする方法をご紹介させて頂きます。

Data Lifecycle Managerの概要説明

Amazon Data Lifecycle Managerは、EBS スナップショットと EBS-backed AMI の作成、保持、削除を自動化するために使用されます。EBS スナップショットを使用することでデータが保護されるのとストレージコストの削減ができます。

本件記事の目標

下記の要件の通りAmazon Data Lifecycle Managerを設定したいと思います。

Windows Server

項目 DLM設定値 EBSタグ
Cドライブ(50GB) 毎日0:00(日本時間)にEBSのスナップショットを取得する。
7日間分のバックアップを保管する。
7日間過ぎたら、一番古い日付のバックアップから削除されるようにする。
キー: Backup
値: Daily
Dドライブ(200GB) 毎日0:00(日本時間)にEBSのスナップショットを取得する。
7日間分のバックアップを保管する。
7日間過ぎたら、一番古い日付のバックアップから削除されるようにする。
キー: Backup
値: Daily

CloudFormation

新規作成(Data Lifecycle ManagerのIAMロールが存在しない場合)

Data Lifecycle ManagerのIAMロールを作成

Data Lifecycle ManagerのIAMロール(例:「AWSDataLifecycleManagerDefaultRole」)が存在しない場合、下記のようにIAMロールを作成します。

    IAMRole:
        Type: "AWS::IAM::Role"
        Properties:
            RoleName: "AWSDataLifecycleManagerDefaultRole"
            AssumeRolePolicyDocument:
              Version: "2012-10-17"
              Statement:
                - Effect: "Allow"
                  Principal:
                    Service:
                      - "dlm.amazonaws.com"
                  Action:
                  - "sts:AssumeRole"
            Path: "/service-role/"
            ManagedPolicyArns:
              - "arn:aws:iam::aws:policy/service-role/AWSDataLifecycleManagerServiceRole"

上記のYAMLを下記のYAMLで使います。

Data Lifecycle Managerのライフサイクルポリシーの作成

ロールの作成が終わったので、次はData Lifecycle Managerのライフサイクルポリシーを作成し、上記で作成したロールを貼り付けます。

AWSTemplateFormatVersion: "2010-09-09"
Description: ""
Resources:
    DLMLifecyclePolicy:
        Type: "AWS::DLM::LifecyclePolicy"
        Properties:
            Description: "DailyDLM"
            ExecutionRoleArn: !Sub "arn:aws:iam::${AWS::AccountId}:role/service-role/AWSDataLifecycleManagerDefaultRole"
            State: "ENABLED"
            PolicyDetails: 
                PolicyType: "EBS_SNAPSHOT_MANAGEMENT"
                ResourceTypes: 
                  - "VOLUME"
                ResourceLocations: 
                  - "CLOUD"
                TargetTags: 
                  - 
                    Key: "Backup"
                    Value: "Daily"
                Schedules: 
                  - 
                    Name: "DailySnapshots"
                    CopyTags: true
                    CreateRule: 
                        Location: "CLOUD"
                        Interval: 24
                        IntervalUnit: "HOURS"
                        Times: 
                          - "15:00"
                    RetainRule: 
                        Count: 7
                        Interval: 0
    IAMRole:
        Type: "AWS::IAM::Role"
        Properties:
            RoleName: "AWSDataLifecycleManagerDefaultRole"
            AssumeRolePolicyDocument:
              Version: "2012-10-17"
              Statement:
                - Effect: "Allow"
                  Principal:
                    Service:
                      - "dlm.amazonaws.com"
                  Action:
                  - "sts:AssumeRole"
            Path: "/service-role/"
            ManagedPolicyArns:
              - "arn:aws:iam::aws:policy/service-role/AWSDataLifecycleManagerServiceRole"

上記のYAMLをCloudFormationで実施します。

結果の確認

IAMロールの確認

Data Lifecycle Managerのライフサイクルポリシーの確認

YAMLの説明については記事の一番下に記載致します。

Data Lifecycle ManagerのIAMロールが存在している場合

Data Lifecycle Managerのライフサイクルポリシーの作成

Data Lifecycle ManagerのIAMロール(例:「AWSDataLifecycleManagerDefaultRole」)が存在している場合、下記のようにCloud Formationのテンプレートを作成します。

AWSTemplateFormatVersion: "2010-09-09"
Description: ""
Resources:
    DLMLifecyclePolicy:
        Type: "AWS::DLM::LifecyclePolicy"
        Properties:
            Description: "DailyDLM"
            ExecutionRoleArn: !Sub "arn:aws:iam::${AWS::AccountId}:role/service-role/AWSDataLifecycleManagerDefaultRole"
            State: "ENABLED"
            PolicyDetails: 
                PolicyType: "EBS_SNAPSHOT_MANAGEMENT"
                ResourceTypes: 
                  - "VOLUME"
                ResourceLocations: 
                  - "CLOUD"
                TargetTags: 
                  - 
                    Key: "Backup"
                    Value: "Daily"
                Schedules: 
                  - 
                    Name: "DailySnapshots"
                    CopyTags: true
                    CreateRule: 
                        Location: "CLOUD"
                        Interval: 24
                        IntervalUnit: "HOURS"
                        Times: 
                          - "15:00"
                    RetainRule: 
                        Count: 7
                        Interval: 0
  • 「AWSDataLifecycleManagerDefaultRole」の代わりに適切なData Lifecycle ManagerのIAMロール名を指定してください。

結果の確認

YAMLの説明

[詳細]タブ

  • 「PolicyType: "EBS_SNAPSHOT_MANAGEMENT"」がデフォルト設定値のため、書いても書かなくても問題ないです。
  • 「EBS-backed AMI ポリシー」の場合、「EBS_SNAPSHOT_MANAGEMENT」から「IMAGE_MANAGEMENT」に変更し、「ResourceTypes」を「INSTANCE」に変更するなどの必要があります。

[スケジュール]タブ

  • 「Times: - "15:00"」→UTC時間のため、日本時間の0:00となります。
  • 「CopyTags: true」→EBSのタグをコピーしたいため、Trueを設定しました。
  • 「Interval: 24」→24時間ごとにスナップショットを取得したいため、「24」を入力しました。

対象EBSにタグを付与

上記の設定だけだと、EBSの指定がないため、対象EC2の必要なEBSを選択します。

対象EBSボリュームを選択し、[タグ]タブを開き、[タグを管理]をクリックします。

私のCloud Formationテンプレートだと、Data Lifecycle Managerのトリガーとしてはタグのキーが「Backup」、タグの値が「Daily」のため、下記の画像の通り設定し、[保存]をクリックします。

                TargetTags: 
                  - 
                    Key: "Backup"
                    Value: "Daily"

動作確認

3日後、結果を見ましたところ、3日間分の2つのEBSボリュームの3世代のバックアップがあります。

Data Lifecycle Managerの特徴

  • 例えば0:00を指定した場合、スナップショットの取得の処理はちょうど0:00に始まるのではなく、下記の画像の通り0:00台に取得されます。

以上、御一読ありがとうございました。

イーゴリ (記事一覧)

クラウドインテグレーション部・技術4課・エンジニア

特にTerraform(自動化)、ネットワーク系、VDI、Windows Serverに興味があります

日本国内旅行・ドライブが好きです