BLOB のコピー

Copy Blob 操作は、BLOB をストレージ アカウント内にコピーします。

バージョン 2012-02-12 以降では、操作の Copy Blob ソースは、任意の Azure ストレージ アカウントでコミットされた BLOB にすることができます。

バージョン 2015-02-21 以降では、操作の Copy Blob ソースは任意の Azure ストレージ アカウント内の Azure ファイルにすることができます。

注意

2012 年 6 月 7 日以降に作成されたストレージ アカウントでのみ、操作を別の Copy Blob ストレージ アカウントからコピーできます。

要求

要求は Copy Blob 次のように構築できます。 HTTPS をお勧めします。 myaccount をストレージ アカウントの名前に、mycontainer をコンテナーの名前に、myblob をターゲット BLOB の名前に置き換えます。

バージョン 2013-08-15 以降では、コピー先 BLOB がソース BLOB と同じアカウントにある場合は、ターゲット BLOB の共有アクセス署名 (SAS) を指定できます。 バージョン 2015-04-05 以降では、ターゲット BLOB が別のストレージ アカウントにある場合は、共有アクセス署名を指定することもできます。

PUT メソッド要求 URI HTTP バージョン
https://myaccount.blob.core.windows.net/mycontainer/myblob HTTP/1.1

エミュレートされたストレージ サービスの URI

エミュレートされたストレージ サービスに対して要求を行う場合は、エミュレーター ホスト名とAzure Blob Storage ポートを として127.0.0.1:10000指定し、その後にエミュレートされたストレージ アカウントの名前を指定します。

PUT メソッド要求 URI HTTP バージョン
http://127.0.0.1:10000/devstoreaccount1/mycontainer/myblob HTTP/1.1

詳細については、ローカルでの Azure Storage の開発に Azurite エミュレーターを使用する方法に関するページを参照してください。

URI パラメーター

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

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

要求ヘッダー

次の表では、必須および省略可能な要求ヘッダーについて説明します。

要求ヘッダー 説明
Authorization 必須です。 承認スキーム、アカウント名、署名を指定します。 詳細については、「Azure Storage への要求を承認する」をご覧ください。
Date または x-ms-date 必須です。 要求に対して協定世界時 (UTC) を指定します。 詳細については、「Azure Storage への要求を承認する」をご覧ください。
x-ms-version すべての承認された要求に必要です。 詳細については、「Azure Storage サービスのバージョン管理」を参照してください。
x-ms-meta-name:value 省略可能。 BLOB に関連付けられているユーザー定義の名前と値のペアを指定します。 名前と値のペアが指定されていない場合、操作はメタデータをソース BLOB またはファイルからコピー先 BLOB にコピーします。 1 つ以上の名前と値のペアを指定すると、指定したメタデータを使用して宛先 BLOB が作成され、メタデータはソース BLOB またはファイルからコピーされません。

