JavaScript 用 Azure Storage BLOB クライアント ライブラリ - バージョン 12.17.0

Azure Storage BLOB は、クラウド用の Microsoft のオブジェクト ストレージ ソリューションです。 Blob Storage は、大量の非構造化データを格納できるよう最適化されています。 非構造化データとは、特定のデータ モデルや定義に従っていないデータであり、テキスト データやバイナリ データなどがあります。

このプロジェクトでは、Blob サービスを簡単に使用できる JavaScript Microsoft Azure Storageクライアント ライブラリを提供します。

このパッケージのクライアント ライブラリを使用して、次の操作を行います。

  • Blob Service のプロパティを取得/設定する
  • コンテナーの作成/一覧表示/削除
  • ブロック BLOB の作成/読み取り/一覧表示/更新/削除
  • ページ BLOB の作成/読み取り/一覧表示/更新/削除
  • 追加 BLOB の作成/読み取り/一覧表示/更新/削除

キー リンク

はじめに

現在サポートされている環境

詳細については、Microsoft のサポート ポリシーを参照してください。

前提条件

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

JavaScript 用の Azure Storage BLOB クライアント ライブラリをインストールする推奨される方法は、npm パッケージ マネージャーを使用することです。 ターミナル ウィンドウに次のように入力します。

npm install @azure/storage-blob

クライアントを認証する

Azure Storage では、いくつかの認証方法がサポートされています。 Azure Blob Storage サービスを操作するには、ストレージ クライアントBlobServiceClientContainerClientBlobClientのインスタンス (、 など) を作成する必要があります。 認証の詳細については、 を作成するためのBlobServiceClientサンプルを参照してください。

Azure Active Directory

Azure Blob Storage サービスでは、Azure Active Directory を使用して API に対する要求を認証できます。 @azure/identity パッケージには、アプリケーションでこれを行うために使用できるさまざまな資格情報の種類が用意されています。 作業を開始 するための @azure/identity 詳細とサンプルについては、README を参照してください。

互換性

このライブラリは、Node.js およびブラウザーと互換性があり、LTS Node.js バージョン (>=8.16.0) と Chrome、Firefox、Edge の最新バージョンに対して検証されます。

Web Worker

このライブラリでは、ブラウザーで使用する場合に特定の DOM オブジェクトをグローバルに使用できるようにする必要があります。この場合、Web ワーカーは既定では使用できません。 このライブラリを Web ワーカーで動作させるには、これらをポリフィルする必要があります。

詳細については、Web Worker で Azure SDK for JS を使用するためのドキュメントを参照してください

このライブラリは、Web ワーカーで使用するときに読み込まれる外部ポリフィルを必要とする次の DOM API に依存します。

Node.js とブラウザーの違い

Node.js とブラウザーのランタイムには違いがあります。 このライブラリの使用を開始するときは、 "NODE.JS ランタイムでのみ使用可能" または "ブラウザーでのみ使用可能 " でマークされた API またはクラス に注意してください

  • BLOB が圧縮データを または deflate 形式でgzip保持し、そのコンテンツ エンコードがそれに応じて設定されている場合、ダウンロード動作は Node.js とブラウザーで異なります。 Node.js ストレージ クライアントでは、BLOB は圧縮形式でダウンロードされますが、ブラウザーではデータは圧縮解除形式でダウンロードされます。
Node.js でのみ使用できる機能、インターフェイス、クラス、または関数
  • アカウント名とアカウント キーに基づく共有キーの承認
    • StorageSharedKeyCredential
  • Shared Access Signature(SAS) の生成
    • generateAccountSASQueryParameters()
    • generateBlobSASQueryParameters()
  • 並列アップロードとダウンロード。 BlockBlobClient.uploadData()は、Node.js とブラウザーの両方で使用できます。
    • BlockBlobClient.uploadFile()
    • BlockBlobClient.uploadStream()
    • BlobClient.downloadToBuffer()
    • BlobClient.downloadToFile()
ブラウザーでのみ使用できる機能、インターフェイス、クラス、または関数
  • 並列アップロードとダウンロード
    • BlockBlobClient.uploadBrowserData()

JavaScript バンドル

ブラウザーでこのクライアント ライブラリを使用するには、まず bundler を使用する必要があります。 これを行う方法の詳細については、 バンドルに関するドキュメントを参照してください。

CORS

ブラウザー用に開発する必要がある場合は、ストレージ アカウントの クロスオリジン リソース共有 (CORS) ルールを設定する必要があります。 Azure portalに移動してAzure Storage Explorer、ストレージ アカウントを見つけ、BLOB/キュー/ファイル/テーブル サービスの新しい CORS ルールを作成します。

