[アップデート]DLMがAMIライフサイクル管理をサポートしました!

DLMでAMIのライフサイクル管理が可能になるアップデートが発表されましたので紹介したいと思います。DLM便利。
2020.11.10

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、岩城です。

本日、Data LifecycleManager(以下、DLM)でAMIのライフサイクル管理が可能になるアップデートが発表されましたので紹介したいと思います。

AMI Lifecycle Management now available with Data Lifecycle Manager

これまでのDLMではEBSのスナップショットの作成が可能でしたが、このアップデートによりEBS-backedなAMIの作成が可能になりました。

日次、週次、月次、年次といったスケジュールでAMIを作成できるばかりか、世代管理もやってくれる優れものです。

早速試してみましょう。

やってみた

ポリシータイプの選択とターゲットの指定

ライフサイクルマネージャー>ライフサイクルポリシーを作成を選択します。

EBS-backed AMI ポリシーを選択します。説明は入力必須です。

AMIを作成するターゲットインスタンスを特定する任意のタグを指定します。ここではKeyをami_lifecycle_flag、Valueをtrueとし、事前にターゲットインスタンスにタグが設定されていることとします。

今回はポリシータグを設定しません。なお、現状はKeyをName、Valueをami_lifecycle_policyとしてもコンソール上で名前として表示されませんでした。必要に応じて設定してください。

IAMロール

IAMロールを選択します。デフォルトロール別のロールを選択できます。デフォルトロールの場合、AWS管理ポリシーのAWSDataLifecycleManagerDefaultRoleForAMIManagementがアタッチされたAWSDataLifecycleManagerDefaultRoleForAMIManagementという名前のIAMロールが作成されます。既にロールがある場合は、別のロールを選択します。

ポリシースケジュール

スケジュールを設定します。とても細かく頻度を設定できるので一つずつ確認していきたいと思います。

はじめに頻度毎日の場合です。指定できる時間を1,2,3,4,6,8,12,24から選択します。選択できる時間以外を選択したい場合は、後述するカスタムcron式を使用します。

つぎに頻度毎週の場合です。スケジュールしたい曜日を選択します。複数選択できるので祝日には対応できませんが、土日を除外することで平日のみとすることもできます。

つぎに頻度毎月の場合です。以下のようなパターンで設定することができます。

  • 毎月1日(1~31のうち1つ選択可)
  • 毎月末日
  • 毎月第1月曜日(第1~4の各曜日を1つ選択可)

つぎに頻度毎年の場合です。月の開始終了を選択できます。たとえば、毎年1月1日や3月31日にAMIを作成するといったことができます。

さいごにカスタムcron式です。cron式自体は一般的な内容なので詳細な説明は省略します。気になる方は公式ドキュメントを参照してください。

カスタムcron式を用いるとより複雑なスケジュールを設定することができます。たとえば、2020~2025年の間で平日PM22:00にAMIを作成するならば以下のようになります。

  • cron(0 13 ? * MON-FRI 2020-2025)

ポイントとしては、UTCで指定する必要があるため日本時間よりマイナス9時間とすることや、DLMでAMIを作成できる最低間隔が1時間のため、30分毎に取得できない点が挙げられます。

保持タイプはカウント保持期間を選択できます。カウントは世代数です。たとえば30を設定すると、世代数が31になった時点で一番古い世代が削除されます。

保持期間は、間隔とその単位(日、週、月、年)を選択できます。AMIの数に関わらず対象の期間分保持しておくときに利用します。たとえば、1週間分とか1年間分といった間隔で保持できます。

本エントリでは、ターゲットとなるインスタンスのタグをAMIへコピーを有効、クロスリージョンコピーはデフォルトのまま無効としておきます。DR目的でクロスリージョンコピーを利用して別リージョンへAMIをコピーする運用が可能です。

なお、これまで説明してきたスケジュールの設定をオプションであと3つ追加することができます。たとえば、AMI作成は日次で取得しておきつつ、週次でクロスリージョンコピーしておくといったことができます。

本エントリでは、日次で1時間毎にAMIを作成するスケジュールを登録しました。

ターゲットインスタンスのリブート

AMIの作成前に静止点を設けてデータ整合性を保つ場合ははいを選択します。はいの場合、AMI作成前にターゲットインスタンスを停止、AMI作成後にインスタンスを起動します。

ポリシー概要

これまでの設定内容を元にポリシーの概要が表示されます。作成後のポリシーのステータスは有効のままとします。無効にするとポリシーは作成されますが、ポリシーは実行されずAMIは作成されません。

問題なければポリシーが作成されます。

なお、カスタムcron式を以下のように1時間よりも短い間隔で指定しているとエラーが出力し作成が失敗しますので注意してください。

  • cron(20,25 9 * * ? *)

作成されたAMIの確認

スケジュールどおりAMIが作成されていることが確認できます。。作成されたAMIの名前はDLM_ポリシーID_ターゲットインスタンスID_作成時のタイムスタンプとなります。

おわりに

DLMの利用自体には追加費用は掛かりません(AMIに関連付くEBSスナップショットの利用費、クロスリージョンレプリケーション利用時の転送量は掛かります)。 マネージドにAMIのライフサイクル管理ができますし、設定がとても簡単なので是非試してみてください。

本エントリがどなたかのお役に立てれば幸いです。