バージョン 2009-09-19 以降では、メタデータ名は C# 識別子の名前付け規則に従う必要があります。 詳細については、「コンテナー、 BLOB、およびメタデータの名前付けと参照」を参照してください。
x-ms-tags 省略可能。 指定されたクエリ文字列エンコードタグを BLOB に設定します。 タグはコピー 元からコピーされません。 詳細については、「解説」をご覧ください。 バージョン 2019-12-12 以降でサポートされています。
x-ms-source-if-modified-since 省略可能。 DateTime 値。 この条件ヘッダーを指定すると、コピー元 BLOB が指定した日付/時刻以降に変更された場合にのみ BLOB がコピーされます。 ソース BLOB が変更されていない場合、Blob Storage は状態コード 412 (前提条件に失敗しました) を返します。 ソースが Azure ファイルの場合、このヘッダーを指定することはできません。
x-ms-source-if-unmodified-since 省略可能。 DateTime 値。 この条件ヘッダーを指定すると、コピー元 BLOB が指定した日付/時刻以降に変更されなかった場合にのみ BLOB がコピーされます。 ソース BLOB が変更された場合、Blob Storage は状態コード 412 (前提条件に失敗しました) を返します。 ソースが Azure ファイルの場合、このヘッダーを指定することはできません。
x-ms-source-if-match 省略可能。 ETag 値。 ソース BLOB の値が指定した値と一致する場合 ETag にのみ、この条件付きヘッダーを指定してコピー元 BLOB をコピーします。 値が一致しない場合、Blob Storage は状態コード 412 (前提条件に失敗) を返します。 ソースが Azure ファイルの場合、このヘッダーを指定することはできません。
x-ms-source-if-none-match 省略可能。 ETag 値。 BLOB の値が指定した値と一致しない場合 ETag にのみ、この条件付きヘッダーを指定して BLOB をコピーします。 値が同じ場合、Blob Storage は状態コード 412 (前提条件失敗) を返します。 ソースが Azure ファイルの場合、このヘッダーを指定することはできません。
If-Modified-Since 省略可能。 DateTime 値。 この条件ヘッダーを指定すると、コピー先 BLOB が指定した日付/時刻以降に変更された場合にのみ BLOB がコピーされます。 ターゲット BLOB が変更されていない場合、Blob Storage は状態コード 412 (前提条件に失敗) を返します。
If-Unmodified-Since 省略可能。 DateTime 値。 この条件ヘッダーを指定すると、コピー先 BLOB が指定した日付/時刻以降に変更されなかった場合にのみ BLOB がコピーされます。 コピー先 BLOB が変更された場合、Blob Storage は状態コード 412 (前提条件に失敗) を返します。
If-Match 省略可能。 ETag 値。 指定した値がETag既存のターゲット BLOB の値と一致する場合にのみ、この条件付きヘッダーのETag値を指定ETagして BLOB をコピーします。 値が一致しない場合、Blob Storage は状態コード 412 (前提条件に失敗) を返します。
If-None-Match 省略可能。 ETag値、またはワイルドカード文字 (*)。

指定したETag値がターゲット BLOB の値と一致しない場合にのみ、この条件付きヘッダーの値をETag指定ETagして BLOB をコピーします。

ワイルドカード文字 (*) を指定して、コピー先 BLOB が存在しない場合にのみ操作を実行します。

指定した条件が満たされていない場合、Blob Storage は状態コード 412 (前提条件に失敗) を返します。
x-ms-copy-source:name 必須です。 ソース BLOB またはファイルの名前を指定します。

バージョン 2012-02-12 以降、この値には、BLOB を指定する最大 2 kibibytes (KiB) の長さの URL を指定できます。 値は、要求 URI に表示されるように URL エンコードする必要があります。

同じストレージ アカウント内のソース BLOB に対する読み取り操作は、共有キーを使用して承認できます。 バージョン 2017-11-09 以降では、Azure Active Directory (Azure AD) を使用して、ソース BLOB の読み取り操作を承認することもできます。 ただし、ソースが別のストレージ アカウント内の BLOB の場合は、ソース BLOB がパブリックであるか、共有アクセス署名を介してアクセスが承認されている必要があります。 ソース BLOB がパブリックの場合、コピー操作を実行するための承認は必要ありません。

バージョン 2015-02-21 以降では、ソース オブジェクトは Azure Files 内のファイルにすることができます。 ソース オブジェクトが BLOB にコピーされるファイルの場合、ソース ファイルは、同じアカウントに存在する場合でも、別のアカウントに存在する場合でも、共有アクセス署名を通じて承認される必要があります。

2012 年 6 月 7 日以降に作成されたストレージ アカウントのみ、操作を別の Copy Blob ストレージ アカウントからコピーできます。

ソース オブジェクト URL の例を次に示します。

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

ソース オブジェクトがAzure Filesのファイルである場合、ソース URL は次の形式を使用します。 URL には、ファイルの有効な SAS トークンを含める必要があることに注意してください。

- https://myaccount.file.core.windows.net/myshare/mydirectorypath/myfile?sastoken

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 (前提条件が失敗) で操作が失敗します。

このヘッダーが指定されていて、ターゲット BLOB に現在アクティブなリースがない場合、操作は状態コード 412 (前提条件に失敗) で失敗します。

