Data Lifecycle Manager入門 – EBSのスナップショット/AMIを定期的に作成する

Data Lifecycle Manager入門 - EBSのスナップショット/AMを定期的に作成する

Data Lifecycle Manager入門 – EBSのスナップショット/AMIを定期的に作成する

Data Lifecycle Manager(DLM)を使用すると、インスタンスやEBSのバックアップを自動化できます。

Amazon Data Lifecycle Manager を使用して、EBS スナップショットと EBS-backed AMI の作成、保持、削除を自動化できます。

Amazon Data Lifecycle Manager

本ページでは、DLMを使用して、インスタンスのAMIやEBSのスナップショットを定期的に作成します。

構築する環境

Diagram of Introduction to Data Lifecycle Manager - Create EBS Snapshot / AMI periodically.

検証用として、EC2インスタンスおよびEBSを作成します。

上記の2リソースに対して、3種類のDLMポリシーを作成します。

  • EC2インスタンスのAMIを定期的に作成するポリシー
  • EC2インスタンスのボリュームのスナップショットを定期的に作成するポリシー
  • EBSのスナップショットを定期的に作成するポリシー

共通して、1時間ごとにAMI・スナップショットを作成し、最新の2つが残るようにライフサイクルポリシーを設定します。

CloudFormationテンプレートファイル

上記の構成をCloudFormationで構築します。
以下のURLにCloudFormationテンプレートを配置しています。

https://github.com/awstut-an-r/awstut-soa/blob/main/02/003/soa-02-003.yaml

テンプレートファイルのポイント解説

DLM

AMI・EC2インスタンスボリュームのスナップショット・EBSのスナップショットを作成すために3つのDLMポリシーを作成します。

AMI用のポリシー

Resources:
  AmiLifecyclePolicy:
    Type: AWS::DLM::LifecyclePolicy
    Properties:
      Description: !Sub "${Prefix}-LifecyclePolicy-AMI"
      ExecutionRoleArn: !GetAtt AWSDataLifecycleManagerDefaultRoleForAMIManagement.Arn
      PolicyDetails:
        Parameters:
          NoReboot: false
        PolicyType: IMAGE_MANAGEMENT
        ResourceTypes:
          - INSTANCE
        Schedules:
          - CreateRule:
              Interval: 1
              IntervalUnit: HOURS
              Times:
                - "20:00"
            DeprecateRule: # AMI only.
              Count: 1
            Name: test-ami-policy
            RetainRule:
              Count: 2
        TargetTags:
          - Key: !Ref DLMTagKey1
            Value: !Ref DLMTagAmiValue
      State: ENABLED
Code language: YAML (yaml)

PolicyDetailsプロパティでDLMポリシーの具体的な設定を行います。

ParametersプロパティでDLMポリシーのオプション的なパラメータを設定できます。
AMI用のポリシーの場合、AMIの作成時に、インスタンスの再起動を実施するかどうかを設定できます。
本ポリシーでは「false」を指定して、再起動させません。

PolicyTypeプロパティで、ポリシーで作成するリソースを指定します。
AMIを作成する場合は、本プロパティに「IMAGE_MANAGEMENT」を指定します。

AMI用のDLMポリシーを作成する場合は、ResourceTypesプロパティに「INSTANCE」を指定します。

SchedulesプロパティでAMIを作成するタイミングや、古いAMIを削除する条件を設定します。

CreateRuleプロパティでAMIを作成するタイミングを設定します。
今回は以下の条件で動作するように設定します。

  • 1時間ごとにAMIを作成する。
  • AMI作成は20時(UTC)から開始する。
  • AMIの数が2つになるように、古いAMIは削除する。
  • AMIを削除する際は、1つずつ削除する。

TargetTagsプロパティで、AMIを作成する対象のインスタンスを指定します。
今回は以下のタグが設定されたインスタンスを対象とします。

  • タグ名:dlm1
  • タグの値:ami

インスタンスボリュームのスナップショット用のポリシー

