マスター タイトルの書式設定

オープンソースとマイクロソフトの
良い関係
~ Node.js の Azure 対応 ~
D5-302
株式会社野村総合研究所
共通基盤推進部
勇大地
セッションの目的とゴール
セッションの目的
Node.js のアプリ開発手法を学習する
Azure 上で Node.js アプリを動作させる方法
を学習する
セッションのゴール
Node.js で簡単なアプリが開発できる
Azure 上で Node.js アプリを運用できる
本日の内容
はじめに
Node.js とは
Node.js でアプリを作成する
Azure 上で動作させるには
まとめ
Node.js とは
サーバサイド JavaScript の実装
他に Rhino や Aptana Jaxer 等がある
JavaScript を利用してシングルスレッドベース
の非同期処理が可能
ノンブロッキング I/O が無い
マルチスレッドが無い
Windows Azure とは
マイクロソフトのクラウドプラットフォーム
Worker Role が外部プログラムの実行に適し
ている
Windows Azure SDK 1.5 から外部プログラ
ムの実行が容易化
OSS での開発にも多数対応
Python、Ruby、Erlang 等での開発が可能
JavaScript ( Node.js )向けのライブラリ
も提供
Windows Azure 上で Node.js
非同期 IO と ブロブ・ストレージの相性が良い
非同期的に処理が可能
アップロード等重い処理の対応に適している
運用の対応は不要
Windows Azure 上で稼働するため、OS レ
ベルの運用はお任せ可能
CDN を利用することで、パフォーマンスの改
善も可能
本日の内容
はじめに
Node.js とは
Node.js でアプリを作成する
Azure 上で動作させるには
まとめ
Node.js について
Windows 版のバイナリが提供開始
node.exe が入手可能 最新版は v0.57
Windows 版だとパッケージ管理機構
( npm )が存在しない点には注意
以下のサイトで色々な情報が取得可能
Node.js 日本ユーザグループ
http://nodejs.jp/
Node.js の機能(一部)
ブラウザ上での実行でないため、色々出来る
標準入出力
ファイルシステム
モジュール
Net
C / C++ アドオン
プロセス
暗号化
TLS / SSL
等々・・・
簡単な起動方法
コード例( example.js )
var http = require('http');
http.createServer(function (request, response) {
response.writeHead(200,
{ 'Content-Type': 'text/plain; charset=utf-8;' });
response.end(‘Node.js on Windows Azure \n');
}).listen(8080);
アプリケーションを起動
> node.exe example.js
ファイルを操作する
File I/O は全メソッド同期/非同期が存在し、
使い分けが可能(以下の例非同期メソッド)
// ファイルストリームのインスタンスを作成
var fs = require('fs');
var read = fs.createReadStream('./read.txt');
// ファイルを読み込み、ファイルの内容を表示
read.on('data', function (data) {
console.log(data.toString());
});
外部ライブラリを読み込む
組み込みライブラリは require(XXX) のみで利
用可能
外部ライブラリは環境変数の設定が必要
>set
NODE_PATH=.;c:\\node\\lib
>node.exe example_path.js
環境変数の設定が
必要
本日の内容
はじめに
Node.js とは
Node.js でアプリを作成する
Azure 上で動作させるには
まとめ
今回利用するライブラリ
主要なライブラリは以下
ライブラリ名
express
概要
Node.js で主流なテンプレートエ
ンジン
wazstorage.js
Windows Azure の ストレージ
サービスを操作可能なライブラリ
※上記に依存したライブラリも必要
express の利用(1/2)
起動には以下のライブラリが必要
ライブラリ名
バージョン
express
mine
qs
mkdirp
connect
ejs
commander
formidable
3.0.0alpha1
1.2.4
0.3.1
0.0.7
1.7.0
0.4.3
0.1.0
1.0.6
※ formidable は POST を利用する場合に必
express の利用(2/2)
ロジックとビューの分離
var users = [
{ name: 'tj',
email:
'[email protected]' }
];
//GET リクエストの処理
app.get('/', function(req,
res){
console.log('/');
res.render('users',
{ users: users });
app.js
});
<h3>アカウント情報</h3>
<ul id="users">
<%- partial('user',
users) %>
</ul>
index.html
+
<li><%= user.name %>
&lt;<%=
user.email %>&gt;</li>
user.html
waz-storage.js の利用(1/2)
起動には以下のライブラリが必要
ライブラリ名
バージョン
waz-storage.js
0.1.2
xml2js
0.1.12
underscore
1.1.7
underscore.string 1.1.6
sax.js
0.2.5
※注 Compute Storage は未サポート
waz-storage.js の利用(2/2)
ストレージサービスを操作可能
// アカウント情報の初期化
var waz = require('waz-storage');
waz.establishConnection( { accountName: ‘accountname',
accountKey: ‘accountKey', useSsl: true } );
//ブロブのアップロード
waz.blobs.container.find('container1', function(err, container1) {
var fs = require('fs');var
stream = fs.createReadStream(path);
var uploader = container1.upload(filename, stream,
files.upload.type, {'x-ms-mymetadata': 'value'},
function(err, block) { }, function(err, blob) { }); });
本日の内容
はじめに
Node.js とは
Node.js でアプリを作成する
Azure 上で動作させるには
まとめ
Windows Azure での動作イメージ
ロードバランサ側のポートと、インスタンス毎に
割り当てられるポートが異なる
Worker ロール
インスタンス 1
ロードバ
ランサ
Internet
Worker ロール
インスタンス 2
ス
ト
レ
ー
ジ
サ
ー
ビ
ス
※注 Compute Storage では 1 インスタンスで起動すること
Windows Azure SDK 1.4以前
C# のコードから起動する
var proc = new Process();
var procStartInfo = new ProcessStartInfo();
procStartInfo.FileName =
Environment.GetEnvironmentVariable("RoleRoot") +
@"\approot\node\node.exe";
procStartInfo.Arguments =
Environment.GetEnvironmentVariable("RoleRoot") +
@"\approot\node\example.js";
procStartInfo.UseShellExecute = false;
proc.StartInfo = procStartInfo;
proc.Start();
Windows Azure SDK 1.5以降
設定ファイルのみで対応可能
<WorkerRole name="WorkerRole1">
<Runtime>
<Environment> <!– 環境変数の設定が必須 -->
<Variable name="NODE_PATH"
value=".;%RoleRoot%\approot\lib\node" />
</Environment>
<!– Node.js アプリの起動 -->
<EntryPoint>
<ProgramEntryPoint commandLine="node/node.exe
app.js" setReadyOnProcessStart="true" />
</EntryPoint>
</Runtime>
ポートの設定
Public Port / Private Port を設定
ブラウザからアクセ
スするポートを指定
「出力ディレクトリにコピー」を設定
「出力ディレクトリにコピー」を「新しい場合は
コピーする」に変更する
Node.js アプリの構成ファイル全てに設定する
指定しない場合、パッケージングされない
Node.js 関連の
ファイル全てに
設定
Compute Emulator で実行
Private Port で設定したポートにアクセス
ホスティッドサービスで実行
Public Port で設定したポートにアクセス
本日の内容
はじめに
Node.js とは
Node.js でアプリを作成する
Azure 上で動作させるには
まとめ
まとめ
Windows Azure SDK 1.5 以降から、外部プロ
グラムの実行が容易化
Node.js では様々な外部ライブラリを組み合わ
せることが可能
Node.js 向けに提供された waz-storage.js ラ
イブラリを利用することで、Windows Azure
ストレージサービスを利用可能
Node.js 以外にも様々な OSS が利用可能
ご参考
Windows 上で npm の代替ツールが存在する
ryppi.py と呼ばれる Python ツール
詳しくは本家サイトへ
https://github.com/japj/ryppi
利用方法例( express をインストール )
> python ryppi.py install express
Installing http://registry.npmjs.org/express/-/express2.4.7.tgz into .\lib\express ... Checking dependencies for
express ...
関連セッション
T2-206:実践クラウドのススメ ~ 今日からはじめる Windows
Azure Platform
D3-301:Windows Azure の今 : ここまでできるを知る!
D3-303:Windows Phone/iOS/Android から Windows Azure
を利用する
D3-302:Windows Azure の真骨頂 : AppFabric を極める!
リファレンス
Windows Azure Platform デベロッパー センター
http://msdn.microsoft.com/ja-jp/windowsazure/
Windows Azure を無償で利用するには?
http://msdn.microsoft.com/ja-jp/windowsazure/gg674969
Windows Azure Platform ダウンロード
http://msdn.microsoft.com/ja-jp/windowsazure/cc974146
What’s New in Windows Azure
http://msdn.microsoft.com/enus/library/windowsazure/gg441573.aspx
Worker Role Scheme
http://msdn.microsoft.com/enus/library/windowsazure/gg557552.aspx
ご清聴ありがとうございました
D5-302
アンケート
にご協力
ください