Amazon Web Services ブログ

EBS ダイレクト API を使用して任意のブロックストレージからスナップショットを作成する

オンプレミスボリューム、別のクラウドプロバイダーのボリューム、Amazon Simple Storage Service (S3) に保存されている既存のブロックデータなどのブロックストレージデータ、またはご自身のラップトップパソコンからも、Amazon Elastic Block Store (EBS) スナップショットを作成できるようになりました。

オンプレミスインフラストラクチャの災害対策にクラウドを使用している AWS のお客様はみんな、同じことを考えているのではないでしょうか。オンプレミスのボリュームデータをクラウドに効率的かつ低コストで転送するにはどうすればよいのだろう、と。 通常の場合、一時的な Amazon Elastic Compute Cloud (EC2) )インスタンスを作成し、Amazon Elastic Block Store (EBS) ボリュームを添付して、オンプレミスからこれらの新しい Amazon Elastic Block Store (EBS) ボリュームにブロックレベルでデータを転送します。そして、作成されたすべての EBS ボリュームのスナップショットを取り、一時的なインフラストラクチャを破棄します。CloudEndure を使ってこの作業を簡略化する人もいます。あるいは、複雑な作業のために、単にあきらめて、オンプレミスのボリュームをクラウドにコピーしなかった人もいるかもしれません。

この作業を簡略化するため、本日、re:Invent 2019 で発表した新しい API セットの、EBS ダイレクト API の一部である 3 つの新しい API を発表しました。AWS ではまず最初に、読み込み API と差分 API をリリースしました。本日のリリースでは、書き込み機能を拡張しています。これらの 3 つの新しい API を使用することで、オンプレミスボリュームから Amazon Elastic Block Store (EBS) スナップショットを作成したり、AWS で保存やリカバリが可能なブロックストレージデータを作成したりできます。

EBS ダイレクト API に書き込み機能を追加すると、オンプレミスボリュームから新しいスナップショットを作成したり、増分スナップショットを作成および削除したりできるようになります。スナップショットを作成すると、Amazon Elastic Block Store (EBS) ボリュームから作成されたスナップショットのあらゆる利点が享受できます。スナップショットのコピー、AWS アカウント間での共有高速スナップショットの復元での使用、またはスナップショットから Amazon Elastic Block Store (EBS) ボリュームの作成が可能になります。

Amazon Elastic Block Store (EBS) スナップショットを任意のボリュームから作成すると、Amazon Elastic Compute Cloud (EC2) インスタンスや Amazon Elastic Block Store (EBS) ボリュームを起動する必要がなくなり、クラウドでの災害対策用のコピーの作成や管理を簡素化し、さらにコストも削減できます。

API についてもっと細かく見ていきましょう
最初に StartSnapshot を呼び出して、新しいスナップショットを作成します。スナップショットが増分の場合、親スナップショットの ID を渡します。通常どおり、追加のタグを渡してスナップショットに適用したり、これらのスナップショットを暗号化してキーを管理したりすることもできます。スナップショットを暗号化する場合は、AWS の技術ドキュメントを確認し、詳細やオプションを理解してください。

次に、データのブロックごとに PutSnapshotBlock を呼び出します。この API には、以下の 6 つの必須パラメータがあります。snapshot-idblock-indexblock-datablock-lengthchecksumchecksum-algorithm。API は 512 KB のブロック長をサポートしています。ブロックは任意の順序で送信でき、同時に、block-index は順序を正しく保ちます。

すべてのブロックを送信した後、送信したブロック数を持つ changed-blocks-count パラメータを使用して、CompleteSnapshot を呼び出します。

これらをすべてまとめましょう
以下は、スナップショットの作成に書き込む必要がある疑似コードです。

AmazonEBS amazonEBS = AmazonEBSClientBuilder.standard()
   .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endpointName, awsRegion))
   .withCredentials(credentialsProvider)
   .build();

response = amazonEBS.startSnapshot(startSnapshotRequest)
snapshotId = response.getSnapshotId();

for each (block in changeset) {
    putResponse = amazonEBS.putSnapshotBlock(putSnapshotBlockRequest);
}
amazonEBS.completeSnapshot(completeSnapshotRequest);

このコードを使用するときは、いつものように新しい API を呼び出すのを許可する適切な IAM ポリシーが必要です。例:

{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": [
"ebs:StartSnapshot",
"ebs:PutSnapshotBlock",
"ebs:CompleteSnapshot"
],
"Resource": "arn:aws:ec2:<Region>::snapshot/*" }]

また、暗号化されたスナップショットを作成する際には、KMS 関連のアクセス許可をいくつか含めてください。

PutSnapshotBlock を呼び出すと、スナップショットのストレージコストだけでなく、API コールごとの料金が発生します。

これらの新しいスナップショット API は、次の AWS リージョンでご利用いただけます。米国東部 (オハイオ)U米国東部 (バージニア北部)米国西部 (北カリフォルニア)米国西部 (オレゴン)アジアパシフィック (香港)アジアパシフィック (ムンバイ)アジアパシフィック (ソウル)アジアパシフィック (シンガポール)アジアパシフィック (シドニー)アジアパシフィック (東京)カナダ (中部)中国 (北京)中国 (寧夏)欧州 (フランクフルト)欧州 (アイルランド)欧州 (ロンドン)欧州 (パリ)欧州 (ストックホルム)中東 (バーレーン)南米 (サンパウロ)

本日よりご利用いただけます。

— seb