たとえば、デバッグ用に次の CORS 設定を作成できます。 ただし、運用環境の要件に合わせて設定を慎重にカスタマイズしてください。

  • 許可される配信元: *
  • 使用できる動詞: DELETE、GET、HEAD、MERGE、POST、OPTIONS、PUT
  • 許可されるヘッダー: *
  • 公開されているヘッダー: *
  • 最大経過時間 (秒): 86400

主要な概念

Blob Storage は、次の用途に適しています。

  • 画像またはドキュメントをブラウザーに直接配信する。
  • 分散アクセス用にファイルを格納する。
  • ビデオおよびオーディオをストリーミング配信する。
  • ログ ファイルに書き込む。
  • バックアップと復元、ディザスター リカバリー、アーカイブのためのデータを格納する。
  • オンプレミス サービスまたは Azure ホステッド サービスで分析するデータを格納する。

Blob Storage には、3 種類のリソースがあります。

  • によって使用されるストレージ アカウントBlobServiceClient
  • によって使用されるストレージ アカウント内のコンテナーContainerClient
  • によって使用されるコンテナー内の BLOBBlobClient

パッケージをインポートする

クライアントを使用するには、パッケージをファイルにインポートします。

const AzureStorageBlob = require("@azure/storage-blob");

または、必要な型のみを選択的にインポートします。

const { BlobServiceClient, StorageSharedKeyCredential } = require("@azure/storage-blob");

BLOB サービス クライアントを作成する

には BlobServiceClient 、BLOB サービスへの URL とアクセス資格情報が必要です。 また、必要に応じて、 パラメーターの一部の設定を options 受け入れます。

パッケージからの @azure/identityDefaultAzureCredential

をインスタンス化するための推奨される方法 BlobServiceClient

セットアップ : リファレンス - クライアント アプリケーションから Azure Active Directory を使用して BLOB とキューへのアクセスを承認する - /azure/storage/common/storage-auth-aad-app

  • 新しい AAD アプリケーションを登録し、サインインしているユーザーの代わりに Azure Storage にアクセスするためのアクセス許可を付与する

    • Azure Active Directory (azure-portal) に新しいアプリケーションを登録する - /azure/active-directory/develop/quickstart-register-app
    • セクションで を API permissions 選択 Add a permission し、 を選択します Microsoft APIs
    • の横にあるチェック ボックスをオン Azure Storageuser_impersonation し、 をクリックします Add permissions。 これにより、アプリケーションはサインインしているユーザーの代わりに Azure Storage にアクセスできます。
  • Azure Portal で RBAC を使用して Azure BLOB データへのアクセスを許可する

    • BLOB とキューの RBAC ロール - /azure/storage/common/storage-auth-aad-rbac-portal。
    • Azure portal で、ストレージ アカウントに移動し、(azure-portal のストレージ アカウントの左側のナビゲーション バーにある) タブからAccess control (IAM)登録済みの AAD アプリケーションにストレージ BLOB データ共同作成者ロールを割り当てます。
  • サンプルの環境のセットアップ

    • AAD アプリケーションの概要ページで、 と TENANT IDCLIENT IDメモします。 [証明書 & シークレット] タブで、シークレットを作成し、下にメモします。
    • サンプルを正常に実行するために環境変数としてAZURE_TENANT_ID、AZURE_CLIENT_ID、AZURE_CLIENT_SECRETがあることを確認します (process.env を活用できます)。
const { DefaultAzureCredential } = require("@azure/identity");
const { BlobServiceClient } = require("@azure/storage-blob");

// Enter your storage account name
const account = "<account>";
const defaultAzureCredential = new DefaultAzureCredential();

const blobServiceClient = new BlobServiceClient(
  `https://${account}.blob.core.windows.net`,
  defaultAzureCredential
);

この方法を使用した完全な例については、 Azure AD 認証のサンプル を参照してください。

[注 - 上記の手順は Node.js 専用です]

接続文字列の使用

または、引数として完全な接続文字列をfromConnectionString()持つ静的メソッドを使用して をインスタンス化BlobServiceClientすることもできます。 (接続文字列は Azure portal から取得できます)。[NODE.JS ランタイムでのみ使用できます]

const { BlobServiceClient } = require("@azure/storage-blob");

const connStr = "<connection string>";

const blobServiceClient = BlobServiceClient.fromConnectionString(connStr);

を使用する StorageSharedKeyCredential

または、account-name と StorageSharedKeyCredential account-key をBlobServiceClient引数として渡して、 を使用して をインスタンス化します。 (アカウント名とアカウント キーは、Azure portal から取得できます)。[NODE.JS ランタイムでのみ使用できます]

