330 likes | 527 Views
オープンソースとマイクロソフトの良い関係 ~ Node.js の Azure 対応 ~. 株式会社野村総合研究所 共通基盤推進部 勇大地. D5-302. セッションの目的 Node.js の アプリ開発手法を学習する Azure 上で Node.js アプリを動作させる方法を学習する セッションのゴール Node.js で簡単なアプリが開発できる Azure 上で Node.js アプリを運用できる. セッションの目的とゴール. 本日の内容. サーバサイド JavaScript の実装
E N D
オープンソースとマイクロソフトの良い関係 ~ Node.js の Azure 対応 ~ 株式会社野村総合研究所 共通基盤推進部 勇大地 D5-302
セッションの目的 Node.js のアプリ開発手法を学習する Azure 上で Node.js アプリを動作させる方法を学習する セッションのゴール Node.js で簡単なアプリが開発できる Azure 上で Node.js アプリを運用できる セッションの目的とゴール
サーバサイド JavaScript の実装 他に Rhino や AptanaJaxer等がある JavaScript を利用してシングルスレッドベースの非同期処理が可能 ノンブロッキング I/O が無い マルチスレッドが無い Node.js とは
マイクロソフトのクラウドプラットフォーム Worker Role が外部プログラムの実行に適している Windows Azure SDK 1.5 から外部プログラムの実行が容易化 OSS での開発にも多数対応 Python、Ruby、Erlang等での開発が可能 JavaScript ( Node.js )向けのライブラリも提供 Windows Azure とは
非同期 IO と ブロブ・ストレージの相性が良い 非同期的に処理が可能 アップロード等重い処理の対応に適している 運用の対応は不要 Windows Azure 上で稼働するため、OS レベルの運用はお任せ可能 CDN を利用することで、パフォーマンスの改善も可能 Windows Azure 上で Node.js
Windows 版のバイナリが提供開始 node.exe が入手可能 最新版は v0.57 Windows 版だとパッケージ管理機構( npm )が存在しない点には注意 以下のサイトで色々な情報が取得可能 Node.js 日本ユーザグループ http://nodejs.jp/ Node.js について
ブラウザ上での実行でないため、色々出来る 標準入出力 ファイルシステム モジュール Net C / C++ アドオン プロセス 暗号化 TLS / SSL 等々・・・ Node.js の機能(一部)
コード例( 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 は全メソッド同期/非同期が存在し、使い分けが可能(以下の例非同期メソッド) ファイルを操作する // ファイルストリームのインスタンスを作成 varfs = require('fs'); varread = 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 環境変数の設定が必要
主要なライブラリは以下 今回利用するライブラリ ※上記に依存したライブラリも必要
起動には以下のライブラリが必要 express の利用(1/2) ※ formidable は POST を利用する場合に必要
ロジックとビューの分離 express の利用(2/2) var users = [ { name: 'tj', email: 'tj@sencha.com' } ]; //GET リクエストの処理 app.get('/', function(req, res){ console.log('/'); res.render('users', { users: users }); }); <h3>アカウント情報</h3> <ulid="users"> <%- partial('user', users) %> </ul> index.html + <li><%= user.name %> <<%= user.email %>></li> user.html app.js
起動には以下のライブラリが必要 waz-storage.js の利用(1/2) ※注 Compute Storage は未サポート
ストレージサービスを操作可能 waz-storage.js の利用(2/2) // アカウント情報の初期化 varwaz = require('waz-storage'); waz.establishConnection( { accountName: ‘accountname', accountKey: ‘accountKey', useSsl: true } ); //ブロブのアップロード waz.blobs.container.find('container1', function(err, container1) { varfs = require('fs');var stream = fs.createReadStream(path); varuploader = container1.upload(filename, stream, files.upload.type, {'x-ms-mymetadata': 'value'}, function(err, block) { }, function(err, blob) { }); });
Windows Azure での動作イメージ • ロードバランサ側のポートと、インスタンス毎に割り当てられるポートが異なる Workerロール インスタンス 1 ストレージ サービス Internet Private Port ( 8080 ) Node.js を起動 ロードバランサ Workerロール インスタンス 2 Public Port ( 80 ) Private Port ( 8080 ) Node.js を起動 ※注 Compute Storage では 1 インスタンスで起動すること
C# のコードから起動する Windows Azure SDK 1.4以前 varproc = new Process(); varprocStartInfo = 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> <ProgramEntryPointcommandLine="node/node.exe app.js" setReadyOnProcessStart="true" /> </EntryPoint> </Runtime>
Public Port / Private Port を設定 ポートの設定 ブラウザからアクセスするポートを指定
「出力ディレクトリにコピー」を「新しい場合はコピーする」に変更する「出力ディレクトリにコピー」を「新しい場合はコピーする」に変更する Node.js アプリの構成ファイル全てに設定する 指定しない場合、パッケージングされない 「出力ディレクトリにコピー」を設定 Node.js 関連のファイル全てに設定
Private Port で設定したポートにアクセス Compute Emulator で実行
Public Port で設定したポートにアクセス ホスティッドサービスで実行
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/-/express-2.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/ What’s New in Windows Azure http://msdn.microsoft.com/en-us/library/windowsazure/gg441573.aspx Worker Role Scheme http://msdn.microsoft.com/en-us/library/windowsazure/gg557552.aspx Windows Azure を無償で利用するには? http://msdn.microsoft.com/ja-jp/windowsazure/gg674969 Windows Azure Platform ダウンロード http://msdn.microsoft.com/ja-jp/windowsazure/cc974146
ご清聴ありがとうございました • アンケート • にご協力 • ください • D5-302