Amazon Web Services ブログ

新機能 – EBS Direct API – EBS スナップショットコンテンツへのプログラムによるアクセス

EBS スナップショットは実に有能です。 これは、AWS マネジメントコンソール を通じて双方向的に作成できます。

作成するには、コマンドライン (create-snapshot) を使うか、CreateSnapshot 関数を呼び出します。また、Data Lifecycle Manager (DLM) により、スナップショット自動管理の設定が行えます。

スナップショットについて
スナップショットは Amazon Simple Storage Service (S3) に保存され、これにより、必要に応じて新しい EBS ボリュームを素早く作成できます。ボリュームの最初のスナップショットには、ボリューム上にある 512K サイズのブロックすべてのコピーが含まれます。その後のスナップショットには、前のスナップショット以降に変更されたブロックのみがふくまれます。スナップショットが増分を扱うこの性質により、コスト効率が非常に高くなります。(統計的にいって) EBS ボリューム上にあるブロックの多くは、ほとんど変更されることがないからです。

その手短な例をご覧いただきましょう。今、8 個のブロックがある EBS ボリュームを作成およびフォーマットしたと考えます (これは許可された最小サイズより小さいですが、例としてお許しください) 。これにいくつかファイルをコピーした後、最初のスナップショット (Snap1) を作成します。このスナップショットには、次に示すようにすべてのブロックが含まれます。

次に、いくつかのファイルをさらに追加し、1 つのファイルを削除してから、2 つめのスナップショット (Snap2) を作成します。このスナップショットには、1 つめを作成した後に修正されたブロックのみが含まれ、それは次のようになります。

さらに、いつくかの変更を加えた後、3 つめのスナップショット (Snap3) を作成します。

現実には、ディレクトリー、ファイル、そして下層ブロックの間の関係性はファイルシステムで制御されており、一般的にかなり複雑なものになることは、心に留めておいてください。

さて、3 つのスナップショットができましたので、これらを使って新しくボリュームを作成したいと思います。EBS ボリュームのスナップショットを作成するたび、前のスナップショットへの内部参照も作成されます。これにより、CreateVolume が各ブロックについて最新のコピーを見つけられるようになっています。次に示すような関係です。

詳細な管理は、この背景にある EBS が受け持ってくれます。たとえば、Snap2 を削除するとそれに含まれる Block 0 のコピーも削除されます。なぜなら、Snap3 内にあるコピーの方が新しいからです。一方で、Snap2 にある Block 4 のコピーは Snap3 に移動されます。

ちなみに、後方向き (Snap3 から Snap1 へ、 あるいは、Snap3 から Snap2 そして Snap1 へ) の参照チェーン は、一連のスナップショットについての系統として捉えてください。

ここまでで一通り説明をしてきましたが、お客様は必ずしもこれを理解する必要はありません。単に、スナップショットの作成、使用、削除に集中していただくので十分です。

しかしながら…

スナップショットコンテンツへのアクセス
先に書いた解説では、スナップショットコンテンツへのアクセスを提供する、EBS Direct API を紹介してきました。これらの API は、バックアップ/復元、災害復旧、およびデータ管理製品とサービスなどの開発者向けに設計されたものです。彼らのサービスを、より高速かつコスト効率良くすることが目的です。

この新しい API では、スナップショットにある特定の 512K ブロックを指定するために、(0、1、2 と増加していく) ブロックインデックスを使います。このインデックスは、GetSnapshotBlock API にとってのみ意味がある、暗号化されたトークンの形で返されます。今回このトークンには、以下に示すように、 T0T1 のような順番で名前付けをしました。現在のところ、API が対応しているのはサイズが 512K のブロックだけですが、将来、さらに多種類のブロックサイズに対応する計画です。

これらの API は次のようなものです。

ListSnapshotBlocks – 指定されたスナップショットにあるすべてのブロックを、暗号化されたトークンの形で特定します。これは、Snap1 に関しては [T0、T1、T2、T3、T4、T5、T6、T7] を返し、Snap2 では [T0、T4] を返します。

GetSnapshotBlock – ブロックのコンテンツを返します。ブロックが暗号化されたスナップショット内にある場合は、それを復号化して返します。

ListChangedBlocks – 同じ系統にある 2 つのスナップショットの間で変更があるブロックのリストを返します。これも、暗号化されたトークンです。これは、Snap2 から [T0、T4] を返し、Snap3 からは [T0,、T5] を返します。

すでに述べた通り、これらの API は、特別かつ重要なただ 1 つのユースケースに対応する目的で作られたものです。これに続き、新しく思いもよらなかったような機能が、48 時間以内に登場することもお約束できそうです (それらについての情報共有もお気楽にどうぞ) 。

今すぐ利用可能です
The EBS Direct API は現在公開されており、米国東部 (バージニア北部)米国西部 (オレゴン)欧州 (アイルランド)欧州 (フランクフルト)アジアパシフィック (シンガポール)、そして アジアパシフィック (東京) の各リージョンで使用を開始していただけます。また、残りのリージョンについても、数週間の内に使用可能になる予定です。List および Get API の呼び出しには料金がかかります。また、暗号化されたスナップショット内にあるブロックへのアクセスのために、GetSnapshotBlock を呼び出す際は、通常の KMS 料金が適用されます。

Jeff