高速スナップショット復元とボリューム初期化レートの違いをまとめてみた
こんにちは、岩城です。
先日、EBS ボリューム初期化レートが設定できるようになったのはご存知でしょうか。
[アップデート] Amazon EBS スナップショットから復元時のデータ転送速度を指定可能になりました | DevelopersIO
[アップデート] ECS がスナップショットから EBS を作成してアタッチする際にデータ転送速度を指定できるようになりました | DevelopersIO
ボリューム初期化とは、スナップショットからボリュームを作成した際、S3 からスナップショットブロックをダウンロードが完了しフルパフォーマンスを得られるまでのことを指しています。
このボリューム初期化への対策として、従来から高速スナップショットという機能が提供されていました。
初見では初期化レートも高速スナップショット復元も同じような機能に見えましたので、何が違うのか調べてみました。
ボリューム初期化とは
ボリューム初期化について、もう少し詳しくおさらいします。
ドキュメントには以下のような記載がありました。
スナップショットからボリュームを作成した場合、それにアクセスする前に、スナップショットのストレージブロックは Amazon S3 からダウンロードされてボリュームに書き込まれる必要があります。このプロセスはボリューム初期化と呼ばれます。この間、ボリュームの I/O レイテンシーが増加し、パフォーマンスが低下する可能性があります。フルボリュームのパフォーマンスは、すべてのストレージブロックがダウンロードされてボリュームに書き込まれた場合にのみ達成されます。
Amazon EBS ボリュームの初期化 - Amazon EBS
スナップショットを作成すると S3 バケットに保存されます。
スナップショットからボリュームを作成した直後は、S3 からボリューム内にスナップショットブロックが完全にダウンロードされていません。
ダウンロード中はボリュームの I/O レイテンシーが増加し、パフォーマンスが低下する可能性があります。
ボリューム上にスナップショットブロックが完全にダウンロードされ、パフォーマンスを得られるまでのことをボリューム初期化と言います。
機能の違い
それでは、各機能の違いを確認していきます。
EBS 高速スナップショット復元
まずは、従来から存在する EBS 高速スナップショット復元の機能を確認しましょう。
[新機能] リストア直後からフルパフォーマンス!EBS で Fast Snapshot Restore(FSR)が可能になりました | DevelopersIO
EBS 高速スナップショットは、完全にボリューム初期化された状態でボリュームが作成され、作成直後からフルパフォーマンスを得られます。
このため、S3 からボリュームへスナップショットブロックのダウンロードがなく、I/O レイテンシーが増加するといったパフォーマンスの問題はありません。
つぎに、考慮事項をまとめます。
- AWS Outposts, AWS Local Zones, AWS Wavelength Zone は非サポート
- 16 TiB 以下のスナップショットで有効可能
- 最大 64,000 IOPS または 1,000 MiB/s までのスループットでプロビジョニングされたボリュームが高速スナップショット復元の利点を享受できる
- 64,000 IOPS または 1,000 MiB/s を超える場合、手動でのボリューム初期化を検討する
- リージョンあたりデフォルトでは 5 つのスナップショットまで有効可能
- Service Quotas から上限緩和可能
さいごに、料金の考え方をまとめます。
- EBS 高速スナップショット復元の料金は、スナップショットのデータサイズは影響しない
- スナップショットの数、利用するアベイラビリティゾーンの数、高速スナップショット復元を有効化している時間によって決定する
- 例えば、1 スナップショットを東京リージョンの 3AZ で高速スナップショット復元を有効化すると $1458 かかる
1 スナップショット x 3 AZ x 720 時間 x 1 時間あたり $0.9 = $1458
なかなか無視できない金額に感じますね。
EBS ボリューム初期化レート
先日リリースされた初期化レートの機能を確認しましょう。以下のエントリにまとめられていますので要確認です。
[アップデート] Amazon EBS スナップショットから復元時のデータ転送速度を指定可能になりました | DevelopersIO
スナップショットからボリュームを作成する際に 100~300MiB/s データ転送速度をしているすることで、ボリューム初期化までの時間を短縮したり、ボリューム初期化に掛かる時間を予測可能になりました。
つぎに、考慮事項をまとめます。
- プロビジョンドレートは 100~300 MiB/s の間で指定可能
- ボリューム初期化に掛かる時間は、ボリュームのサイズではなく、スナップショットのデータサイズによって決定する
- 高速スナップショット復元が有効になっているスナップショットの場合、プロビジョンドレートが優先される
- 高速スナップショット復元を有効にしたスナップショットについては、プロビジョンドレートを指定しない
- リージョンあたりデフォルトで 5000 MiB/s の制限があり、この制限を超えたレートでボリュームを作成すると、リクエストが失敗する
- 例: 100 MiB/sのレートで 50 件の同時ボリューム作成をリクエスト (100 MiB/s * 50 = 5000 MiB/s)
- Service Quotas から上限緩和可能
さいごに、料金の考え方をまとめます。
- EBS ボリューム初期化用のプロビジョンドレートの料金は、EBS高速スナップショット復元と違いデータサイズによって決定される
- スナップショットのデータサイズと選択した初期化レートによって決定する
- 100 MB/s ~200 MB/s の場合
100GB * $0.00290/GB = $0.29
- 201 MB/s ~300 MB/s の場合 :
100GB * $0.00430/GB = $0.43
- 100 MB/s ~200 MB/s の場合
高速スナップショット復元と比較すると初期化レートの方が圧倒的に安く感じますね。
実際に確認してみる
以下のようなテストシナリオで高速スナップショット復元と初期化レートの違いを実際に確認してみます。
- 事前準備
- 100GB のボリュームを持つインスタンスを作成
- 以下のコマンドを実行し 90GB のデータを作成
dd if=/dev/zero of=/path/to/volume bs=1M count=90000
- AMI を作成
- ちなみに 90GB のスナップショット作成完了するまでに 1 時間 30 分ほど掛かりました
- シナリオ 1
- 初期化レート 100 MiB/s を指定しインスタンスを作成、その後以下のコマンドを実行し読み取りオペレーションを確認する
fio --filename=/dev/device --rw=read --bs=16k --iodepth=32 --ioengine=libaio --direct=1 --name=volume-initialize
- 同様に初期化レート 300 MiB/s でも確認する
- 初期化レート 100 MiB/s を指定しインスタンスを作成、その後以下のコマンドを実行し読み取りオペレーションを確認する
- シナリオ 2
- スナップショットの高速スナップショット復元を有効にする
- インスタンスを作成し、シナリオ 1 と同様のコマンドを実行し読み取りオペレーションを確認する
- シナリオ 3
- 高速スナップショット復元を有効にした状態で、初期化レート 100 MiB/s を指定しインスタンスを作成する
- インスタンスを作成し、シナリオ 1 と同様のコマンドを実行し読み取りオペレーションを確認する
シナリオ 1: 初期化レート
初期化レート 100 MiB/s は以下のとおりです。
スナップショットのデータサイズが大きく、スナップショットブロックのダウンロードに時間が掛かるためボリューム初期化が完了していません。
このため、ボリュームに設定した最大 IOPS 3000 は使えていません。
I/O レイテンシーが低下してパフォーマンスに問題がある状態ですね。
初期化レート 300 MiB/sも同様です。
シナリオ 2: 高速スナップショット復元
さすが高速スナップショット復元です。
最初からボリュームの最大 IOPS である 3000 フルにアクセスできていますね。
シナリオ 3: 高速スナップショット復元 + 初期化レート
考慮事項にあるとおり、高速スナップショット復元が有効になっていても、初期化レートを同時に設定すると初期化レートが優先されました。
高速スナップショット復元を有効にしているスナップショットでは要注意ですね。
おわりに
スナップショットから作成したボリュームですぐにフルパフォーマンスを得たい場合は、高速スナップショット復元を選択しましょう。
高速スナップショット復元は無視できない利用料金が掛かることも分かりました。
少しでも安く、少しでも早くボリューム初期化を完了させ、ボリュームのパフォーマンスを得たい場合や、ボリューム初期化に掛かる時間を予測したい場合は、初期化レートを設定すると良さそうですね。
本エントリがどなたかのお役に立てれば幸いです。