セールス: 1-800-867-1380

Copy Blob

更新日: 2014年10月

Copy Blob 操作は、BLOB をストレージ アカウント内にコピーします。バージョン 2012-02-12 以降では、Copy Blob 操作のコピー元は、すべての Azure ストレージ アカウントのコミット済み BLOB として使用できます。

noteメモ
2012 年 6 月 7 日以降に作成されたストレージ アカウントについてのみ、Copy Blob 操作による他のストレージ アカウントからのコピーが許可されています。

Copy Blob 要求の構成は次のとおりです。HTTPS が推奨されます。myaccount をストレージ アカウントの名前で、mycontainer をコンテナーの名前で、myblob をコピー先 BLOB の名前でそれぞれ置き換えます。バージョン 2013-08-15 以降では、コピー先 BLOB の共有アクセス署名を指定できます。

 

  PUT メソッド要求の URI HTTP バージョン

https://myaccount.blob.core.windows.net/mycontainer/myblob

HTTP/1.1

エミューレートされたストレージ サービスに対する要求では、エミュレーターのホスト名と BLOB サービス ポートを 127.0.0.1:10000 と指定し、その後にエミューレートされたストレージ アカウント名を指定します。

 

  PUT メソッド要求の URI HTTP バージョン

http://127.0.0.1:10000/devstoreaccount1/mycontainer/myblob

HTTP/1.1

詳細については、「開発とテストのための Azure のストレージ エミュレーター使用」を参照してください。

次の追加パラメーターを要求の URI で指定できます。

 

Parameter 説明

timeout

省略可能。timeout パラメーターは、秒単位で表されます。詳細については、「BLOB サービス操作のタイムアウトの設定」を参照してください。

必須要求ヘッダーと省略可能な要求ヘッダーを次の表に示します。

 

要求ヘッダー 説明

Authorization

必須。認証スキーム、アカウント名、および署名を指定します。詳細については、「Azure ストレージ サービスの認証」を参照してください。

Date またはx-ms-date

必須。要求の世界協定時刻 (UTC) を指定します。詳細については、「Azure ストレージ サービスの認証」を参照してください。

x-ms-version

認証されたすべての要求について必須です。詳細については、「Azure ストレージ サービスのバージョン設定」を参照してください。

x-ms-meta-name:value

省略可能。BLOB に関連付けられたユーザー定義の名前と値のペアを指定します。名前と値のペアを指定しない場合、コピー元 BLOB のメタデータがコピー先 BLOB にコピーされます。1 つまたは複数の名前と値のペアを指定した場合、指定したメタデータでコピー先 BLOB が作成され、メタデータはコピー元 BLOB からコピーされません。

バージョン 2009-09-19 以降では、メタデータの名前は C# 識別子の名前付け規則に従う必要があります。 詳細については、「コンテナー、BLOB、およびメタデータの名前付けおよび参照」を参照してください。

x-ms-source-if-modified-since

省略可能。DateTime 値。この条件ヘッダーを指定すると、コピー元 BLOB が指定した日付/時刻以降に変更された場合にのみ BLOB がコピーされます。コピー元 BLOB が変更されていない場合、BLOB サービスはステータス コード 412 (Precondition Failed) を返します。

x-ms-source-if-unmodified-since

省略可能。DateTime 値。この条件ヘッダーを指定すると、コピー元 BLOB が指定した日付/時刻以降に変更されなかった場合にのみ BLOB がコピーされます。コピー元 BLOB が変更されている場合、BLOB サービスはステータス コード 412 (Precondition Failed) を返します。

x-ms-source-if-match

省略可能。ETag 値。この条件ヘッダーを指定すると、ETag が指定した値に一致する場合にのみコピー元 BLOB がコピーされます。ETag 値が一致しない場合、BLOB サービスはステータス コード 412 (Precondition Failed) を返します。

x-ms-source-if-none-match

省略可能。ETag 値。この条件ヘッダーを指定すると、ETag が指定した値に一致しない場合にのみ BLOB がコピーされます。値が一致する場合、BLOB サービスはステータス コード 412 (Precondition Failed) を返します。

If-Modified-Since

省略可能。DateTime 値。この条件ヘッダーを指定すると、コピー先 BLOB が指定した日付/時刻以降に変更された場合にのみ BLOB がコピーされます。コピー先 BLOB が変更されていない場合、BLOB サービスはステータス コード 412 (Precondition Failed) を返します。

If-Unmodified-Since