バージョン 2012-02-12 以降では、この値はリースされた BLOB のアクティブな無限リースを指定する必要があります。 有限期間リース ID が状態コード 412 (前提条件に失敗しました) で失敗します。
x-ms-source-lease-id: <ID> 2012-02-12 より前のバージョンでは省略可能 (2012-02-12 以降ではサポートされていません)。 指定されたリース ID がソース BLOB の Copy Blob アクティブなリース ID と一致する場合にのみ、このヘッダーを指定して操作を実行します。

このヘッダーが指定されていて、ソース BLOB に現在アクティブなリースがない場合、操作は状態コード 412 (前提条件に失敗しました) で失敗します。
x-ms-client-request-id 省略可能。 ログ記録の構成時にログに記録される 1 KiB 文字の制限を持つクライアント生成の不透明な値を提供します。 このヘッダーを使用して、クライアント側のアクティビティとサーバーが受信する要求を関連付けるよう強くお勧めします。
x-ms-access-tier 省略可能。 ターゲット BLOB に設定する層を指定します。 このヘッダーは、バージョン 2017-04-17 以降の Premium アカウントのページ BLOB 用です。 サポートされているレベルの完全な一覧については、 VM の高パフォーマンス Premium Storage とマネージド ディスクに関するページを参照してください。 このヘッダーは、ブロック BLOB のバージョン 2018-11-09 以降でサポートされています。 ブロック BLOB の階層化は、Blob Storage または General Purpose v2 アカウントでサポートされています。 有効な値は、 HotCoolCold および です Archiveメモ:Cold レベルは、バージョン 2021-12-02 以降でサポートされています。 ブロック BLOB の階層化の詳細については、「 ホット、クール、アーカイブのストレージ層」を参照してください。
x-ms-rehydrate-priority 省略可能。 アーカイブされた BLOB のリハイドレートに使用する優先度を示します。 このヘッダーは、ブロック BLOB のバージョン 2019-02-02 以降でサポートされています。 有効な値は HighStandard です。 BLOB の優先度は 1 回だけ設定できます。 このヘッダーは、同じ BLOB に対する後続の要求では無視されます。 このヘッダーのない既定の優先度は です Standard
x-ms-seal-blob 省略可能。 バージョン 2019-12-12 以降でサポートされています。 このヘッダーは、追加 BLOB に対してのみ有効です。 コピー操作が完了した後、コピー先 BLOB がシールされます。
x-ms-immutability-policy-until-date バージョン 2020-06-12 以降。 BLOB に設定する保持期間の日付を指定します。 これは、BLOB を変更または削除から保護できる日付です。 RFC1123 形式に従います。
x-ms-immutability-policy-mode バージョン 2020-06-12 以降。 BLOB に設定する不変ポリシー モードを指定します。 有効な値は unlockedlocked です。 値は unlocked 、保持期間の日付を増減することで、ユーザーがポリシーを変更できることを示します。 値は locked 、これらのアクションが禁止されていることを示します。
x-ms-legal-hold バージョン 2020-06-12 以降。 BLOB に設定する訴訟ホールドを指定します。 有効な値は truefalse です。

この操作では、指定した条件が x-ms-if-tags 満たされた場合にのみ、条件付きヘッダーと x-ms-source-if-tags 条件付きヘッダーが成功するようにサポートされます。 詳細については、「 Blob Storage 操作の条件付きヘッダーを指定する」を参照してください。

要求本文

[なし] :

Response

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

status code

バージョン 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 Storage のバージョンを示します。 このヘッダーはバージョン 2009-09-19 以降で行った要求に対して返されます。
Date サービスが応答を送信した時刻を示す UTC 日付/時刻値。
x-ms-copy-id: <id> バージョン 2012-02-12 以降。 このコピー操作の文字列識別子を提供します。 または Get Blob PropertiesGet Blob使用して、このコピー操作の状態をチェックするか、 にAbort Copy Blob渡して保留中のコピー操作を取り消します。
x-ms-copy-status: <success ¦ pending> バージョン 2012-02-12 以降。 次の値を使用して、コピー操作の状態を示します。

