こんにちは!エンタープライズクラウド部技術2課の日高です。
たまたまEBSの高速スナップショット復元機能(今後はFSRと表記)を触る機会があったので、FSRの注意点(FSRを使う上で知っておかなければならない事)をまとめていきたいと思います。
本ブログでは、私自身が理解に苦しんだ「ボリューム作成クレジット」について詳しく記載していきます。
高速スナップショット復元機能(Fast Snapshot Restore)の概要
FSRは有効にすることで、EBSのスナップショットのリストアを高速化することができる機能になります。
そもそも、スナップショットから作成されたEBSボリュームは、復元直後のAmazon EBS Volumeに対象ブロックのデータがない場合はS3に取得しに行く必要があります。
取得したデータブロックは手元に保存するので、同じデータにアクセスする場合は時間がかかりません。
しかし、違うブロックデータにアクセスする場合は、またS3にデータを取得しに行く必要があります。
そのため、全ブロックデータを手元に保存するまではS3にデータを取得しに行く動作が繰り返されます。
このS3にデータを取得する際には一定の時間がかかるため(レイテンシー(遅延)が発生するため)EBS が本来持つパフォーマンスをすぐに発揮できません。
この状態はファーストタッチペナルティと呼ばれています。
FSRは、このファーストタッチペナルティを回避するための1つの方法です。
他の方法はボリューム初期化などがあります。
※ファーストタッチペナルティによる、パフォーマンス影響について記載している公式ドキュメントは、こちらです。
スナップショットから作成されたボリュームの場合、アクセスする前に、ストレージブロックが Amazon S3 からプルダウンされてボリュームに書き込こまれる必要があります。
この事前処理には一定の時間がかかるため、各ブロックへの初回アクセス時には、I/O 操作のレイテンシーが著しく増加する可能性があります。
ボリュームのパフォーマンスは、すべてのブロックがダウンロードされてボリュームに書き込まれると正常値に達します。
※ファーストタッチペナルティとその回避方法等については以下のブログに記載されているので、よければご覧ください。
FSRの使用上の注意
ボリューム作成クレジットが最低1つ以上必要
FSR が有効化されたスナップショットからボリュームを作成するためにはボリューム作成クレジットと呼ばれるクレジットが必要です。
公式ドキュメントには下記のように記載されています。
高速スナップショット復元を有効にしてスナップショットから作成するボリュームごとにクレジットバケットの 1 つのクレジットが消費されます。
スナップショットから 1 つの初期化ボリュームを作成するには、バケットに少なくとも 1 つのクレジットが必要です。
ボリュームの作成時、バケット内のクレジットが 1 つに満たない場合、この作成には、高速スナップショット復元のメリットを活用できません。
ボリューム作成クレジット抜粋
はい....私は上記の説明だけでは理解できなかったのでここから詳しくボリューム作成クレジットについて記載します。
ポイント
- スナップショットには、ボリューム作成クレジットを貯めるクレジットバケットがAZごとに紐づいている
- FSRを有効にしたボリュームを、スナップショットから 1 つ作成するたびに ボリューム作成クレジット(今後はクレジットと表記)が1 消費される(最低 1 つのクレジットがないとFSRが利用できない)
- FSRを有効にすると、一定の時間で有効にされたAZごとにボリューム作成クレジットが補充される
上記で挙げたポイントを、下記の図を使いながら解説していきます。
※イメージ図を使って説明するので、厳密には違う箇所もあると思いますが、ご容赦ください
FSR有効時の動作
まず前提としてFSRが有効されていない スナップショット①、スナップショット②があったとします。
この状態からマネジメントコンソール上で、スナップショット①のFSRをap-northeast-1cで有効にしたとします。
すると、ap-northeast-1c にスナップショット① に紐づくクレジットバケットが作成されます。
クレジットバケット作成時には、クレジットは存在しません。
また、1つのクレジットバケット内にはいるクレジット数(=クレジットバケットのサイズ)は スナップショットのサイズ(後述でクレジットバケットのサイズをもとめる計算方法について記載します)によって決まります。
FSRを有効化にして一定の時間がたつとクレジットバケットの中にクレジットが作成されます。
1 時間あたりに補充されるクレジットを補充レート(後述で計算方法について記載します)と呼びます。
クレジットバケットにあるクレジットを1つ消費してFSRが有効になったAmazon EBS Volumeを作成します。
※補足
クレジットバケットはAZにつき1つ紐づいているのでスナップショット①で、ap-northeast-1a と ap-northeast-1c のFSRを有効にすると下記の図のように2つクレジットバケットが作成されます。
ですので、スナップショットを復元したAZごとにFSRを有効にする必要があります。
クレジットバケットの補充レートを求める計算方法
1 時間あたりに補充されるクレジットを補充レートと呼び下記の計算式で求めることができます。
MIN (10, (1024 ÷ snapshot_size_gib))
MIN(A.B)はAとBを比べて低い値を返します。
A>Bだった場合、MIN(A.B)=Bとなります。
例(1)
復元モトのスナップショットのサイズが128 GiBだった場合
MIN (10, (1024 ÷ 128))= 8となります。
つまりスナップショットのサイズが128 GiBだった場合、1時間あたりに8個のクレジットが補充されるということになり、FSRが有効になったAmazon EBS Volumeを復元する場合、最短でもFSRを有効にしてから 7.5分たたないといけないということになります。
例(2)
復元モトのスナップショットのサイズが4096GiBだった場合
MIN (10, (1024 ÷ 4096))= 0.25となります。
つまりスナップショットのサイズが4096GiBだった場合、1時間あたりに0.25個のクレジットが補充されるということになり、FSRが有効になったAmazon EBS Volumeを復元する場合、最短でもFSRを有効にしてから 4時間たたないといけないということになります。
クレジットバケットの最大サイズを求める計算方法
クレジットバケットにはいる、クレジットの最大数はスナップショットのサイズ(GiB)によって0~10で変動します。
ここでクレジットバケットにはいる、クレジットの最大数を求める計算方法を記載します。
MAX (1,
補充レートの値
)
MAX(A.B)はAとBを比べて大きい値を返します。
A>Bだった場合、MAX(A.B)=Aとなります。
例(1)
復元モトのスナップショットのサイズが128 GiBだった場合
補充レートの値は 8 なので MAX (1, 8)= 8となります。
つまりスナップショットのサイズが128 GiBだった場合、クレジットバケットにはいるクレジットの最大数は8個になります。
このことにより、最大同時に8個までFSRが有効になったAmazon EBS Volumeを復元することができるということになります。
例(2)
復元モトのスナップショットのサイズが4096GiBだった場合
補充レートの値は 0.25 なので MAX (1, 0.25)= 1となります。
つまりスナップショットのサイズが4096 GiBだった場合、クレジットバケットにはいるクレジットの最大数は1個になります。
このことにより、最大同時に1個までしかFSRが有効になったAmazon EBS Volumeを復元することができないということになります。
以上のように、FSRを有効にしたスナップショットから、1度に複数のAmazon EBS Volumeを復元する場合、FSRが有効になったAmazon EBS Volumeを復元できる最大数は、クレジットバケットの最大サイズと同じ値になるという点にも注意が必要です。(もちろんクレジットがある前提です)
クレジットバケットのサイズと補充レートの例
スナップショットのサイズに応じたクレジットバケットの最大サイズおよび補充レートの例になります。
表からわかるように、512GiB以上のスナップショットのクレジットバケットの最大サイズは1なので、FSRを使用してAmazon EBS Volumeを作成したらクレジットが貯まるまではFSRが有効になったAmazon EBS Volumeを復元できません。
また、使用可能なクレジットの数やクレジットバケットの最大サイズは、下記CloudWatchメトリクスから確認することができます。
FastSnapshotRestoreCreditsBucketSize:蓄積できるボリューム作成クレジットの最大数。このメトリクスは、アベイラビリティーゾーンごとにスナップショット単位で確認できる。
FastSnapshotRestoreCreditsBalance:使用可能なボリューム作成クレジットの数。このメトリクスは、アベイラビリティーゾーンごとにスナップショット単位で確認できる。
実際にCloudWatchメトリクスから確認した使用可能なクレジットの数
実際にCloudWatchメトリクスから確認したクレジットバケットの最大サイズ
コストへの注意が必要
料金は詳しくはこちらに記載されています。
FSRの料金は東京リージョン(2023/05/24時点)だと、1時間当たりの料金=有効化された各スナップショット数×AZ数×0.90USD で求めることができます。
例えば3つのスナップショットを2AZごとに6時間有効にした場合、3スナップショット×2AZ×6h×0.90USD=32.4USD かかります。
このようにそれなりの料金がかかってしまうので「必要な時間だけ」FSRを有効にすることが大事です。
そして、リストアが完了したらFSRを無効にするのを忘れないようにしましょう。
FSRを有効化するのには時間がかかる
先ほど説明したクレジットがたまるまでの時間とは別に、FSRを有効化するのにも時間がかかるので注意が必要です。
FSRの状態は、下記5つで遷移します。
enabling — 高速スナップショット復元の有効化がリクエストされました。
optimizing — 高速スナップショット復元の有効化中です。スナップショットの最適化には TiB あたり 60 分を要します。最適化されたスナップショットにより、ボリュームのリストア時のパフォーマンスに関し、一定のメリットが得られます。
enabled — 高速スナップショット復元は有効になっています。高速スナップショット復元により、ボリュームのリストア時のパフォーマンスに、最大限のメリットが得られます。
disabling — 高速スナップショット復元の無効化がリクエストされました。または、高速スナップショット復元の有効化のリクエストが失敗しました。
disabled — 高速スナップショット復元は無効になっています。高速スナップショット復元は必要に応じて再度有効にすることができます。
上記の太文字記載のとおり、TiBあたり60分かかるのですぐにFSRを有効化することはできません。
ですので、FSRを有効化してすぐに使うなどはできないため注意が必要です。
その他制限事項
・FSRを有効にできるのは、リージョンあたり最大5個のスナップショットまで
・64,000 IOPS または 1,000 MiB / 秒のスループットを超えるパフォーマンスでプロビジョニングされたボリュームの場合、使用するのは避ける
※詳しくは以下をご覧ください。
まとめ
本ブログにて、FSRを有効化にしたスナップショットから1つのAmazon EBS Volumeを作成するためにかかる時間は、「FSRが有効になる時間」(FSRを有効化するのには時間がかかる で解説しました)+「補充レート」(FSRの使用上の注意 で解説しました)の合計時間が最低でもかかるということがわかりました。
FSRを使用する際には注意しないといけない点はいくつかあるので、そこをしっかり押さえて便利なFSRを使いこなしましょう!
本ブログが誰かの助けになれば幸いです。
日高 僚太(執筆記事の一覧)
EC部ソリューションアーキテクト2課 / AWS認定資格 12冠
2022年IT未経験で新卒入社しました。
最近はダーツとサウナが気になっています!
記事に関するお問い合わせや修正依頼⇒ hidaka@serverworks.co.jp