省略可能。DateTime 値。この条件ヘッダーを指定すると、コピー先 BLOB が指定した日付/時刻以降に変更されなかった場合にのみ BLOB がコピーされます。コピー先 BLOB が変更されている場合、BLOB サービスはステータス コード 412 (Precondition Failed) を返します。

If-Match

省略可能。ETag 値。この条件ヘッダーの ETag 値を指定すると、指定した ETag 値が既存のコピー先 BLOB の ETag 値に一致する場合にのみ BLOB がコピーされます。コピー先 BLOB の ETag が If-Match に指定した ETag と一致しない場合、BLOB サービスはステータス コード 412 (Precondition Failed) を返します。

If-None-Match

省略可能。ETag 値またはワイルドカード文字 (*)。

この条件ヘッダーの ETag 値を指定すると、指定した ETag 値がコピー先 BLOB の ETag 値に一致しない場合にのみ BLOB がコピーされます。

ワイルドカード文字 (*) を指定すると、コピー先 BLOB が存在しない場合に限り操作が実行されます。

指定した条件を満たしていない場合、BLOB サービスはステータス コード 412 (Precondition Failed) を返します。

x-ms-copy-source:name

必須。コピー元 BLOB の名前を指定します。

バージョン 2012-02-12 以降では、この値は BLOB を指定する URL (最大長は 2 KB) です。この値は要求 URI に含まれるため、URL でエンコードされる必要があります。同じアカウントのコピー元 BLOB はプライベートにできますが、他のアカウントの BLOB はパブリックであるか、この URL に含まれる資格情報 (共有アクセス署名など) を受け入れる必要があります。2012 年 6 月 7 日以降に作成されたストレージ アカウントについてのみ、Copy Blob 操作による他のストレージ アカウントからのコピーが許可されています。Microsoft では、可能な場合は HTTPS を使用することをお勧めします。例:

  • https://myaccount.blob.core.windows.net/mycontainer/myblob

  • https://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot=<DateTime>

2012-02-12 より前のバージョンでは、同じアカウント内でのみ BLOB をコピーできます。コピー元の名前で使用できる形式は次のとおりです。

  • 名前付きコンテナー内の BLOB: /accountName/containerName/blobName

  • 名前付きコンテナー内のスナップショット: /accountName/containerName/blobName?snapshot=<DateTime>

  • ルート コンテナー内の BLOB: /accountName/blobName

  • ルート コンテナー内のスナップショット: /accountName/blobName?snapshot=<DateTime>

x-ms-lease-id:<ID>

コピー先 BLOB にアクティブなリースが存在する場合は必須です。このヘッダーに指定するリース ID は、コピー先 BLOB のリース ID と一致している必要があります。要求にリース ID が含まれていないか、リース ID が無効な場合、操作はステータス コード 412 (Precondition Failed) で失敗します。

このヘッダーを指定すると、コピー先 BLOB に現在アクティブなリースが存在しない場合にも、操作はステータス コード 412 (Precondition Failed) で失敗します。

バージョン 2012-02-12 以降では、この値では、アクティブな無限リースを、リースされた BLOB に対して指定する必要があります。期間が有限のリース ID は 412 (Precondition Failed) で失敗します。

x-ms-source-lease-id: <ID>

2012-02-12 より前のバージョンでは省略可能 (2012-02-12 以降ではサポートされていません)。このヘッダーを指定すると、指定されたリース ID がコピー元 BLOB のアクティブなリース ID と一致する場合にのみ、Copy Blob 操作が実行されます。

このヘッダーを指定すると、コピー元 BLOB に現在アクティブなリースが存在しない場合にも、操作はステータス コード 412 (Precondition Failed) で失敗します。

x-ms-client-request-id

省略可能。Storage Analytics Logging が有効な場合に解析ログに記録される、クライアントで生成された非透過の値を 1 KB の文字制限付きで提供します。クライアント側のアクティビティとサーバーが受け取る要求を相互に関連付けるには、このヘッダーを使用することを強くお勧めします。詳細については、「Storage Analytics Logging について」および「Azure のログ: ログを使用した、ストレージ要求の追跡」を参照してください。

ありません。

応答には、HTTP 状態コードおよび一連の応答ヘッダーが含まれています。

バージョン 2012-02-12 以降では、操作が正常に終了すると、ステータス コード 202 (Accepted) が返されます。

2012-02-12 より前のバージョンでは、操作が正常に終了すると、ステータス コード 201 (Created) が返されます。

ステータス コードの詳細については、「ステータス コードとエラー コード」を参照してください。