- success: 操作が正常に完了しました。
- pending: 操作が進行中です。
x-ms-version-id: <DateTime> バージョン 2019-12-12 以降。 バージョンによって BLOB を一意に識別します。 この不透明な値を後続の要求で使用して、このバージョンの BLOB にアクセスできます。
x-ms-client-request-id 要求と対応する応答のトラブルシューティングに使用できます。 このヘッダーの値は、要求に存在し、その値 x-ms-client-request-id が最大 1,024 文字の可視 ASCII 文字である場合、ヘッダーの値と同じです。 ヘッダーが x-ms-client-request-id 要求に存在しない場合、このヘッダーは応答に存在しません。

応答本文

[なし] :

応答のサンプル

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

Response Status:  
HTTP/1.1 202 Accepted  
  
Response Headers:   
Last-Modified: <date>   
ETag: "0x8CEB669D794AFE2"  
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0  
x-ms-request-id: cc6b209a-b593-4be1-a38a-dde7c106f402  
x-ms-version: 2015-02-21  
x-ms-copy-id: 1f812371-a41d-49e6-b123-f4b542e851c5  
x-ms-copy-status: pending
x-ms-version-id: <DateTime>  
Date: <date>  
  

承認

Azure Storage でデータ アクセス操作を呼び出す場合は、承認が必要です。 次の表は、操作の宛先オブジェクトとソース オブジェクトを承認する方法を Copy Blob 示しています。

オブジェクトの種類 Azure AD 認可 Shared Access Signature (SAS) 承認 共有キーの承認 (または共有キー ライト)
宛先 BLOB Yes はい はい
同じストレージ アカウント内のソース BLOB はい はい はい
別のストレージ アカウント内のソース BLOB いいえ はい いいえ

要求で要求ヘッダーにタグが x-ms-tags 指定されている場合、呼び出し元は BLOB タグの設定 操作の承認要件を満たす必要があります。

以下で説明するように、操作を Copy Blob 承認できます。 別のストレージ アカウント内のソース BLOB は、 読み取り (r) アクセス許可を持つ SAS トークンを介して個別に承認する必要があることに注意してください。 ソース BLOB の承認の詳細については、要求ヘッダー x-ms-copy-sourceの詳細を参照してください。

Azure Storage では、Azure Active Directory (Azure AD) を使用して BLOB データへの要求を認可することがサポートされています。 Azure AD では、Azure ロールベースのアクセス制御 (Azure RBAC) を使用して、セキュリティ プリンシパルにアクセス許可を付与できます。 セキュリティ プリンシパルには、ユーザー、グループ、アプリケーション サービス プリンシパル、または Azure マネージド ID を指定できます。 セキュリティ プリンシパルは、Azure AD によって認証されて、OAuth 2.0 トークンを返します。 その後、そのトークンを、Blob service に対する要求を認可するために使用できます。

Azure AD を使用した承認の詳細については、「Azure Active Directory を使用して BLOB へのアクセスを承認する」を参照してください。

アクセス許可

Azure AD ユーザー、グループ、またはサービス プリンシパルが操作を呼び出 Copy Blob すために必要な RBAC アクションと、このアクションを含む最小特権の組み込み Azure RBAC ロールを次に示します。

宛先 BLOB

同じストレージ アカウント内のソース BLOB

Azure RBAC を使用したロールの割り当ての詳細については、「 BLOB データにアクセスするための Azure ロールの割り当て」を参照してください。

解説

バージョン 2012-02-12 以降では、操作は Copy Blob 非同期的に完了できます。 この操作は、コピー操作をチェックまたは取り消すために使用できるコピー ID を返します。 コピー操作の非同期性により、Blob Storage はベスト エフォートベースで BLOB をコピーします。 BLOB サービスは、サーバー リソースが他のタスクで使用されていない場合に BLOB をコピーするため、コピーが指定された期間内にすぐに開始または完了することは保証されません。

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

バージョン 2015-02-21 以降では、コピー操作のソースを Azure Files 内のファイルにすることもできます。 ソースがファイルの場合、コピー先はブロック BLOB である必要があります。

