Node.jsでMicrosoft Azure Blobストレージを管理する方法
Node Storage と Blob Storage から始める方法を学び、最も頻繁に見られるケースについて説明します。
Node.jsは、開発のための最も人気のある成長プラットフォームの1つです。Node.jsで使用される言語はJavaScriptです -彼は#GitHubで最も使用されている言語であり、この傾向は増加の一途をたどっています(Forbes、2014年7月14日)。
Microsoft Azure Blob ストレージ
Microsoft Azureストレージサービスを使用すると、Windowsクラウド環境との間でNON RELATIONAL データを保存/取得できます。Microsoft Azure Storage では、データを 4 つの異なる形式 (v.i.z. Blob、Tables and Queues、File Storage (プレビュー段階) ) で保存できます。
ブロブとは
Azure Blob Storage は、HTTP または HTTPS を介して世界中のどこからでもアクセスできる大量の非構造化データを格納するためのサービスです。1 つの BLOB のサイズは数百ギガバイトになる場合があります。
BLOB サービスには、次のコンポーネントが含まれています。
ストレージ アカウント: Azure Storage へのすべてのアクセスは、ストレージ アカウントを通じて行われます。
コンテナ:コンテナーは、BLOB のセットをグループ化します。すべての BLOB はコンテナー内にある必要があります。アカウントに含めることができるコンテナの数に制限はありません。コンテナには、格納できるブロブの数に制限はありません。
ブロッブ:任意の種類とサイズのファイル。Azure Storage に格納できる BLOB には、ブロック BLOB とページ BLOB の 2 種類があります。ほとんどのファイルはブロック BLOB です。1 つのブロック BLOB の最大サイズは 200 GB です。このチュートリアルでは、ブロック BLOB を使用します。ページ BLOB は、別の BLOB タイプで、最大 1 TB のサイズにすることができ、ファイル内のバイト範囲が頻繁に変更される場合に効率的です。
Blobは「バイナリラージオブジェクト」の略で、生のバイトの配列です。次の図は、Windows Azure の BLOB ストレージに使用される階層構造を示しています。

