2010年の1月から開始されたマイクロソフトのクラウドサービスであるWindows Azure、サービス開始から1年半近く経過し導入事例も徐々に増えてきています。 マイクロソフトが提供しているサービスなのでアプリケーション開発に関しては主にVisual Studioを使用することが多いかと思いますが、オープンソースの統合開発環境のeclipseでもプラグインをインストールすることにより開発・Azureへの配置を行うことができます。
今回は以下のサイト
http://java.interoperabilitybridges.com/articles/deploying-a-java-application-to-windows-azure-with-eclipse http://java.interoperabilitybridges.com/articles/setting-up-remote-desktop-connectivity-for-your-java-app-in-windows-azure
を参考にeclipseのインストールからリモートデスクトップでのWindows Azureへの接続までを試してみたのでその際に行った事を書いていきます。
事前準備
今回の検証を行う際に事前に準備したことですが、以下を行っております。
・Window Azure サブスクリプション取得
・検証用マシン(CPU: Core2 Duo 2.13GHz、メモリ:1GB)
にWindows 7 をインストール ・検証用マシンにJDKインストール ・tomcatダウンロード
後は検証用マシンをWindows Azureポータルに接続可能にしておくといったところです。
eclipse インストール
eclipseインストールについてはインターネットで多くの情報があるので簡潔に留めておきます。
eclipseの公式Web( http://www.eclipse.org/downloads/)より圧縮されたモジュールをダウンロード
適当なフォルダにダウンロードしたモジュールを展開します。
フォルダ内にeclipse.exeというアプリケーションがあるのでこれをダブルクリックすれ ば起動します。
一々エクスプローラーを開いて起動するのは面倒ですのでショートカットをデスクトップへ作成しておくのが良いかと思います。
eclipse 日本語化
モジュールを展開したままの状態では表記が英語となっており、そのまま進めていただいて構いませんがhttp://mergedoc.sourceforge.jp/へアクセスして日本語パックのzipファイルをダウンロードして展開したフォルダ内のfeatures、plugins、をeclipseの同名フォルダに上書きした後、eclipse.iniをエディタで開いて最後に以下の記述を追加を行う事により日本語で表示が可能になります。
-javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
Windows Azure Plugin インストール
次にWindows Azure Pluginのインストールを行います、起動したeclipseのヘルプをクリックして[新規ソフトウェアのインストール]を選択してインストールウィザードを起動します。
追加ボタンをクリックしてインストール名とアプリケーションロケーション設定ウィンドウを表示します。
インストール名とアプリケーションのロケーションの入力、インストール名は適宜に設定してロケーションはhttp://webdownload.persistent.co.in/windowsazureplugin4ej/を指定してOKをクリックします。
インストールの検証が始まり、問題が無いようであればインストールモジュールの選択に移るのでインストールするモジュールにチェックを入れて次へをクリックするとインストールが始まり、終了後にeclipseを再起動するか聞かれるのですぐに再起動をクリックしてeclipseを再起動します。
Windows Azure Pluginをインストールした後、プロジェクトをクリックして新規プロジェクトを開くと一覧にWindows Azure Projectというプロジェクトが追加されています。
Windows Azure Projectを選択してプロジェクト名を設定するとeclipseにWindows Azure用のプロジェクトが作成されますのでこれを編集していきます。
WorkerRole→approot直下に新規のフォルダJRE,Tomcatを作成し、jreにインストールしたJDKに添付されているjreの圧縮モジュールをコピー、tomcatにはダウンロードしたtomcatの圧縮モジュールをそのままコピーします。
approot直下にあるHelloWorld.zipを削除します。
ファイル-新規で新規のJSPファイルを作成します。
JSPファイルを編集します、内容ですが今回は参照サイトのものをそのまま使用しました。
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> Insert title here <%! public String GetString() { return "\"Look! I work!\""; } %> The Java Server is Running = <%= GetString() %>
JSPファイルを編集後、utilフォルダを開いてその中にあるstartup.cmdを編集します、今回は参照サイトのものをコピー&ペーストしてとtomcatの版数を変更して使用しております。
SET APPROOT=%CD% @REM unzip Tomcat cscript /B /Nologo %APPROOT%\util\unzip.vbs Tomcat\apache-tomcat-7.0.12-windows-x64.zip %APPROOT% @REM unzip JRE cscript /B /Nologo %APPROOT%\util\unzip.vbs JRE\jre6.zip %APPROOT% @REM copy project files to server md %APPROOT%\apache-tomcat-7.0.12\webapps\myapp copy %APPROOT%\HelloWorld.jsp %APPROOT%\apache-tomcat-7.0.12\webapps\myapp @REM start the server cd %APPROOT%\apache-tomcat-7.0.12\bin set JRE_HOME=%APPROOT%\jre6 startup.bat
次にプロジェクトのendpointを設定します、[プロジェクト-プロパティ]を開き、現在編集中のWindows Azure Rolesを選択します。
現在編集中のRoleを選択し編集をクリックすると編集ウィンドウが開くのでEndpointsの追加ボタンをクリックして名前とパブリックポート・プライベートポートをそれぞれ入力してOKをクリックして確定します。
プロジェクト-すべてをビルドでモジュールを作成します。
ビルド後にEmulatorToolsというディレクトリが作成されているのでそこの中のDisplayEmulatorUI.cmdを起動するとWidnows Azure エミュレーターが起動し、Windows Azure エミュレーター起動後にRunInEmulator.cmdを起動するとTomcatが起動します。
ブラウザでhttp://localhost:8080/myapp/HelloWorld.jspでサーブレットの記述がhttp://localhost:8080/でTomcatの設定が表示されるかと思います、表示されなかった場合は各設定を確認してビルドをやり直してみてください。
Windows Azure ホスティングサービスの作成
eclipseの方で一通り動作確認が終わったところでWindows Azure上にアプリケーションを実行するサービスを作成します。
まずWindows AzureへアクセスしてWindows Azureの管理ポータルに入り[Hosted Services, Storage Accounts & CDN]をクリックします。
次に左側にメニューが現れるので[Hosted Services]を選択します。
管理ポータルの上部メニューが変わりますので[New Hosted Service]をクリックすると新規コンピューティングサービスの作成用メニューが表示されます。
サービス名とサービス用のURL、ロケーション等を設定しDeployment Optionについては[Do not deploy]を選択します。
メニューの一番下にある[OK]をクリックするとサービスが作成されます。
次に[Storage Accounts]を選択して[New Storage Account]をクリックしてストレージサービスを作成します。
URLとロケーション等を選択します。
Azureへの配置
作成したプロジェクトをローカルからWindows Azureの方へ配置するのですが、Windows Azureを配置する際はプロジェクトをcspkgという形式にして配置を行います。
現在のプロジェクトをWindows Azureへ配置するにはpackage.xmlを開いてwindowsazurepackageタグ内のpackagetype=""を"local"から"cloud"に変更して保存しビルドを行います。 ビルド終了後、deployフォルダにServerConfiguration.csfg、WindowsAzurePackage.cspkgというファイルが作成されます。
Windows Azureポータルで作成したコンピューティングサービスを選択してDeployをクリックします。
パッケージ配置設定ウィンドウが表示されます、Deployment nameを入力してPackage Location Configurate Location それぞれのBrowse locallyをクリック、作成したServerConfiguration.csfg、WindowsAzurePackage.cspkg を指定してOKをクリックするとWindows Azureに配置されます。
リモートデスクトップへの接続設定
Windows Azure のコンピューティングサービスには、リモートデスクトップでアクセスも可能で、その際には公開鍵と証明書の設定が必要になります Visual Studioで作成した場合はGUI設定が可能ですが、Eclipseではコマンドラインより公開鍵と証明書を作成し、プロジェクトの設定ファイルの記述を変更します。
http://wastarterkit4java.codeplex.com/でencutil.exeをダウンロードします。
encutil.exeで.cer ファイルと.pfxファイルを作成してパスワードを設定します
encutil.exe -create -cert "Key.cer" -pfx "Key.pfx" -alias "Key.cer" -pwd NewPassword
KeyとNewPasswordの部分はを任意のものにしてください
以下のコマンドで公開鍵の内容をテキストに出力します
encutil.exe -thumbprint -cert "Key.cer"
ServiceConfiguration.cscfgにcertificateタグを追加して出力したテキストをタグに設定します
<Certificates> <Certificate name="Microsoft.WindowsAzure.Plugins.RemoteAccess.PasswordEncryption" thumbprint="123456789ABCDEF10111213141516" thumbprintAlgorithm="sha1"/> </Certificates>
以下のコマンドを実行して暗号化パスワードをテキストに出力します。
encutil.exe -encrypt -text "パスワード" -cert "Key.cer"
リモートデスクトップアクセス許可権限や証明書の暗号化パスワードを設定するため Settingタグで以下の記述を追加します。
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.Enabled" value="true" /> <Setting name="Microsoft.WindowsAzure.Plugins.RemoteForwarder.Enabled" value="true" /> <Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountUsername" value="ログオンユーザー名" /> <Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountEncryptedPassword" value="テキスト出力した暗号化パスワード" /> <Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountExpiration" value="アカウント期限" />
ServiceDefinction.cscfgに以下の記述を追加します。
<Imports> <Import moduleName="RemoteAccess" /> <Import moduleName="RemoteForwarder" /> </Imports>
後はプロジェクトをビルドします。
コンピューティングサービスに先程配置したパッケージを削除しての証明書フォルダに証明書をアップロードした後、先程と同様にWindows Azureにパッケージを配置します。
アップロード後、インスタンスを選択すると右上の[Connect]ボタンがアクティブになるのでクリックします。
アカウントとパスワードを入力するとリモートデスクトップに接続されます。
まとめ
今回はeclipseでのWindows Azureアプリケーションの開発を説明してきました。eclipseでWindows Azureアプリケーション開発を行う意味としては、今まで作業していた環境移行の手間の軽減や、開発を行ってきた資産等を引き継ぎ等が考えられますが、そのような作業を行う際に何らかの参考になればと思います。