この操作の応答には、次のヘッダーが含まれています。応答に追加の標準 HTTP ヘッダーが含まれる場合もあります。標準ヘッダーはすべて、HTTP/1.1 プロトコル仕様に準拠しています。

 

応答ヘッダー 説明

ETag

バージョン 2012-02-12 以降では、コピーが完了すると、コピー先 BLOB の ETag が含まれます。コピーが完了していない場合は、コピーの開始時に作成された空の BLOB の ETag が含まれます。

2012-02-12 より前のバージョンでは、コピー先 BLOB の ETag が返されます。

バージョン 2011-08-18 以降では、ETag 値は引用符で囲まれます。

Last-Modified

コピー先 BLOB へのコピー操作が完了した日付/時刻が返されます。

x-ms-request-id

このヘッダーは要求を一意に識別するので、要求のトラブルシューティングに使用できます。詳細については、「API 操作のトラブルシューティング」を参照してください。

x-ms-version

要求の実行に使用する BLOB サービスのバージョンを示します。このヘッダーはバージョン 2009-09-19 以降で行った要求に対して返されます。

Date

サービスによって生成される、応答の開始時刻を示す UTC 日付/時刻値。

x-ms-copy-id: <id>

この操作は、バージョン 2012-02-12 以降で使用できます。このコピー操作の文字列の識別子。Get Blob または Get Blob Properties と一緒に使用してこのコピー操作のステータスを確認するか、Abort Copy Blob に渡して保留中のコピーを中止します。

x-ms-copy-status: <success | pending>

この操作は、バージョン 2012-02-12 以降で使用できます。コピー操作の状態。次の値を使用できます。

  • success: コピーが正常に完了しました。

  • pending: コピーは進行中です。

ありません。

次に示すのは、BLOB コピー要求に対する応答の例です。

Response Status:
HTTP/1.1 202 Accepted

Response Headers: 
Last-Modified: Thu, 09 Feb 2012 23:30:19 GMT 
ETag: "0x8CEB669D794AFE2"
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-request-id: cc6b209a-b593-4be1-a38a-dde7c106f402
x-ms-version: 2012-02-12
x-ms-copy-id: 1f812371-a41d-49e6-b123-f4b542e851c5
x-ms-copy-status: pending
Date: Thu, 09 Feb 2012 23:30:18 GMT

この操作は、アカウント所有者が呼び出すことができます。バージョン 2013-08-15 以降に対する要求の場合、同じアカウント内でのコピー操作では、コピー先 BLOB またはコンテナーへの書き込みアクセス許可がある共有アクセス署名がサポートされます。要求に対して指定した共有アクセス署名はコピー先 BLOB にのみ適用されることに注意してください。x-ms-copy-source 要求ヘッダーの詳細で説明されているとおり、コピー元 BLOB へのアクセスは個別に承認されます。

バージョン 2012-02-12 以降では、Copy Blob 操作は非同期的に実行できます。この操作は、コピー操作のチェックまたは中止に使用できるコピー ID を返します。BLOB サービスは、ベストエフォート方式で BLOB をコピーします。

コピー操作のコピー元 BLOB としては、ブロック BLOB、ページ BLOB、またはスナップショットが対象になります。コピー先 BLOB が既に存在する場合、BLOB の種類はコピー元 BLOB と同じである必要があります。既存のコピー先 BLOB はすべて上書きされます。コピー先 BLOB は、コピー操作の進行中は変更できません。

アカウント内に保留中の Copy Blob 操作が複数ある場合、これらの操作は順番に処理されます。コピー先 BLOB に含めることができる未処理の BLOB コピー操作は 1 つだけです。つまり、BLOB を、複数の保留 Copy Blob 操作のコピー先にすることはできません。保留中のコピーが既に含まれるコピー先 BLOB に対して Copy Blob を試みると、ステータス コード 409 (Conflict) で失敗します。

2012 年 6 月 7 日以降に作成されたストレージ アカウントについてのみ、Copy Blob 操作による他のストレージ アカウントからのコピーが許可されています。別のストレージ アカウントから、2012 年 6 月 7 日より前に作成されたアカウントにコピーしようとすると、ステータス コード 400 (Bad Request) で失敗します。

Copy Blob 操作は、常にコピー元 BLOB 全体がコピーされます。バイトの範囲や一連のブロックのコピーはサポートされていません。