Azure Storage アカウントは、複数のコンテナーを持つことができます。コンテナは、1つ以上のブロブの配列またはコレクションと見なすことができます。また、各 Blob は、Blob コンテンツの内容を定義するための 1 つ以上のメタデータ プロパティを持つことができます。メタデータ プロパティは、文字列の名前と値のコレクションです。
前述のように、Microsoft Azure 上のすべての BLOB の内容には、対応する URI (REST) を参照することでアクセスできます。通常、URI は次の形式です。
https://<Account>.blob.core.windows.net/<Container>/<BlobName>
Blob StorageとNode.JSの使い方は?
さまざまな NodeJS パッケージを使用して、Azure Blob Storage を処理できます。この投稿では、Azure Nodeパッケージ(公式のMicrosoft Azure SDK)について説明します。
Microsoft Azure SDK for Node.js
Node.js用の公式Microsoft Azure SDK(npmページ: https://www.npmjs.org/package/azure、ホームページ: http://github.com/WindowsAzure/azure-sdk-for-node)。 は、Microsoft Azure サービスの利用と管理を容易にする Node.js パッケージを提供します。
次に示すスニペットは、Microsoft Azure SDK for Node.js を使用して Azure Blob Service を管理する方法を示しています。
Azure BLOB サービスを作成する
環境変数を使用して Azure Blob Service を作成し、Azure Table Service と同じ方法で資格情報を格納できます。
Azure Blob Storage の BLOB を一覧表示する
JavaScript code:
var azure = require('azure');
exports.blobs = function (request, response) {
var accessKey = '[accountKey]';
var storageAccount = '[accountName]';
var container = 'nodejs';
var blobService = azure.createBlobService(storageAccount, accessKey);
// render blobs with blobs.jade view
blobService.listBlobs(container, function (error, blobs) {
response.render('blobs', {
error: error,
container: container,
blobs: blobs
});
});
}
A jade view ( using Express.js )
extends layout
block content
h1 Blob listing for #{container}
if error
h3= error
if blobs
h3= container
table
tr
th Name
th Properties
- each blob in blobs
tr
td= blob.name
td
ul
- each value, name in blob.properties
if value
li= name + ":" + value

Azure Blob Storage へのファイルのアップロード
1 つの方法は、マルチパーティ ノード モジュールを使用することです。これは、ストリーミングをサポートするマルチパート/フォームデータパーサーです。 マルチパートデータには、FormidableのフォークであるMultiparty(npm install multiparty)を使用してアクセスできます。このモジュールは、あなたが指示しない限り、ファイルをディスクにストリームしません。
// upload a file to azure blob storage
app.get('/upload', function (req, res) {
res.send(
'<form action="/upload" method="post" enctype="multipart/form-data">' +
'<input type="file" name="snapshot" />' +
'<input type="submit" value="Upload" />' +
'</form>'
);
});
app.post('/upload', function (req, res) {
var multiparty = require('multiparty');
var accessKey = '[accountKey]';
var storageAccount = '[accountName]';
var container = 'nodejs';
var blobService = azure.createBlobService(storageAccount, accessKey);
var form = new multiparty.Form();
form.on('part', function (part) {
if (part.filename) {
var size = part.byteCount - part.byteOffset;
var name = part.filename;
blobService.createBlockBlobFromStream(container, name, part, size, function (error) {
if (error) {
res.send('Blob create: error');
}
});
} else {
form.handlePart(part);
}
});
form.parse(req);
res.send('OK');
});
// end of upload a file to azure blob storage
次の画面は、サンプル デモ アプリケーションを使用して Azure Blob Storage にファイルをアップロードする方法を示しています。


Azure Blob Storage からのファイルのダウンロード
BLOB をダウンロードしてファイル システムに書き込むには、同様の getBlob メソッドまたは getBlobToFile メソッドを使用できます。
以下の部分では、getBlob の使用方法を示します。
var azure = require('azure');
var fs = require('fs');
var blobService = azure.createBlobService();
// using getBlob to save a file from Azure Blob
blobService.getBlob('[containerName]', '[blobName]').pipe(fs.createWriteStream('[myFileName]'));
次のコードはデモ アプリケーションの一部であり、getBlobToFile を使用して Azure Blob Storage からファイルをダウンロードする方法を示しています。
// download azure blob storage content
app.get('/downloadBlob', function (req, res) {
res.send(
'<form action="/downloadBlob" method="post">' +
'<input type="text" name="blobFile" value="C:\\temp" />' +
'<input type="submit" value="Download" />' +
'</form>'
);
});
app.post('/downloadBlob', function (req, res) {
var fs = require('fs');
if (!fs.existsSync) {
fs.existsSync = require('path').existsSync;
}
var destinationDirectoryPath = req.body.blobFile;
var accessKey = '[accountKey]';
var storageAccount = '[accountName]';
var containerName = 'nodejs';
var blobService = azure.createBlobService(storageAccount, accessKey);
if (!fs.existsSync(destinationDirectoryPath)) {
console.log(destinationDirectoryPath + ' is an invalid directory path.');
} else {
downloadFilesParallel(res, blobService, containerName, destinationDirectoryPath);
}
});
downloadFilesParallel 関数を上記のコードで使用します。
function downloadFilesParallel(res, blobService, containerName, destinationDirectoryPath) {
blobService.listBlobs(containerName, function (error, blobs) {
if (error) {
console.log(error);
} else {
var blobsDownloaded = 0;
res.writeHead(200, { 'Content-Type': 'text/plain' });
blobs.forEach(function (blob) {
blobService.getBlobToFile(containerName, blob.name, destinationDirectoryPath + '/' + blob.name, function (error2) {
blobsDownloaded++;
if (error2) {
console.log(error2);
} else {
res.write('\nBlob ' + blob.name + ' download finished.');
if (blobsDownloaded === blobs.length) {
// Wait until all workers complete and the blobs are downloaded
res.end('\nAll files downloaded');
}
}
});
});
}
});
}
サンプル アプリのスクリーンショットで、Blob Storage からファイルをダウンロードする方法を示します。



スペシャリストは、Azure Blob サービスと Node についてさらに詳しく知ることができます。 Microsoft は、BLOB ストレージの成長と改善を続けています。この投稿では、Azure Blob Storage の基本ケースと最も一般的な Node.js モジュールについて説明し、開始方法について説明します。Microsoft Azureの経験がないJavaScript開発者と、JavaScriptやNode.jsの経験が少ないAzure開発者の両方にとって便利です。
Microsoft Azure Platform の開発者は、Azure Blob Storage のしくみと、Microsoft クラウドでの非構造化データの処理方法に精通する必要があります。BLOB ストレージのしくみを知ることは、特定の要件に適しているかどうかを判断するのに役立ちます。
ソースコードはGitリポジトリからダウンロードできます。

Microsoft Azure Storage の使用方法の詳細についてはNode.js mmateev@infragistics.comまでお気軽にお問い合わせください。
Node.js、Microsoft Azure、Azure Bootcamp Bulgariaなどの関連イベントの詳細については、Twitterでフォローしたり@mihailmateev Facebook、Google+、LinkedIn @Infragistics Infragistics Friends User Groupで連絡を取り合ったりすると知ることができます。