const { BlobServiceClient, StorageSharedKeyCredential } = require("@azure/storage-blob");

// Enter your storage account name and shared key
const account = "<account>";
const accountKey = "<accountkey>";

// Use StorageSharedKeyCredential with storage account and account key
// StorageSharedKeyCredential is only available in Node.js runtime, not in browsers
const sharedKeyCredential = new StorageSharedKeyCredential(account, accountKey);
const blobServiceClient = new BlobServiceClient(
  `https://${account}.blob.core.windows.net`,
  sharedKeyCredential
);

SAS トークンを使用する

また、Shared Access Signature (SAS) を使用して をインスタンス化 BlobServiceClient することもできます。 Azure Portal から SAS トークンを取得するか、 を使用して SAS トークンを generateAccountSASQueryParameters()生成できます。

const { BlobServiceClient } = require("@azure/storage-blob");

const account = "<account name>";
const sas = "<service Shared Access Signature Token>";

const blobServiceClient = new BlobServiceClient(`https://${account}.blob.core.windows.net${sas}`);

新しいコンテナーを作成する

を使用 BlobServiceClient.getContainerClient() してコンテナー クライアント インスタンスを取得し、新しいコンテナー リソースを作成します。

const { DefaultAzureCredential } = require("@azure/identity");
const { BlobServiceClient } = require("@azure/storage-blob");

const account = "<account>";
const defaultAzureCredential = new DefaultAzureCredential();

const blobServiceClient = new BlobServiceClient(
  `https://${account}.blob.core.windows.net`,
  defaultAzureCredential
);

async function main() {
  // Create a container
  const containerName = `newcontainer${new Date().getTime()}`;
  const containerClient = blobServiceClient.getContainerClient(containerName);
  const createContainerResponse = await containerClient.create();
  console.log(`Create container ${containerName} successfully`, createContainerResponse.requestId);
}

main();

コンテナーを一覧表示する

関数を使用して、新しいfor-await-of構文を使用BlobServiceClient.listContainers()してコンテナーを反復処理します。

const { DefaultAzureCredential } = require("@azure/identity");
const { BlobServiceClient } = require("@azure/storage-blob");

const account = "<account>";
const defaultAzureCredential = new DefaultAzureCredential();

const blobServiceClient = new BlobServiceClient(
  `https://${account}.blob.core.windows.net`,
  defaultAzureCredential
);

async function main() {
  let i = 1;
  let containers = blobServiceClient.listContainers();
  for await (const container of containers) {
    console.log(`Container ${i++}: ${container.name}`);
  }
}

main();

または、 を使用せずに:for-await-of

const { DefaultAzureCredential } = require("@azure/identity");
const { BlobServiceClient } = require("@azure/storage-blob");

const account = "<account>";
const defaultAzureCredential = new DefaultAzureCredential();

const blobServiceClient = new BlobServiceClient(
  `https://${account}.blob.core.windows.net`,
  defaultAzureCredential
);

async function main() {
  let i = 1;
  let iter = blobServiceClient.listContainers();
  let containerItem = await iter.next();
  while (!containerItem.done) {
    console.log(`Container ${i++}: ${containerItem.value.name}`);
    containerItem = await iter.next();
  }
}

main();

さらに、ページ分割は、 を介して byPage()一覧表示するためにもサポートされています。

const { DefaultAzureCredential } = require("@azure/identity");
const { BlobServiceClient } = require("@azure/storage-blob");

const account = "<account>";
const defaultAzureCredential = new DefaultAzureCredential();

const blobServiceClient = new BlobServiceClient(
  `https://${account}.blob.core.windows.net`,
  defaultAzureCredential
);

async function main() {
  let i = 1;
  for await (const response of blobServiceClient.listContainers().byPage({ maxPageSize: 20 })) {
    if (response.containerItems) {
      for (const container of response.containerItems) {
        console.log(`Container ${i++}: ${container.name}`);
      }
    }
  }
}

main();

コンテナーの反復処理に関する完全なサンプルについては、 samples/v12/typescript/src/listContainers.ts を参照してください。

データをアップロードして BLOB を作成する

const { DefaultAzureCredential } = require("@azure/identity");
const { BlobServiceClient } = require("@azure/storage-blob");

const account = "<account>";
const defaultAzureCredential = new DefaultAzureCredential();

const blobServiceClient = new BlobServiceClient(
  `https://${account}.blob.core.windows.net`,
  defaultAzureCredential
);

const containerName = "<container name>";

async function main() {
  const containerClient = blobServiceClient.getContainerClient(containerName);

  const content = "Hello world!";
  const blobName = "newblob" + new Date().getTime();
  const blockBlobClient = containerClient.getBlockBlobClient(blobName);
  const uploadBlobResponse = await blockBlobClient.upload(content, content.length);
  console.log(`Upload block blob ${blobName} successfully`, uploadBlobResponse.requestId);
}