Copy Blob 操作は、次の方法で使用できます。

  • コピー元 BLOB を別の名前でコピー先 BLOB にコピーします。コピー先 BLOB には、同じ種類 (ブロックまたはページ) の既存の BLOB、またはコピー操作によって作成された新しい BLOB を使用できます。

  • コピー元 BLOB を同じ名前でコピー先 BLOB にコピーします。この場合、コピー元 BLOB を置換することになります。この方法でコピー操作を実行すると、コミットされていないブロックは削除され、BLOB のメタデータは上書きされます。

  • スナップショットをベース BLOB にコピーします。スナップショットをベース BLOB に昇格することにより、BLOB を以前のバージョンに復元できます。

  • スナップショットを別の名前でコピー先 BLOB にコピーします。結果となるコピー先 BLOB は書き込み可能な BLOB であり、スナップショットではありません。

ページ BLOB からコピーする場合、BLOB サービスでは、コピー元 BLOB の長さでコピー先ページ BLOB が作成されます。これは最初はすべてゼロになっています。その後、コピー元ページの範囲が列挙され、空以外の範囲がコピーされます。ブロック BLOB からコピーする場合は、コミットされたブロックとそのブロック ID すべてがコピーされます。コミット前のブロックはコピーされません。ブロック BLOB の場合、BLOB サービスでは、この操作から返される前に長さゼロのコミットされた BLOB が作成されます。どちらの BLOB の種類でも、コピー先 BLOB で Get Blob または Get Blob Properties を呼び出して、コピー操作のステータスを確認することができます。最終的な BLOB は、コピーの完了時にコミットされます。

コピー操作のコピー元によって ETag が指定されている場合、コピー中にコピー元が変更されると、コピーは失敗します。コピー中にコピー先 BLOB を変更しようとすると、409 (Conflict) で失敗します。コピー先 BLOB に無限リースがある場合、リース ID を Copy Blob に渡す必要があります。期間が有限のリースは許可されていません。

ブロック BLOB の ETag は、Copy Blob 操作の開始時およびコピーの終了時に変更されます。ページ BLOB の ETag は、Copy Blob 操作の開始時に変更されます。また、コピー中も引き続き頻繁に変更されます。ブロック BLOB の内容は、完全なコピーの完了後、GET でのみ表示できます。

BLOB のプロパティおよびメタデータのコピー

BLOB をコピーすると、次のシステム プロパティが同じ値でコピー先 BLOB にコピーされます。

  • Content-Type

  • Content-Encoding

  • Content-Language

  • Content-Length

  • Cache-Control

  • Content-MD5

  • Content-Disposition

  • x-ms-blob-sequence-number (for page blobs only)

ブロック BLOB の場合、コピー元 BLOB のコミットされたブロック リストもコピー先 BLOB にコピーされます。コミット前のブロックはコピーされません。

コピー先 BLOB のサイズは常にコピー元 BLOB と同じであるため、コピー先 BLOB の Content-Length ヘッダーの値はコピー元 BLOB の値と一致します。

コピー元 BLOB とコピー先 BLOB が同じである場合、Copy Blob を実行すると、コミット前のブロックが削除されます。この場合、メタデータが指定されていると、既存のメタデータは新しいメタデータで上書きされます。

リースされた BLOB のコピー

Copy Blob 操作はコピー元 BLOB からのみ読み取りを行うので、コピー元 BLOB のリース状態は重要ではありません。ただし、Copy Blob 操作では、コピーの開始時にコピー元 BLOB の ETag が保存されます。コピーが完了する前に ETag 値が変更された場合、コピーは失敗します。コピー元 BLOB が変更されないようにするには、コピー操作中にその BLOB をリースします。

コピー先 BLOB にアクティブな無限リースがある場合は、Copy Blob 操作への呼び出しで、そのリース ID を指定する必要があります。期間が有限のアクティブなリースを指定した場合、この呼び出しは、ステータス コード 412 (Precondition Failed) で失敗します。コピーが保留中の場合、コピー先 BLOB のリース操作はステータス コード 409 (Conflict) で失敗します。コピー元 BLOB からコピー先 BLOB に別の名前でコピーする場合、コピー元 BLOB と同じ名前でコピー先 BLOB にコピーする場合、スナップショットをそのベース BLOB に昇格する場合のいずれでも、コピー先 BLOB の無限リースはこの方法でコピー操作中にロックされます。まだ存在していない BLOB に対してクライアントがリース ID を指定した場合、BLOB サービスはバージョン 2013-08-15 以降に対する要求に対してはステータス コード 412 (Precondition Failed) を返します。それよりも前のバージョンでは、ステータス コード 201 (Created) を返します。