Resources:
  InstanceLifecyclePolicy:
    Type: AWS::DLM::LifecyclePolicy
    Properties:
      Description: !Sub "${Prefix}-LifecyclePolicy-Instance"
      ExecutionRoleArn: !GetAtt AWSDataLifecycleManagerDefaultRole.Arn
      PolicyDetails:
        Parameters:
          ExcludeBootVolume: false
        PolicyType: EBS_SNAPSHOT_MANAGEMENT
        ResourceTypes:
          - INSTANCE
        Schedules:
          - CreateRule:
              Interval: 1
              IntervalUnit: HOURS
              Times:
                - "12:40"
            Name: test-ami-policy
            RetainRule:
              Count: 2
        TargetTags:
          - Key: !Ref DLMTagKey2
            Value: !Ref DLMTagInstanceValue
      State: DISABLED
Code language: YAML (yaml)

概ねAMI用のポリシーと同様です。
主な異なる点を取り上げます。

インスタンスのボリュームのスナップショットを作成する場合は、PolicyTypeプロパティに「EBS_SNAPSHOT_MANAGEMENT」を指定します。

今回はTargetTagsプロパティを以下の通り指定します。

  • タグ名:dlm2
  • タグの値:instance

EBSのスナップショット用のポリシー

Resources:
  EBSLifecyclePolicy:
    Type: AWS::DLM::LifecyclePolicy
    Properties:
      Description: !Sub "${Prefix}-LifecyclePolicy-EBS"
      ExecutionRoleArn: !GetAtt AWSDataLifecycleManagerDefaultRole.Arn
      PolicyDetails:
        PolicyType: EBS_SNAPSHOT_MANAGEMENT
        ResourceTypes:
          - VOLUME
        Schedules:
          - CreateRule:
              Interval: 1
              IntervalUnit: HOURS
              Times:
                - "12:50"
            Name: test-ami-policy
            RetainRule:
              Count: 2
        TargetTags:
          - Key: !Ref DLMTagKey3
            Value: !Ref DLMTagEbsValue
      State: DISABLED
Code language: YAML (yaml)

概ね先述のポリシーと同様です。
主な異なる点を取り上げます。

インスタンスのボリュームのスナップショットを作成する場合は、ResourceTypesプロパティに「VOLUME」を指定します。

今回はTargetTagsプロパティを以下の通り指定します。

  • タグ名:dlm3
  • タグの値:ebs

DLM用IAMロール

AMI用ポリシー向けのIAMロール

Resources:
  AWSDataLifecycleManagerDefaultRoleForAMIManagement:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Effect: Allow
            Action: sts:AssumeRole
            Principal:
              Service:
                - dlm.amazonaws.com
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/service-role/AWSDataLifecycleManagerServiceRoleForAMIManagement
Code language: YAML (yaml)

AMI用のポリシーを実行するために必要な権限は、AWS管理ポリシーAWSDataLifecycleManagerServiceRoleForAMIManagementとして用意されています。

このAWS管理ポリシーをアタッチしたIAMロールを作成します。

インスタンスボリュームおよびEBS用ポリシー向けのIAMロール

Resources:
  AWSDataLifecycleManagerDefaultRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Effect: Allow
            Action: sts:AssumeRole
            Principal:
              Service:
                - dlm.amazonaws.com
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/service-role/AWSDataLifecycleManagerServiceRole
Code language: YAML (yaml)

インスタンスボリュームやEBS用のポリシーを実行するために必要な権限は、AWS管理ポリシーAWSDataLifecycleManagerServiceRoleとして用意されています。

このAWS管理ポリシーをアタッチしたIAMロールを作成します。

環境構築

CloudFormationを使用して、本環境を構築し、実際の挙動を確認します。

CloudFormationスタックを作成し、スタック内のリソースを確認する

CloudFormationスタックを作成します。
スタックの作成および各スタックの確認方法については、以下のページをご確認ください。

https://awstut.com/2021/12/02/cloudformation-nested-stacks

