normalian blog

Let's talk about Microsoft Azure, ASP.NET and Java!

Node.js から waz-storage.js を用いて Windows Azureストレージサービスを利用する

前回までに取り扱った Node.js のエントリにて、Node.js でサードパーティ製のライブラリを利用する方法を紹介した。

  • Node.js のライブラリ読み込みについてのTIPS id:waritohutsu:20110821:1313947003
  • Node.js のライブラリ読み込みについてのTIPS その2 id:waritohutsu:20110823:1314117563

今回は、先日公開された Windows Azure ストレージサービス向けの Node.js ライブラリである waz-storage.js の利用方法について紹介する。

必要なライブラリの取得と配置

まず、以下のライブラリを取得する。waz-storage.js は、sax.js と xml2js.js に依存しているため、こちらも別途取得する必要がある。

次に、取得したライブラリを以下のフォルダ形式で配置する。sax.js と xml2js.js 以外のファイルは、全て waz-storage.js から取得できる zip に同梱されている。

C:\node>tree /f
C:.
├─lib
│  │  sax.js
│  │  xml2js.js
│  │
│  ├─waz-blobs
│  │      blob.js
│  │      container.js
│  │      index.js
│  │      service.js
│  │
│  └─waz-storage
│          base.js
│          core-service.js
│          index.js
│          utils.js
│
└─support
        nibbler.js

サンプルアプリケーションの実行

waz-storage.js に同梱されている example.js を参考にして、コンテナを作成するだけのサンプルアプリケーションを作成した。ソースコードの詳細な解説は割愛するが、簡単なソースコードであるため、通読すれば内容は理解できるだろう。

var waz = require('waz-storage');
waz.establishConnection( { accountName: 'normalianfeasibility', accountKey: '<キーを記述>', useSsl: true } );

waz.blobs.container.create('test1', function(err, result){ console.log(err || result); });
waz.blobs.container.create('test2', function(err, result){ console.log(result)});

//必要なら削除処理を追加すること
//waz.blobs.container.delete('test1', function(err){
//	console.log('\n_________| removing a container |_________\n');
//	console.log(err || 'test1 container removed!');
//});
//
//waz.blobs.container.delete('test2', function(err){
//	console.log('\n_________| removing a container |_________\n');
//	console.log(err || 'test2 container removed!');
//});

waz.blobs.container.list(function(err, result){
	console.log('\n_________| listing existing containers |_________\n');
	console.log(result || err.message);
});

作成したサンプルアプリケーションである example-storage.js を実行する。「必要なライブラリの取得と配置」でライブラリを配置したフォルダである「c:\node\lib」を NODE_PATH に追加している点に注意してほしい。

  • コマンドライン
C:\my_program\JavaScript\Node.js>set NODE_PATH=.;c:\\node\\lib
C:\my_program\JavaScript\Node.js>node.exe example-storage.js
201
{ name: 'test2',
  url: undefined,
  lastModified: undefined }
201
{ name: 'test1',
  url: undefined,
  lastModified: undefined }
200

_________| listing existing containers |_________

[ { name: 'test1',
    url: 'https://normalianfeasibility.blob.core.windows.net/test1',
    lastModified: 'Tue, 23 Aug 2011 17:02:39 GMT' },
  { name: 'test2',
    url: 'https://normalianfeasibility.blob.core.windows.net/test2',
    lastModified: 'Tue, 23 Aug 2011 17:02:40 GMT' } ]

実行結果から、無事ストレージサービスにコンテナ(test1、test2)が作成されていることがわかる。
次に、Cerebrata社 の Cloud Storage Studio を利用して Windows Azureストレージサービスに接続し、実際にストレージサービス側にコンテナが作成されえいるかを確認する。以下の様に test1、test2 フォルダが作成されていることが確認できる。

注意点!〜Compute Storageでは利用できない〜

waz-storage.js ライブラリを利用することで、Windows Azureストレージサービスの本番環境には接続可能だったが、ローカルの開発環境である Compute Storage への接続は現在サポートされていないので注意が必要だ。
実際に Compute Storage に接続しようとすると以下のエラーが発生する。

c:\node\lib\waz-blobs\service.js:31
                var result = parser.parseString(response.body);
                                          ^
TypeError: Cannot read property 'body' of undefined
    at c:\node\lib\waz-blobs\service.js:31:43
    at IncomingMessage.<anonymous> (c:\node\lib\waz-storage\core-service.js:152:4)
    at IncomingMessage.emit (events.js:88:20)
    at HTTPParser.onMessageComplete (http2.js:133:23)
    at CleartextStream.ondata (http2.js:1096:22)
    at CleartextStream._push (tls.js:328:27)
    at SecurePair.cycle (tls.js:617:20)
    at EncryptedStream.write (tls.js:121:13)
    at Socket.ondata (stream.js:36:26)
    at Socket.emit (events.js:67:17)