アカウント内に保留中の Copy Blob 操作が複数ある場合、これらの操作は順番に処理されます。 宛先 BLOB には、未処理 Copy Blob の操作を 1 つだけ指定できます。 言い換えると、BLOB を複数の保留中 Copy Blob の操作の宛先にすることはできません。 既にコピー操作が保留中のコピー先 BLOB に BLOB をコピーしようとすると、状態コード 409 (競合) で失敗します。

2012 年 6 月 7 日以降に作成されたストレージ アカウントのみ、操作を別の Copy Blob ストレージ アカウントからコピーできます。 2012 年 6 月 7 日より前に作成されたアカウントに別のストレージ アカウントからコピーしようとすると、状態コード 400 (無効な要求) で失敗します。

操作では Copy Blob 、常にソース BLOB またはファイル全体がコピーされます。 バイト範囲またはブロックのセットのコピーはサポートされていません。

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

  • ソース BLOB は、別の名前の宛先 BLOB にコピーできます。 コピー先 BLOB には、同じ BLOB の種類 (ブロック、追加、またはページ) の既存の BLOB を指定することも、コピー操作で作成する新しい BLOB を指定することもできます。

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

  • Azure Filesのソース ファイルをコピー先 BLOB にコピーできます。 コピー先 BLOB は、既存のブロック BLOB にすることも、コピー操作によって作成される新しいブロック BLOB にすることもできます。 ファイルからページ BLOB またはアペンド BLOB へのコピーはサポートされていません。

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

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

ページ BLOB からコピーする場合、Blob Storage によって、ソース BLOB の長さのコピー先ページ BLOB が作成されます。 最初は、ページ BLOB にすべてのゼロが含まれます。 その後、コピー元ページの範囲が列挙され、空以外の範囲がコピーされます。

ブロック BLOB または追加 BLOB の場合、Blob Storage は、この操作から戻る前に長さが 0 のコミット済み BLOB を作成します。

ブロック BLOB からコピーする場合は、コミットされたすべてのブロックとそのブロック ID がコピーされます。 コミットされていないブロックはコピーされません。 コピー操作の最後に、コピー先 BLOB のコミット済みブロック数はソースと同じです。

追加 BLOB からコピーすると、コミットされたすべてのブロックがコピーされます。 コピー操作の最後に、コピー先 BLOB のコミット済みブロックの数が、ソース BLOB と同じか少なくなります。

すべての BLOB の種類について、コピー先 BLOB で または Get Blob Properties を呼び出Get Blobして、コピー操作の状態をチェックできます。 コピー操作が完了すると、最終的な BLOB がコミットされます。

コピー操作のソースに値が指定 ETag されている場合、コピー操作の進行中にソースに変更を加えると、その操作は失敗します。 コピーの進行中にコピー先 BLOB を変更しようとすると、状態コード 409 (競合) で失敗します。 コピー先 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 (ページ BLOB の場合のみ)

  • x-ms-committed-block-count (追加 BLOB のみ、バージョン 2015-02-21 の場合のみ)

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

コピー先 BLOB は、常にソース BLOB と同じサイズです。 宛先 BLOB のヘッダーの Content-Length 値は、ソース BLOB のそのヘッダーの値と一致します。

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

ヘッダーが x-ms-tags 宛先 BLOB のタグを提供する場合は、クエリ文字列でエンコードする必要があります。 タグ キーと値は、「 BLOB タグの設定」で指定されている名前付けと長さの要件に準拠している必要があります。

ヘッダーには x-ms-tags 、最大 2 キロビットのタグを含めることができます。 さらにタグが必要な場合は、 操作を使用します Set Blob Tags

ヘッダーに x-ms-tags タグが指定されていない場合、タグはソース BLOB からコピーされません。

リースされた BLOB のコピー

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

コピー先 BLOB にアクティブな無限リースがある場合は、Copy Blob 操作への呼び出しで、そのリース ID を指定する必要があります。 指定したリースがアクティブな有限期間リースの場合、この呼び出しは状態コード 412 (前提条件失敗) で失敗します。 コピー操作が保留中の間、移行先 BLOB のリース操作は状態コード 409 (競合) で失敗します。 コピー操作中に、ソースとは異なる名前のコピー先 BLOB にコピーする場合、ソースと同じ名前の宛先 BLOB にコピーする場合、またはベース BLOB を介してスナップショットを昇格する場合でも、コピー先 BLOB の無限リースはロックされます。