スナップショットのコピー

コピー元 BLOB をコピーしても、コピー元 BLOB のスナップショットはコピー先にコピーされません。コピー先 BLOB をコピーで上書きした場合、コピー先 BLOB に関連付けられたスナップショットは名前が変わっても元のままです。

コピー操作を実行して、スナップショット BLOB をベース BLOB に昇格できます。この方法により、BLOB を以前のバージョンに復元できます。スナップショットは元のままで、スナップショットのコピー先が、読み取りおよび書き込みできるコピーで上書きされます。

保留中のコピーの操作 (バージョン 2012-02-12 以降)

Copy Blob 操作は、非同期的にコピーを実行します。次の表を使用して、Copy Blob によって返されたステータス コードに基づいて、次に実行する手順を判断してください。

 

状態コード 意味

202 (Accepted), x-ms-copy-status:success

コピーが正常に完了しました。

202 (Accepted), x-ms-copy-status:pending

500 または 503

コピーは完了していません。Get Blob Properties を使用してコピー先 BLOB をポーリングし、コピーが完了または失敗するまで x-ms-copy-status を調べます。

4xx、500、または 503

コピーに失敗しました。

Copy Blob 操作の実行中および実行後、コピー先 BLOB のプロパティには、Copy Blob 操作のコピー ID とコピー元 BLOB の URL が含まれます。コピーが完了すると、BLOB サービスは、時間と結果の値 (successfailed、または aborted) をコピー先 BLOB のプロパティに書き込みます。操作が failed の場合、x-ms-copy-status-description ヘッダーには、エラー詳細の文字列が含まれます。

保留中の Copy Blob 操作は 2 週間でタイムアウトになります。2 週間経っても完了しなかったコピーの試行はタイムアウトになり、BLOB は空のままになります。また、x-ms-copy-status フィールドは failed に設定され、x-ms-copy-status-description は 500 (OperationCancelled) に設定されます。コピー中に断続的で致命的でないエラーが発生することで、コピーの進行が妨げられる可能性はありますが、これにより失敗することはありません。このような場合は、x-ms-copy-status-description によって断続的なエラーが記述されます。

コピー中にコピー先 BLOB の変更を試行したり、コピー先 BLOB のスナップショットの作成を試行したりすると、409 (Conflict) Copy Blob in Progress で失敗します。

Abort Copy Blob 操作を呼び出すと、x-ms-copy-status:aborted ヘッダーが表示され、コピー先 BLOB には、長さ 0 バイトでそのままのメタデータが設定されます。Copy Blob への元の呼び出しを繰り返すことで、再度コピーを試行できます。

課金

Copy Blob 操作のコピー先アカウントは、コピーを開始する 1 つのトランザクションに対して課金されます。中止の要求またはコピー操作のステータス要求ごとに 1 つのトランザクションが発生します。

コピー元 BLOB が別のアカウントにある場合は、コピー元アカウントでトランザクション コストが発生します。さらに、コピー元アカウントとコピー先アカウントの地域が異なる場合は (米国北部と米国南部など)、要求の転送に使用される帯域幅が、コピー元ストレージ アカウントに対して送信として課金されます。同じ地域内のアカウント間の送信は無料です。

コピー元 BLOB を、同じアカウント内の別の名前でコピー先 BLOB にコピーする場合は、新しい BLOB に対して追加ストレージ リソースを使用するため、これらの追加リソースによって使用されたストレージ アカウントの容量がコピー操作の課金対象になります。ただし、同じアカウント内でコピー元 BLOB 名とコピー先 BLOB 名が同じ場合は (たとえば、スナップショットをベース BLOB に昇格する場合)、バージョン 2012-02-12 以降に格納された追加のコピー メタデータ以外では追加料金が発生しません。

スナップショットを昇格してベース BLOB を置き換えると、スナップショットとベース BLOB は同一になります。両者間でブロックまたはページが共有されるため、コピー操作によってストレージ アカウントの容量使用に伴う追加料金は発生しません。スナップショットを別の名前でコピー先 BLOB にコピーする場合、新しい BLOB で使用されるストレージ リソースに対する追加料金が発生します。名前が異なる 2 つの BLOB は、内容が同一であってもブロックまたはページを共有できません。スナップショット コストのシナリオの詳細については、「スナップショットの課金方法について」を参照してください。

この情報は役に立ちましたか。
(残り 1500 文字)
フィードバックをいただき、ありがとうございました
表示:
© 2014 Microsoft