normalian blog

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

Windows Azure の大幅更新 〜Node.js編〜

Windows Azure Advent Calendar 2011の14回目 を担当させて頂く。つい先日である12/13に、Windows Azure で大幅な更新があった。.NET版の開発SDKのみならず、PHPJava、Node.js等の開発ツールが大幅に更新されたのだ。また、開発ツールのほとんどが GitHubに登録された。記事や書籍をまとめている方はさぞ顔が青くなっていることだろう(他人事風に)。
今回、私は Node.js の更新にフォーカスして紹介させて頂く。

Node.js の更新をダウンロード

では早速 Node.js の更新 サイトにアクセスして「Install」ボタンを押下し、WebPIを起動してほしい。WebPIを利用した Windows Azure SDK for Node.js のインストールを完了すると、以下の画面が表示される。

以上の操作を行うだけで Windows Azure SDK for Node.js のインストールが完了だ。スタートメニューに以下が追加されていることを確認してほしい。

Node.js アプリケーション をEmulatorで起動する

PowerShellを起動し、コマンドラインのみで Node.js アプリケーションを起動する。

PS C:\tmp> New-AzureService MyService

Service has been created at C:\tmp\MyService


PS C:\tmp\MyService> Add-AzureNodeWebRole

Unable to set role permissions for user 'Network Service', please set role perm
issions appropriately, or run PowerShell as an Administrator
Role has been created at C:\tmp\MyService\WebRole1. For easy access to
Windows Azure Services from your application code, install Windows Azure client
 library for Node.js by running ‘npm install azure’.

http://msdn.microsoft.com/en-us/library/hh689725(VS.103).aspx#bkmk_AddAzureNodeWebRole
PS C:\tmp> Add-AzureNodeWebRole
Add-AzureNodeWebRole : service root is invalid or empty
発生場所 行:1 文字:21
+ Add-AzureNodeWebRole <<<<
    + CategoryInfo          : CloseError: (:) [Add-AzureNodeWebRole]、ArgumentE
    xception
    + FullyQualifiedErrorId : AzureDeploymentCmdlets.Node.Cmdlet.AddAzureNodeW
   ebRoleCommand

管理者の権限が必要だと怒られた。PowerShellを管理者で起動し直して再実行した。

PS C:\tmp\MyService> Add-AzureNodeWebRole


Role has been created at C:\tmp\MyService\WebRole1. For easy access to
Windows Azure Services from your application code, install Windows Azure client
 library for Node.js by running ‘npm install azure’.


PS C:\tmp\MyService> Start-AzureEmulator -Launch


Creating local package...
Starting Emulator...
Role is running at http://127.0.0.1:81
Started

わずかこれだけの操作で、以下の様に Node.js アプリケーションが起動する。以下の様にHello Worldが表示される単純なアプリケーションだ。

Node.js アプリケーション をホスティッドサービスで起動する

次は、Node.js アプリケーションをホスティッドサービスで動作させる。本節下コマンドを実行することで、Node.js をホスティッドサービス上で実行することが可能になる。まず、発行の設定情報を管理ポータルから取得するコマンドを実行する。

PS C:\tmp\MyService> Get-AzurePublishSettings
PS C:\tmp\MyService> Import-AzurePublishSettings '.\XXXXXXXXXXXXXXXXX-12-10-2011-credentials.publishsettings'

ここで以下の様にブラウザが起動するため、任意の場所に発行の設定情報を保存してほしい。

次に、以下の例に従って、保存した発行の設定情報をインポートして発行する。

Certificate imported into CurrentUser\My\normal: XXXXXXXXXXXXXXXXX: XXXXXX-12-10
-2011-credentials
Publish settings imported

PS C:\tmp\MyService> Publish-AzureService -name nodejsapp


Publishing  to Windows Azure. This may take several minutes...

0:51:34 - Preparing deployment for nodejsapp with Subscription ID: XXXXXXXXXXXXXX
0:51:43 - Connecting...
0:51:44 - Creating...
0:51:45 - Created hosted service 'nodejsapp'.
0:51:46 - Verifying storage account 'nodejsapp'...
0:53:51 - Uploading Package...
0:56:22 - Created Deployment ID: XXXXXXXXXXXXXX
0:56:23 - Starting...
0:56:23 - Initializing...
0:56:34 - Instance WebRole1_IN_0 of role WebRole1 is creating the virtual machine.
1:01:09 - Instance WebRole1_IN_0 of role WebRole1 is busy.
1:02:20 - Instance WebRole1_IN_0 of role WebRole1 is ready.
1:02:21 - Created Website URL: http://nodejsapp.cloudapp.net.
1:02:21 - Complete.

コマンドのタイプ後に数分間待ち、「Complete」メッセージが表示されたのち、ホスティッドサービス上に公開されたアプリケーションにアクセスが可能となる。

追加情報

現時点で分かっているTIPSを記載する。

  • Node.js の PowerShell コマンドが http://msdn.microsoft.com/en-us/library/hh689725.aspx で公開されている
  • Add-AzureNodeWebRole だけでなく Add-AzureNodeWorkerRoleも存在する。Webロール側で Node.js 利用する場合は、IISを経由して Node.js にアクセスする形になるので注意が必要だ
  • npm コマンドも利用可能であるため、「npm install azure」とタイプすることでMS謹製の Node.js 向け Windows Azure ストレージサービスライブラリも利用可能だ