クライアントでまだ存在しない BLOB のリース ID が指定されている場合、Blob Storage はバージョン 2013-08-15 以降に対して行われた要求の状態コード 412 (前提条件に失敗しました) を返します。 以前のバージョンの場合、Blob Storage は状態コード 201 (作成済み) を返します。

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

ソース BLOB がコピーされると、ソース BLOB のスナップショットまたはバージョンはコピー先にコピーされません。 コピー先 BLOB がコピーで上書きされると、コピー先 BLOB に関連付けられているスナップショットまたはバージョンは、その名前の下にそのまま残ります。

オンライン層 (ホットまたはクール) にある限り、コピー操作を実行して、スナップショットをベース BLOB 上に昇格させることができます。 これにより、以前のバージョンの BLOB を復元できます。 スナップショットは元のままで、スナップショットのコピー先が、読み取りおよび書き込みできるコピーで上書きされます。

BLOB バージョンのコピー

オンライン層 (ホットまたはクール) にある限り、コピー操作を実行して、ベース BLOB を介してバージョンを昇格させることができます。 これにより、以前のバージョンの BLOB を復元できます。 バージョンは残りますが、コピー先は読み取りと書き込みの両方が可能なコピーで上書きされます。

アーカイブされた BLOB のコピー

バージョン 2018-11-09 以降では、アーカイブされた BLOB を同じストレージ アカウント内の新しい BLOB にコピーできます。 ソース BLOB はアーカイブ層に残ります。 ソース BLOB がアーカイブされた BLOB の場合、要求には、ターゲット BLOB の層を x-ms-access-tier 示す ヘッダーが含まれている必要があります。 宛先 BLOB はオンライン層に存在する必要があります。 アーカイブ層の BLOB にコピーすることはできません。

バージョン 2021-02-12 以降では、コピー先アカウントがソース アカウントと同じリージョンにある限り、アーカイブされた BLOB を別のストレージ アカウントのオンライン層にコピーできます。

ソース BLOB がリハイドレートされている場合、要求は失敗する可能性があります。

ブロック BLOB レベルでの階層化の詳細については、「 ホット、クール、アーカイブのストレージ層」を参照してください。

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

操作が Copy Blob 非同期的に完了する場合は、次の表を使用して、返された状態コードに基づいて次の手順を決定します。

status code 説明
202 (Accepted), x-ms-copy-status: success コピー操作が正常に完了しました。
202 (Accepted), x-ms-copy-status: pending コピー操作が完了していません。 を使用 Get Blob Properties してターゲット BLOB をポーリングし、操作が x-ms-copy-status 完了または失敗するまでヘッダーを調べます。
4xx、500、または 503 コピー操作に失敗しました。

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

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

コピー操作中にコピー先 BLOB を変更またはスナップショットしようとすると、状態コード 409 (競合)、"Blob のコピーが進行中" で失敗します。

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

操作が Copy Blob 同期的に完了した場合は、次の表を使用して、コピー操作の状態を確認します。

status code 説明
202 (Accepted), x-ms-copy-status: success コピー操作が正常に完了しました。
4xx、500、または 503 コピー操作に失敗しました。

レベルは Premium Storage レベルに継承されます。 ブロック BLOB の場合、転送先 BLOB を上書きすると、指定されていない場合 x-ms-access-tier 、ターゲットからホット層またはクール層が継承されます。 アーカイブされた BLOB の上書きは失敗します。 ブロック BLOB レベルでの階層化の詳細については、「 ホット、クール、アーカイブのストレージ層」を参照してください。

課金

操作の Copy Blob 宛先アカウントは、コピーを開始する 1 つのトランザクションに対して課金されます。 コピー先アカウントでは、コピー操作の状態を取り消すか要求する要求ごとに 1 つのトランザクションも発生します。

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

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

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

関連項目

Azure Storage への要求を承認する
状態コードとエラー コード
Blob Storage のエラー コード
スナップショットで料金が発生する方法を理解する
BLOB のコピーを中止する