オープンソースとマイクロソフトの 良い関係 ~ 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 %> <<%= user.email %>></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 アンケート にご協力 ください
© Copyright 2024 ExpyDoc