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のスナップショットを定期的に作成します。
構築する環境
検証用として、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スタックを作成します。
スタックの作成および各スタックの確認方法については、以下のページをご確認ください。
各スタックのリソースを確認した結果、今回作成された主要リソースの情報は以下の通りです。
- EC2インスタンス:i-068b544013614d289
- EBS:vol-0daa7dfef543973b8
- AMI用DLMポリシー:policy-0ea4b29c277e69b8a
- インスタンス用DLMポリシー:policy-04c02847b362179d3
- EBS用DLMポリシー:policy-00eceb6c181303e2a
AWSマネージメントコンソールから各種リソースを確認します。
AMI用DLMポリシーを確認します。
3つのポリシーが正常に作成されていることが確認できます。
EC2インスタンスとEBSを確認します。
両者とも正常に作成されていることがわかります。
インスタンスには2つ、EBSには1つのDLMポリシー用タグが設定されていることが確認できます。
動作確認
AMI用のDLMポリシー
1回目
AMI用のポリシーから動作を確認します。
しばらく待機します。
ポリシーの作成後、約1時間後に1つ目のAMIが作成されました。
AMIに紐づくスナップショットも作成されていることがわかります。
このインスタンスはEBSがアタッチされているため、インスタンスボリュームのスナップショットに加えて、EBSのスナップショットも作成されました。
2回目
また1時間程度待機します。
2つ目のAMIが作成されました。
スナップショットは合計4つになりました。
3回目
また1時間程度待機します。
3つ目のAMIおよびスナップショットが作成されました。
ポリシーでは最新の2つを残すように設定していますが、3つが残されている状態です。
DLMポリシーが動作した直後は、規定値を上回るAMI・スナップショットが保存される場合もあるようです。
20〜30分後、改めてAMI・スナップショットを確認します。
AMIが2つになりました。
最新の2つが残るようにライフサイクルポリシーが実行されました。
なおスナップショットはAMIと連動せず、しばらく残り続けていました。
インスタンス用のDLMポリシー
1回目
インスタンス用のDLMポリシーを有効化し、しばらく待機します。
ポリシーの有効後、約1時間後に1回目のスナップショットが作成されました。
1度に2つのスナップショットが作成されていることがわかります。
このインスタンスはEBSがアタッチされているため、インスタンスボリュームのスナップショットに加えて、EBSのスナップショットも作成されました。
2回目
また1時間程度待機します。
2回目のスナップショットが作成されました。
スナップショットが合計4つになりました。
3回目
また1時間程度待機します。
3回目のスナップショットが作成されました。
ポリシーでは最新の2つを残すように設定していますが、3つずつスナップショットが残されています。
やはりDLMポリシーが動作した直後は、規定値を上回るスナップショットが保存される場合もあるようです。
20〜30分後、改めてスナップショットを確認します。
スナップショットが2つずつになりました。
最新の2つが残るようにライフサイクルポリシーが実行されました。
EBS用のDLMポリシー
1回目
EBS用のDLMポリシーを有効化し、しばらく待機します。
ポリシーの有効後、約1時間後に1回目のスナップショットが作成されました。
2回目
また1時間程度待機します。
2回目のスナップショットが作成されました。
3回目
また1時間程度待機します。
3回目のスナップショットが作成されました。
ポリシーでは最新の2つを残すように設定していますが、3つスナップショットが残されています。
DLMポリシーが動作した直後は、規定値を上回るスナップショットが保存される場合もあるようです。
20〜30分後、改めてスナップショットを確認します。
スナップショットが2つになりました。
最新の2つが残るようにライフサイクルポリシーが実行されました。
まとめ
DLM入門ということで、DLMを使用して、インスタンスのAMIやEBSのスナップショットを作成しました。