main();

コンテナー内の BLOB を一覧表示する

コンテナーの一覧表示に似ています。

const { DefaultAzureCredential } = require("@azure/identity");
const { BlobServiceClient } = require("@azure/storage-blob");

const account = "<account>";
const defaultAzureCredential = new DefaultAzureCredential();

const blobServiceClient = new BlobServiceClient(
  `https://${account}.blob.core.windows.net`,
  defaultAzureCredential
);

const containerName = "<container name>";

async function main() {
  const containerClient = blobServiceClient.getContainerClient(containerName);

  let i = 1;
  let blobs = containerClient.listBlobsFlat();
  for await (const blob of blobs) {
    console.log(`Blob ${i++}: ${blob.name}`);
  }
}

main();

BLOB の反復処理に関する完全なサンプルについては、「 samples/v12/typescript/src/listBlobsFlat.ts」を参照してください。

BLOB をダウンロードして文字列に変換する (Node.js)

const { DefaultAzureCredential } = require("@azure/identity");
const { BlobServiceClient } = require("@azure/storage-blob");

const account = "<account>";
const defaultAzureCredential = new DefaultAzureCredential();

const blobServiceClient = new BlobServiceClient(
  `https://${account}.blob.core.windows.net`,
  defaultAzureCredential
);

const containerName = "<container name>";
const blobName = "<blob name>";

async function main() {
  const containerClient = blobServiceClient.getContainerClient(containerName);
  const blobClient = containerClient.getBlobClient(blobName);

  // Get blob content from position 0 to the end
  // In Node.js, get downloaded data by accessing downloadBlockBlobResponse.readableStreamBody
  const downloadBlockBlobResponse = await blobClient.download();
  const downloaded = (
    await streamToBuffer(downloadBlockBlobResponse.readableStreamBody)
  ).toString();
  console.log("Downloaded blob content:", downloaded);

  // [Node.js only] A helper method used to read a Node.js readable stream into a Buffer
  async function streamToBuffer(readableStream) {
    return new Promise((resolve, reject) => {
      const chunks = [];
      readableStream.on("data", (data) => {
        chunks.push(data instanceof Buffer ? data : Buffer.from(data));
      });
      readableStream.on("end", () => {
        resolve(Buffer.concat(chunks));
      });
      readableStream.on("error", reject);
    });
  }
}

main();

BLOB をダウンロードし、文字列 (ブラウザー) に変換します。

ブラウザーでのこのライブラリの使用の詳細については、 JavaScript バンドル に関するセクションを参照してください。

const { BlobServiceClient } = require("@azure/storage-blob");

const account = "<account name>";
const sas = "<service Shared Access Signature Token>";
const containerName = "<container name>";
const blobName = "<blob name>";

const blobServiceClient = new BlobServiceClient(`https://${account}.blob.core.windows.net${sas}`);

async function main() {
  const containerClient = blobServiceClient.getContainerClient(containerName);
  const blobClient = containerClient.getBlobClient(blobName);

  // Get blob content from position 0 to the end
  // In browsers, get downloaded data by accessing downloadBlockBlobResponse.blobBody
  const downloadBlockBlobResponse = await blobClient.download();
  const downloaded = await blobToString(await downloadBlockBlobResponse.blobBody);
  console.log("Downloaded blob content", downloaded);

  // [Browsers only] A helper method used to convert a browser Blob into string.
  async function blobToString(blob) {
    const fileReader = new FileReader();
    return new Promise((resolve, reject) => {
      fileReader.onloadend = (ev) => {
        resolve(ev.target.result);
      };
      fileReader.onerror = reject;
      fileReader.readAsText(blob);
    });
  }
}

main();

単純なシナリオの完全な例は、 samples/v12/typescript/src/sharedKeyAuth.ts にあります

トラブルシューティング

ログの記録を有効にすると、エラーに関する有用な情報を明らかにするのに役立つ場合があります。 HTTP 要求と応答のログを表示するには、環境変数 AZURE_LOG_LEVELinfo に設定します。 または、@azure/loggersetLogLevel を呼び出して、実行時にログ記録を有効にすることもできます。

const { setLogLevel } = require("@azure/logger");

setLogLevel("info");

次のステップ

その他のコード サンプル:

共同作成

このライブラリに投稿する場合、コードをビルドしてテストする方法の詳細については、投稿ガイドを参照してください。

ストレージ ライブラリのテスト環境を設定する方法の詳細については、「ストレージ 固有のガイド 」も参照してください。

インプレッション数