.NET を使用してソース オブジェクト URL から BLOB をコピーする

この記事では、.NET 用 Azure Storage クライアント ライブラリを使用してソース オブジェクト URL から BLOB をコピーする方法について説明します。 BLOB は、同じストレージ アカウント内のソースからでも、別のストレージ アカウント内のソースからでも、特定の URL に対する HTTP GET 要求を介して取得されたアクセス可能なオブジェクトからでもコピーできます。

この記事で説明するクライアント ライブラリ メソッドでは、Put Blob From URL および Put Block From URL REST API 操作を使用します。 これらのメソッドは、ストレージ アカウントにデータを移動する必要があり、ソース オブジェクトの URL がわかっているコピー シナリオに適しています。 非同期スケジュールを設定するコピー操作については、「.NET を使用して非同期スケジュールを使用して BLOB をコピーする」を参照してください。

前提条件

環境を設定する

既存のプロジェクトがない場合、このセクションでは、.NET 用 Azure Blob Storage クライアント ライブラリを使用するようにプロジェクトを設定する方法について説明します。 このステップには、パッケージのインストール、usingディレクティブの追加、承認されたクライアント オブジェクトの作成が含まれます。 詳細については、「Azure Blob Storage と .NET の概要」に関するページを参照してください。

パッケージをインストールする

プロジェクト ディレクトリから、dotnet add package コマンドを使用して、Azure Blob Storage と Azure ID のクライアント ライブラリのパッケージをインストールします。 Azure サービスへのパスワードレス接続には、Azure.Identity パッケージが必要です。

dotnet add package Azure.Storage.Blobs
dotnet add package Azure.Identity

using ディレクティブを追加します

次の using ディレクティブをコード ファイルの先頭に追加します。

using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Blobs.Specialized;

この記事の一部のコード例では、追加のusing ディレクティブが必要な場合があります。

クライアント オブジェクトの作成

アプリを Blob Storage に接続するには、 BlobServiceClientのインスタンスを作成します。 次の例では、認可のために DefaultAzureCredential を使用してクライアント オブジェクトを作成する方法を示します。

public BlobServiceClient GetBlobServiceClient(string accountName)
{
    BlobServiceClient client = new(
        new Uri($"https://{accountName}.blob.core.windows.net"),
        new DefaultAzureCredential());

    return client;
}

.NET アプリに依存関係の挿入用のサービス クライアントを登録できます。

また、特定のコンテナーまたは BLOB 用のクライアント オブジェクトを作成することもできます。 クライアント オブジェクトの作成と管理の詳細については、「データ リソースを操作するクライアント オブジェクトを作成および管理する」を参照してください。

承認

認可メカニズムには、コピー操作を実行するために必要なアクセス許可が必要です。 Microsoft Entra ID を使用した認可 (推奨) には、Azure RBAC 組み込みロールのストレージ BLOB データ共同作成者以上が必要です。 詳細については、「Put Blob From URL (REST API)」と「Put Block From URL (REST API)」の認可ガイダンスを参照してください。

ソース オブジェクト URL からの BLOB のコピーについて

Put Blob From URL 操作により、BLOB のコンテンツが特定の URL から読み取られる新しいブロック BLOB が作成されます。 操作は同期的に完了します。

ソースには、指定された URL に対する標準の HTTP GET 要求を介して取得できる任意のオブジェクトを指定できます。 これには、ブロック BLOB、追加 BLOB、ページ BLOB、BLOB スナップショット、BLOB バージョン、または Azure 内外のアクセス可能なオブジェクトが含まれます。

ソース オブジェクトがブロック BLOB の場合、コミットされたすべての BLOB コンテンツがコピーされます。 ただし、ブロック一覧は保持されず、コミットされていないブロックはコピーされません。 コピー先 BLOB のコンテンツはソースのコンテンツと同じですが、コミットされたブロック一覧は保持されません。

コピー先は常にブロック BLOB であり、既存のブロック BLOB でも、操作で作成される新しいブロック BLOB でもかまいません。 既存の BLOB のコンテンツは、新しい BLOB のコンテンツで上書きされます。

