Go を使用して BLOB をダウンロードする
この記事では、Go 用の Azure Storage クライアント モジュールを使用して BLOB をダウンロードする方法について説明します。 BLOB データは、ローカル ファイル パス、ストリーム、テキスト文字列など、さまざまな宛先にダウンロードできます。
前提条件
- Azure サブスクリプション - 無料アカウントを作成する
- Azure Storage アカウント - ストレージ アカウントの作成
- Go 1.18+
環境を設定する
既存のプロジェクトがない場合、Go 用 Azure Blob Storage クライアント モジュールを操作するためのプロジェクトを設定する方法についてこのセクションで説明します。 この手順には、モジュールのインストール、import
パスの追加、認可されているクライアント オブジェクトの作成が含まれます。 詳細については、Azure Blob Storage および Go の概要に関するページを参照してください。
モジュールのインストール
次のコマンドを使用して、azblob モジュールをインストールします。
go get github.com/Azure/azure-sdk-for-go/sdk/storage/azblob
Microsoft Entra ID で認証するには (推奨)、次のコマンドを使用して azidentity
モジュールをインストールします。
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
インポート パスの追加
コード ファイルに、次のインポートを追加します。
import (
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)
これらのインポート パスは、作業を始めるために最低限必要なものを表します。 この記事の一部のコード例では、追加のインポート パスが必要な場合があります。 具体的な詳細と使用例についてはコード サンプルに関するページを参照してください。
クライアント オブジェクトの作成
アプリを Blob Storage に接続するには、azblob.NewClient を使用してクライアント オブジェクトを作成します。 次の例では、認可のために DefaultAzureCredential
を使用してクライアント オブジェクトを作成する方法を示します。
func getServiceClientTokenCredential(accountURL string) *azblob.Client {
// Create a new service client with token credential
credential, err := azidentity.NewDefaultAzureCredential(nil)
handleError(err)
client, err := azblob.NewClient(accountURL, credential, nil)
handleError(err)
return client
}
承認
認可メカニズムには、ダウンロード操作を実行するために必要なアクセス許可が必要です。 Microsoft Entra ID を使用した認可 (推奨) には、Azure RBAC 組み込みロールの Storage BLOB データ閲覧者以上が必要です。 詳細については、Get Blob (REST API) に関するページの認可のガイダンスを参照してください。
BLOB をダウンロードする
次のいずれかのメソッドを使用して BLOB をダウンロードできます。
ファイル パスへのダウンロード
次の例では、BLOB をファイル パスにダウンロードします。
func downloadBlobToFile(client *azblob.Client, containerName string, blobName string) {
// Create or open a local file where we can download the blob
file, err := os.Create("path/to/sample/file")
handleError(err)
// Download the blob to the local file
_, err = client.DownloadFile(context.TODO(), containerName, blobName, file, nil)
handleError(err)
}
ストリームへのダウンロード
次の例では、BLOB をストリームにダウンロードし、NewRetryReader メソッドを呼び出してストリームから読み取ります。
func downloadBlobToStream(client *azblob.Client, containerName string, blobName string) {
// Download the blob
get, err := client.DownloadStream(context.TODO(), containerName, blobName, nil)
handleError(err)
downloadedData := bytes.Buffer{}
retryReader := get.NewRetryReader(context.TODO(), &azblob.RetryReaderOptions{})
_, err = downloadedData.ReadFrom(retryReader)
handleError(err)
err = retryReader.Close()
handleError(err)
// Print the contents of the blob we created
fmt.Println("Blob contents:")
fmt.Println(downloadedData.String())
}
ダウンロード時のデータ転送オプションの指定
BLOB をダウンロードするときに構成オプションを設定して、パフォーマンスを最適化できます。 ダウンロード操作には、次の構成オプションを使用できます。
BlockSize
: ブロック BLOB をダウンロードするときの各ブロックのサイズ。 既定値は 4 MB です。Concurrency
: ダウンロード中に使用する並列接続の最大数。 既定値は 5 です。
これらのオプションは、次の方法を使用してダウンロードするときに使用できます。
DownloadStream メソッドは、これらのオプションをサポートせず、1 つの要求でデータをダウンロードします。
Blob Storage での転送サイズの制限の詳細については、「Blob Storage のスケール ターゲット」を参照してください。
次のコード例は、DownloadFileOptions を使用してデータ転送オプションを指定する方法を示しています。 このサンプルで提供される値は、推奨を意図したものではありません。 これらの値を適切にチューニングするには、アプリの特定のニーズを考慮する必要があります。
func downloadBlobTransferOptions(client *azblob.Client, containerName string, blobName string) {
// Create or open a local file where we can download the blob
file, err := os.Create("path/to/sample/file")
handleError(err)
// Download the blob to the local file
_, err = client.DownloadFile(context.TODO(), containerName, blobName, file,
&azblob.DownloadFileOptions{
BlockSize: int64(4 * 1024 * 1024), // 4 MiB
Concurrency: uint16(2),
})
handleError(err)
}
データ転送オプションのチューニングについて詳しくは、「Go を使用したアップロードとダウンロードのパフォーマンス チューニング」をご参照ください。
Note
このガイドのコード サンプルは、Azure Blob Storage と Go の使用を開始するのに役立つことを目的としています。 エラー処理と Context
の値は、アプリケーションのニーズに合わせて変更する必要があります。
リソース
Go 用 Azure Blob Storage クライアント モジュールを使用して BLOB をダウンロードする方法の詳細については、次のリソースを参照してください。
コード サンプル
- この記事のコード サンプルを表示する (GitHub)
REST API の操作
Azure SDK for Go には Azure REST API に基づき構築されたライブラリが含まれるため、使い慣れた Go パラダイムを通じて REST API 操作を実施できます。 BLOB をダウンロードするためのクライアント ライブラリ メソッドは、次の REST API 操作を使用します。
- Get Blob (REST API)
クライアント モジュール リソース
関連するコンテンツ
- この記事は、Go の Blob Storage 開発者ガイドの一部です。 詳細については、「Go アプリのビルド」にある開発者ガイドの記事の完全な一覧を参照してください。