各スタックのリソースを確認した結果、今回作成された主要リソースの情報は以下の通りです。

  • EC2インスタンス:i-068b544013614d289
  • EBS:vol-0daa7dfef543973b8
  • AMI用DLMポリシー:policy-0ea4b29c277e69b8a
  • インスタンス用DLMポリシー:policy-04c02847b362179d3
  • EBS用DLMポリシー:policy-00eceb6c181303e2a

AWSマネージメントコンソールから各種リソースを確認します。

AMI用DLMポリシーを確認します。

Detail of DLM 1.
Detail of DLM 2.
Detail of DLM 3.

3つのポリシーが正常に作成されていることが確認できます。

EC2インスタンスとEBSを確認します。

Detail of EC2 1.
Detail of EBS 1.

両者とも正常に作成されていることがわかります。
インスタンスには2つ、EBSには1つのDLMポリシー用タグが設定されていることが確認できます。

動作確認

AMI用のDLMポリシー

1回目

AMI用のポリシーから動作を確認します。
しばらく待機します。

Detail of DLM 4.
Detail of DLM 5.

ポリシーの作成後、約1時間後に1つ目のAMIが作成されました。
AMIに紐づくスナップショットも作成されていることがわかります。
このインスタンスはEBSがアタッチされているため、インスタンスボリュームのスナップショットに加えて、EBSのスナップショットも作成されました。

2回目

また1時間程度待機します。

Detail of DLM 6.
Detail of DLM 7.

2つ目のAMIが作成されました。
スナップショットは合計4つになりました。

3回目

また1時間程度待機します。

Detail of DLM 8.
Detail of DLM 9.

3つ目のAMIおよびスナップショットが作成されました。

ポリシーでは最新の2つを残すように設定していますが、3つが残されている状態です。
DLMポリシーが動作した直後は、規定値を上回るAMI・スナップショットが保存される場合もあるようです。

20〜30分後、改めてAMI・スナップショットを確認します。

Detail of DLM 10.

AMIが2つになりました。
最新の2つが残るようにライフサイクルポリシーが実行されました。

なおスナップショットはAMIと連動せず、しばらく残り続けていました。

インスタンス用のDLMポリシー

1回目

インスタンス用のDLMポリシーを有効化し、しばらく待機します。

Detail of DLM 12.

ポリシーの有効後、約1時間後に1回目のスナップショットが作成されました。
1度に2つのスナップショットが作成されていることがわかります。
このインスタンスはEBSがアタッチされているため、インスタンスボリュームのスナップショットに加えて、EBSのスナップショットも作成されました。

2回目

また1時間程度待機します。

Detail of DLM 13.

2回目のスナップショットが作成されました。
スナップショットが合計4つになりました。

3回目

また1時間程度待機します。

Detail of DLM 14.

3回目のスナップショットが作成されました。
ポリシーでは最新の2つを残すように設定していますが、3つずつスナップショットが残されています。
やはりDLMポリシーが動作した直後は、規定値を上回るスナップショットが保存される場合もあるようです。

20〜30分後、改めてスナップショットを確認します。

Detail of DLM 15.

スナップショットが2つずつになりました。
最新の2つが残るようにライフサイクルポリシーが実行されました。

EBS用のDLMポリシー

1回目

EBS用のDLMポリシーを有効化し、しばらく待機します。

Detail of DLM 16.

ポリシーの有効後、約1時間後に1回目のスナップショットが作成されました。

2回目

また1時間程度待機します。

Detail of DLM 17.

2回目のスナップショットが作成されました。

3回目

また1時間程度待機します。

Detail of DLM 18.

3回目のスナップショットが作成されました。
ポリシーでは最新の2つを残すように設定していますが、3つスナップショットが残されています。
DLMポリシーが動作した直後は、規定値を上回るスナップショットが保存される場合もあるようです。

20〜30分後、改めてスナップショットを確認します。

Detail of DLM 19.

スナップショットが2つになりました。
最新の2つが残るようにライフサイクルポリシーが実行されました。

まとめ

DLM入門ということで、DLMを使用して、インスタンスのAMIやEBSのスナップショットを作成しました。