Put Blob From URL 操作では、常にソース BLOB 全体がコピーされます。 バイト範囲またはブロックのセットのコピーはサポートされていません。 ソース URL を使用してブロック BLOB のコンテンツに部分的な更新を実行するには、Put Block List と共に Put Block From URL API を使用します。

BLOB サイズの制限事項や課金に関する考慮事項など Put Blob From URL 操作の詳細については、URL リマークからの BLOB の配置に関するページを参照してください。

ソース オブジェクト URL から BLOB をコピーする

このセクションでは、ソース オブジェクト URL からコピー操作を実行するために、.NET 用の Azure Storage クライアント ライブラリによって提供されるメソッドの概要について説明します。

次のメソッドは、Put Blob From URL REST API 操作をラップし、BLOB のコンテンツが特定の URL から読み取られる新しいブロック BLOB を作成します。

これらのメソッドは、ストレージ アカウントにデータを移動する必要があり、ソース オブジェクトの URL がわかっているシナリオに適しています。

大きなオブジェクトの場合は、個々のブロックを操作することもできます。 次のメソッドは、Put Block From URL REST API 操作をラップします。 以下のメソッドでは、コンテンツがソース URL から読み取られる BLOB の一部としてコミットされる新しいブロックが作成されます。

Azure 内のソースから BLOB をコピーする

Azure 内のソースから BLOB をコピーする場合、ソース BLOB へのアクセスは、Microsoft Entra ID、共有アクセス署名 (SAS)、またはアカウント キーを使って承認できます。

次の例は、Azure 内でソース BLOB からコピーするシナリオを示しています。 SyncUploadFromUriAsync メソッドは、例に示すように、必要に応じてブール型パラメーターを受け入れて、既存の BLOB を上書きするかどうかを示すことができます。 overwrite パラメーターの既定値は、false です。

//-------------------------------------------------
// Copy a blob from the same storage account
//-------------------------------------------------
public static async Task CopyWithinStorageAccountAsync(
    BlobClient sourceBlob,
    BlockBlobClient destinationBlob)
{
    // Get the source blob URI and create the destination blob
    // overwrite param defaults to false
    await destinationBlob.SyncUploadFromUriAsync(sourceBlob.Uri/*, overwrite: false*/);
}

SyncUploadFromUriAsync メソッドは、BlobSyncUploadFromUriOptions パラメーターを受け入れて、操作のその他のオプションを指定することもできます。

Azure 外部のソースから BLOB をコピーする

Azure 外部にあるアクセス可能なオブジェクトを含め、特定の URL に対する HTTP GET 要求を介して取得できる任意のソース オブジェクトにコピー操作を実行できます。 次の例は、アクセス可能なソース オブジェクト URL から BLOB をコピーするシナリオを示しています。

//-------------------------------------------------
// Copy a blob from an external source
//-------------------------------------------------
public static async Task CopyFromExternalSourceAsync(
    string sourceLocation,
    BlockBlobClient destinationBlob)
{
    Uri sourceUri = new(sourceLocation);

    // Create the destination blob from the source URL
    // overwrite param defaults to false
    await destinationBlob.SyncUploadFromUriAsync(sourceUri/*, overwrite: false*/);
}

リソース

.NET 用 Azure Blob Storage クライアント ライブラリを使用した BLOB のコピーについて詳しくは、次のリソースを参照してください。

コード サンプル

REST API の操作

Azure SDK for .NET には Azure REST API に基づいて構築されたライブラリが含まれるため、使い慣れた .NET パラダイムを通じて REST API 操作を利用できます。 このアーティクルで説明するクライアント ライブラリ メソッドでは、次の REST API 操作を使用します:

クライアント ライブラリのリソース

  • この記事は、.NET の Blob Storage 開発者ガイドの一部です。 詳細については、.NET アプリをビルドするの記事にある、開発者ガイドの全一覧を参照してください。