AWS EBS Fast Snapshot Restoreで復元直後から高パフォーマンスを得る

2024年6月29日

Amazon EC2

Amazon EBS ボリュームは、EC2 インスタンスにアタッチできるストレージデバイスです。EBS ボリュームは、EBS スナップショットを作成することでバックアップを取ることができます。バックアップされたデータを復元するときには、スナップショットから EBS ボリュームを作成して、EC2 インスタンスにアタッチします。

しかし、スナップショットから作成した EBS は、作成した直後は本来のパフォーマンスを発揮することができません。障害からの復旧のときなど、できるだけ早く元の状態に戻す必要があるとき、この仕様が問題になることがあります。

本来のパフォーマンスを得るためには以下の 2 つの方法があります。

  • EBS の初期化
  • Fast Snapshot Restore

EBS の初期化は、fio や dd コマンドなどで EBS の全ブロックにアクセスする、プレウォーミングと呼ばれる方法です。

Fast Snapshot Restore は、プレウォーミングに相当することを AWS が行ってくれるサービスです。今回はこの Fast Snapshot Restore を利用する方法について解説します。バックアップからいち早くデータを復元することを求められる環境において、Fast Snapshot Restore は非常に有用な機能となります。

パフォーマンスが発揮されない理由、プレウォーミングの方法や要する時間などは Addressing I/O latency when restoring Amazon EBS volumes from EBS Snapshots | AWS Storage Blog に詳しくかかれているので、興味がある方はご確認ください。

目次

  1. Fast Snapshot Restore を有効化
  2. Fast Snapshot Restore が有効化されたか確認する
  3. Fast Snapshot Restore を利用してスナップショットから EBS を復元する
  4. Fast Snapshot Restore を無効化
  5. Fast Snapshot Restore の料金
  6. Data Lifecycle Manager で Fast Snapshot Restore を自動化
  7. Data Lifecycle Manager を作成する Terraform のコード

Fast Snapshot Restore を有効化

Amazon EBS fast snapshot restore > Enable or disable fast snapshot restore - Amazon EBS を参考に作業します。

  1. Amazon EC2 コンソールにアクセスします。
  2. 左側のナビゲーションペインから「スナップショット」を選択します。
  3. 有効化したいスナップショットを選択し、「アクション」メニューから「Snapshot Settings」を選択します。
  4. 有効化したいスナップショットを選択し、「アクション」メニューから「Manage Fast Snapshot Restore」を選択します。
  5. Fast Snapshot Restore を有効化する Availability Zone (AZ) を選択します。このとき、スナップショットから EBS を作成するときと同じ AZ を選択します。
  6. AZ を選択して「Enable」をクリックします。

Fast Snapshot Restore が有効化されたか確認する

  1. Amazon EC2コンソールで「スナップショット」ページに移動します。
  2. 対象のスナップショットを選択し、「スナップショットの詳細」を確認します。
  3. 「Fast snapshot restore」のステータスが「enabled」になっていることを確認します。

スナップショットのサイズが 150GB のものが enabled になるまで、15 分くらいかかりました。自身の環境ではどのくらいの時間で enabled になるか、事前に計測しておくと良いでしょう。

Fast Snapshot Restore を利用してスナップショットから EBS を復元する

Fast Snapshot Restore を有効化にした後は、通常の手順でスナップショットから EBS を作成します。

  1. Amazon EC2コンソールで「スナップショット」に移動します。
  2. FSR が有効化されたスナップショットを選択します。
  3. 「アクション」メニューから「ボリュームを作成」を選択します。
  4. 必要な設定(サイズ、タイプ、AZなど)を入力して「ボリュームを作成」をクリックします。
  5. 作成された EBS ボリュームを EC2 インスタンスにアタッチします。

Fast Snapshot Restore を無効化

Fast Snapshot Restore は料金がかかります。有効化と逆の手順で無効化をしておきましょう。

Fast Snapshot Restore の料金

それぞれのスナップショットで、Fast Snapshot Restore が enable になっている AZ ごとに、分単位で料金がかかります。ずっと有効化しているとそれなりの値段になります。詳細は Amazon EBS fast snapshot restore > Pricing and Billing - Amazon EBS を参照してください。

Data Lifecycle Manager で Fast Snapshot Restore を自動化

ここまでで Fast Snapshot Restore の機能について解説しました。Fast Snapshot Restore はリストア直後から最高のパフォーマンスを得られるものの、有効化まで待ち時間があり、不要になった Fast Snapshot Restore の設定をオフにする必要もあって、意外と面倒です。そんな場合は Amazon Data Lifecycle Manager が便利です。

Data Lifecycle Manager は EBS スナップショットの作成、保持、削除を自動化できるサービスです。Data Lifecycle Manager で EBS スナップショットを作成するときに、Fast Snapshot Restore を自動的に有効化することができます。しかも、Fast Snapshot Restore を有効にする世代数を設定することもできます。

以下が Data Lifecycle Manager の設定箇所の画像です。

Data Lifecycle Manager を作成する Terraform のコード

IAM role であるrole/service-role/AWSDataLifecycleManagerDefaultRole は、AWS のマネジメントコンソールの Data Lifecycle Manager から IAM role のところで「default role」を選択すると自動的に作成されます。

resource "aws_dlm_lifecycle_policy" "operation" {
  description        = "example DLM lifecycle policy"
  execution_role_arn = "arn:aws:iam::${data.aws_caller_identity.current.account_id}:role/service-role/AWSDataLifecycleManagerDefaultRole"
  state              = "ENABLED"

  policy_details {
    resource_types = ["VOLUME"]

    schedule {
      name = "7 days of daily snapshots"

      create_rule {
        interval      = 24
        interval_unit = "HOURS"
        times         = ["06:30"]
      }

      retain_rule {
        count = 7
      }

      fast_restore_rule {
        availability_zones = ["ap-northeast-1a"]
        count              = 1
      }

      copy_tags = true
    }

    target_tags = {
      Snapshot = "true"
    }
  }

  tags = {
    Name = "example DLM lifecycle policy"
  }
}

-技術ブログ
-