TerraformでDLMを作成


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

皆様こんにちは。
Terraformを利用して、AWSで高可用性アーキテクトの構築をしていきます。
今回はDLMでライフサイクルポリシーの作成をしていきます。

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

目次はこちら

2.DLMとは

Amazon Data Lifecycle Manager を使用して、EBS スナップショットと EBS-backed AMI の作成、保持、削除を自動化できます。スナップショットと AMI 管理を自動化すると、次のことができるようになります。

Amazon Data Lifecycle Manager

DLMは、EBSボリュームのスナップショットの作成・保持・削除を自動化できる機能です。
料金については無料で利用することができ、作成するEBSスナップショットの通常のストレージ料金を支払います。

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

マネジメントコンソール画面からDLMを作成する方法については下記に記載しています。
DLMでEBSのスナップショットを自動的に作成して、EC2インスタンスを復元する方法

3.フロー図

フロー図は下記の通りです。

  • DLM用のAWS管理ポリシーがアタッチされているデフォルトのIAMロールを使用します
  • ライフサイクルポリシーを作成します

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

DLMを利用してスナップショットの作成、保持、削除の自動化の設定を行います。

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

ターゲットリソースやスケジュールの情報等を入力し、ライフサイクルポリシーを作成します。
ソースコードは下記の通りです。

#----------------------------------------
# DLM作成
#----------------------------------------
# ライフサイクルポリシーの作成
resource "aws_dlm_lifecycle_policy" "higa-dlm_policy" {
  description        = "higa-DLM-Policy"
  execution_role_arn = "arn:aws:iam::【アカウントID】:role/AWSDataLifecycleManagerDefaultRole"
  state              = "ENABLED"

  tags = {
    Name = "higa-DLM"
  }

  policy_details {
    resource_types = ["INSTANCE"]

    schedule {
      name = "higa-DLM-Schedule"

      create_rule {
        interval      = 1
        interval_unit = "HOURS"
        times         = ["08:45"]
      }

      retain_rule {
        count = 3
      }

      copy_tags = true
    }

    target_tags = {
      Dlm = "higa-ec2-BackUp"
    }
  }
}

設定項目は下記の通りです。

使用するオプション 設定値 説明
description higa-DLM-Policy 説明を入力
execution_role_arn arn:aws:iam::【アカウントID】:role/AWSDataLifecycleManagerDefaultRole IAMロールのARNを指定
state ENABLED ライフサイクルポリシーを作成時に有効化
tags Name = "higa-DLM" タグを設定
policy_details 別途記述 ターゲットやスケジュール等の情報

「policy_details」の設定項目は下記の通りです。

使用するオプション 設定値 説明
resource_types INSTANCE "VOLUME"又は"INSTANCE"を選択
今回は"INSTANCE"を指定
target_tags Dlm = "higa-ec2-BackUp" タグを指定
schedule 別途記載 スケジュールの設定

「schedule」の設定項目は下記の通りです。

使用するオプション 設定値 説明
name higa-DLM-Schedule スケジュール名を入力
create_rule interval = 1
interval_unit = "HOURS"
times = ["08:45"]
UTC時間(日本時間-9時間)、時間単位、時間間隔の指定
今回は日本時間17時45分から1時間毎にスナップショットが作成されます
retain_rule count = 3 保持できるスナップショットの数を設定
copy_tags true ターゲットのタグをスナップショットに反映する設定

4-2.ライフサイクルポリシーの有効化

マネジメントコンソール画面からライフサイクルマネジャーの確認をします。
ライフサイクルポリシーが有効化されていない場合、有効します。

ライフサイクルポリシーを有効化できました。

5.検証

作成したライフサイクルポリシーが正常に動作するか検証します。
マネジメントコンソール画面から「スナップショット」を確認します。

上記より、各EC2インスタンスのスナップショットの保持数が3つであることが確認できました。

次は、1時間後にスナップショットの確認をし、古いものから削除されているか確認します。

上記より、古いスナップショットが自動で削除されていることが確認できました。

6.まとめ

DLM用のAWS管理ポリシーがアタッチされているデフォルトのIAMロールを設定する方法がわからず、苦労しました。(ソースコード7行目)
また、DLMのライフサイクルとポリシーは作成されているが、スナップショットが作成されない問題が発生しました。原因としては下記のコードを記述していたためです。

 tags_to_add = {
    Name = "higa-snapshot"
}

上記のコードは追加したいタグがある場合必要です。問題の原因は「Name」タグ(10~12行目)はすでに使用しているため、タグ (名前) は vol-xxxxxxxxxxxx のリソース ID ですでに定義されているという状態エラーが発生しました。

DLMライフサイクルポリシー作成時に問題が発生しましたら、下記のドキュメントで原因を探しましょう。
DLM トラブルシューティング

7.参照

Last modified: 2022-06-27

Author