オープンソースとマイクロソフトの良い関係 ~ Node.js の Azure 対応 ~

Post on 11-Jan-2016

68 views 7 download

description

オープンソースとマイクロソフトの良い関係 ~ Node.js の Azure 対応 ~. 株式会社野村総合研究所 共通基盤推進部 勇大地. D5-302. セッションの目的 Node.js の アプリ開発手法を学習する Azure 上で Node.js アプリを動作させる方法を学習する セッションのゴール Node.js で簡単なアプリが開発できる Azure 上で Node.js アプリを運用できる. セッションの目的とゴール. 本日の内容. サーバサイド JavaScript の実装 - PowerPoint PPT Presentation

Transcript of オープンソースとマイクロソフトの良い関係 ~ Node.js の Azure 対応 ~

オープンソースとマイクロソフトの良い関係

~ 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 で主流なテンプレート

エンジン

waz-storage.js

Windows Azure の ストレージサービスを操作可能なライブラリ

express の利用( 1/2 )起動には以下のライブラリが必要

※ formidable は POST を利用する場合に必要

ライブラリ名 バージョン express 3.0.0alpha1

mine 1.2.4

qs 0.3.1

mkdirp 0.0.7

connect 1.7.0

ejs 0.4.3

commander 0.1.0

formidable 1.0.6

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><ul id="users"> <%- partial('user', users) %></ul>

<li><%= user.name %> &lt;<%= user.email %>&gt;</li>

index.html

user.html app.js

waz-storage.js の利用( 1/2 )

起動には以下のライブラリが必要

※ 注 Compute Storage は未サポート

ライブラリ名 バージョン waz-storage.js 0.1.2

xml2js 0.1.12

underscore 1.1.7

underscore.string

1.1.6

sax.js 0.2.5

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

ロー

ドバ

ラン

PublicPort( 80 )

Internet PrivatePort( 8080 )

PrivatePort( 8080 )

ストレー

サー

Node.js を起動

※ 注 Compute Storage では 1 インスタンスで起動すること

Worker ロールインスタンス 2

Node.js を起動

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 expressInstalling 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 Azurehttp://msdn.microsoft.com/en-us/library/windowsazure/gg441573.aspx

Worker Role Schemehttp://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