[GlassFish, Azure] TOTD #155: Run GlassFish in Windows Azure

David ChouのエントリでGlassFishをWindows Azure上で動かす方法について紹介していました。いつかやろうと思っていましたが、最初にDorisから紹介され、ここ数ヶ月止まっていたタスクを一気に進めることができてほんと興奮しています。Davidには本当に感謝しています。Blogに手順を掲載してくれ、私からのたくさんのメール(数日間でおよそ70件以上)に回答してくれました。おかげでGlassFishコミュニティに対し、よりわかりやすい手順を示すことができます。

David Chouのエントリ:Run Java with GlassFish in Windows Azure
http://blogs.msdn.com/b/dachou/archive/2011/01/17/run-java-with-glassfish-in-windows-azure.aspx

今日のTip OThe Day(TOTD)は、AzureでGlassFishを実行するための手順をご紹介します。
  1. 30日間無料のWindows Azureパスを入手しましょう。発行までに15日ほどかかりますので、それに応じて計画します。パス入手は http://www.windowsazurepass.com/ か、Dorisのエントリ(http://blogs.msdn.com/b/dorischen/archive/2010/12/13/free-windows-azure-platform-pass-no-credit-card-required-try-it.aspx )を参考に。
  2. ソフトウェアをダウンロードし、インストールします。
    1. Visual Studio Expressをダウンロードし、インストールします。
      Visual Studio Expressのダウンロード:http://www.microsoft.com/express/Downloads/
      1. ISOイメージを簡単にマウントできるようなツールがあると簡単にインストールできます(例えば Virtual Clone Drive など)。
    2. Azure SDK and Toolsをダウンロード、インストールします。
      Azure SDK and Tools : http://www.microsoft.com/downloads/en/details.aspx?FamilyID=7A1089B6-4050-4307-86C4-9DADAA5ED018&displaylang=en



      "VCloudService.exe"がVisual Studioのプラグインで、Azure ToolsをVisual Studioに統合します。SDKはVisual Studioにない機能を提供しており、コマンドラインから実行したり、Compute Emulator、Storage Emulatorを使ったプロジェクトのテストができます(後述します)。
    3. IIS 7.0をWindows Vistaにインストールします(手順はこちら
      [訳注] Windows 7のIIS 7.5でも動作します。
    4. ”World Wide Webサービス”と”アプリケーション開発機能”、”.NET拡張機能”、”ASP.NET”をコントロールパネルで選択します(以下はWindows7のコントロールパネルの例)。
    5. 最新のWindows用JDK1.6 をダウンロードし、Windowsマシンにインストールします。
      JDKのダウンロード: http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html
    6. GlassFish3.1 b40をダウンロードします。
      最新のGlassFishのダウンロード:
      http://dlc.sun.com.edgesuite.net/glassfish/3.1/promoted/latest-glassfish.zip
      [訳注]筆者の執筆段階のバージョンですので、最新のものではバージョンが異なることがあります。
  3. インストールするファイルをAzureのBlobストレージサービスにアップロードします。アップロードするファイルは以下の通りです。
      • GlassFishのZipファイル
      • JDKのインストールZipファイル
    1. Azure Management Consoleを開いて、新しいストレージアカウントを作成します。
    2. Blobストレージに複数個のコンテナを作成し、アプリケーションはappsコンテナ、JDKインストーラはjavaコンテナに配置します。Azureストレージサービス管理ツールはNeudesic社の Azure Storage Explorer やCerebrata社の Cloud Storage Studio など色々ありますが、Cloud Storage Studioを利用しています。

      [注意]これらのツールで新しいアカウントを作成する場合には、Azure Management Consoleで新しいストレージアカウントを作成し、アカウント資格情報には、プライマリアクセスキーアカウント名を使います。

      ここでは後のプロジェクトで指定しているアクセスキーと同じものを使っています。今回はGlassFish 3.1 build 40を使い、JDKをローカルPCにインストールして、Blobストレージにアップロードしました。別のオプションとしてJDKのサイレントインストールも可能です。
      アップロード後のAzure Blog ストレージの状況を見てみましょう。下の2枚のスナップショットのうち、Azure Storage Explorerが上図、Cloud Storage Studioが下図です。接続を作成する際は"HTTPS"のチェックボックスを忘れずに。



  4. Visual Studioのプロジェクトを作成します。
    1. IDE内部からAzure Compute Emulator(ローカル環境でテストに使用)に後で作成するサービスパッケージをデプロイするため、管理者権限でVisual Studioを起動します。
    2. ”ファイル”>”新しいプロジェクト”からcloud-basedプロジェクトを作成します。
    3. 新しいワーカーロールを作成します。
      ”Worker Role”を選択し 名前を”GlassFishWorker”としておきます。

    4. MinimalJavaWorkerRole.zip を展開し、次のファイルを”JettyWorkerRole”からこの新規作成しているソリューションにコピーします。
      • lib\ICSharpCode.SharpZipLib.dll
      • Run.cmd
      • Launch.ps1
        Mario Kosmiskaの's エントリ
        http://blogs.msdn.com/b/mariok/archive/2011/01/05/deploying-java-applications-in-azure.aspx
        コピー後のディレクトリ構成は以下のようになります。

      • ”Launch.ps1”と”Run.cmd”を”名前を付けて保存”します。エンコードはUTF-8ではなく、”西ヨーロッパ(Windows)-Codepage 1252” とします。
      • コピーしたファイルのプロパティを変更し、コンパイル、パッケージングのために出力ファイルにコピーできるようにします。ソリューションエクスプローラで、各ファイルを右クリックし、”プロパティ”を選択、”コピーしない”から”コピーする”に変更します。

      • ”Launch.ps1”を編集し、2個の事前定義した関数はそのままで、以下のようにテキストを変更します。”jdk1.6.0_23.zip”はAzure BlobストレージにUpしたJDK6のZipファイルで、同様に”glassfish-3.1-b40.zip”はGlassFish 3.1のZipファイルです。

        $connection_string =
        'DefaultEndpointsProtocol=http;AccountName=YOUR-STORAGE;AccountKey=YOUR-KEY'
        
        # JDK
        $jdk = 'jdk1.6.0_23.zip'
        download_from_storage 'java' $jdk $connection_string (Get-Location).Path
        unzip ((Get-Location).Path + "\" + $jdk) (Get-Location).Path
        
        # GlassFish
        $glassfish = 'glassfish-3.1-b40.zip'
        download_from_storage 'apps' $glassfish $connection_string (Get-Location).Path
        unzip ((Get-Location).Path + "\" + $glassfish) (Get-Location).Path
        
        # Launch GlassFish
        .\jdk1.6.0_23\bin\java `-jar
        .\glassfish3\glassfish\modules\admin-cli.jar start-domain --verbose
        
        
      • ”ServiceDefinition.csdef”ファイルのサービス定義を修正し、次の定義を追加します。

        <Startup>
           <Task commandLine="Run.cmd" executionContext="limited"taskType="background" />
        </Startup>
        <Endpoints>
           <InputEndpoint name="Http_Listener_1" protocol="tcp" port="80" localPort="8080" />
           <InputEndpoint name="Http_Listener_2" protocol="tcp" port="8181" localPort="8181" />
           <InputEndpoint name="Http_Listener_3" protocol="tcp" port="4848" localPort="4848" />
           <InputEndpoint name="JMX_Connector_Port" protocol="tcp" port="8686" localPort="8686" />
           <InputEndpoint name="Remote_Debug_Port" protocol="tcp" port="9009" localPort="9009" />
        </Endpoints>
        

        追加すると次のようになります。

        なお、”HTTP_Listener_1”の外部向けポートは80ですが、ローカルポートは8080になっていますので注意してください。この設定で、外部からのリクエストは特にポート番号を指定しなくても受信できます。内部ではGlassFishが実行しているところでは8080にルーティングされます。その他はデフォルトのままです。
    5. Visual Studioからプロジェクトをデプロイします。完全な手順が以下のURLにありますので参考にしてください。関連するところをキャプチャしました。
      1. 新しいHosted ServiceをAzure Management Consoleを使って作成します。”New Hosted Serviceをクリックし、詳細情報を入力します。繰り返しになりますが、外部ポートとして80、リダイレクトされる内部ポートとして8080を設定しましたので、”glassfish-service.cloudapp.net:80”もしくは”glassfish-service.cloudapp.net”でリクエストを受け付け、準備したインスタンス上で動作するGlassFish 3.1 b40へリダイレクトされます。サービス名はデプロイしたサービスのURLになるので注意してください。
      2. ソリューションエクスプローラでプロジェクトを右クリックして、”発行”を選択します。準備されているデフォルトのOSWindows Server 2008 SP2となっているので、ServiceConfiguration.csdef 中の”osFamily”と”osVersion”という2個の属性を修正します。例えばosFamilyを2にするとWindows Server 2008 R2になるという具合です。
      3. 資格情報を指定します。
      4. ”Copy the full path”をクリックして、証明書をManagement Portalの”Management Certificates”の欄にコピーします。
      5. ”production”環境を選択します。

        1. オプションとして、後で準備したシステムを確認したい場合にはリモートデスクトップ接続を構成することができます。
          詳細はこのURLを参照してください。注意点は以下の通りです。
          1. パスワードには大文字、小文字、数字、記号を含んでいる必要があります。エラー時にはメッセージは出ず、右側に赤いアイコンが現れます。
          2. 証明書のエクスポート
            1. 証明書作成後、”View...”>”Details”タブをクリックし、”Copy to file”ボタンを押すと生成した証明書をファイルにコピーできます。この証明書はManagement Portalにインポートする必要があります。
            2. ”Yes, export the private key”を選択していることを確認します。
            3. ”Delete the private key if the export is successful”を選択します。
          3. この証明書を(先ほどプロジェクトを発行した)Management Portalにアップロードします。このURLの”To upload a certificate using the management portal”を参考にしてください。
            設定に失敗すると、以下のエラーが出ます。
            There was no endpoint listening at https://management.core.windows.net/SUBSCRIPTION-ID/services/hostedservices/glassfish-service/deploymentslots/Production that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.
      6. ”Windows Azure Activity Log”にプロジェクトをAzureへデプロイしたときのログが表示されます。成功した場合のログがこちら。
        ”WebSite URL”にアクセスしてみましょう。
        Webベースの管理コンソールも見ることができます。
        GlassFishインスタンスはデフォルトインストールです。何しましょうかね…???すごいのは、Visual Studioでプロジェクトを右クリックしたら、またインスタンスをデプロイできるんです!

        もう一度、 David Chou に感謝の言葉を贈りたいと思います。この間ずっと助けてくれて、本当に感謝の念に堪えません。ありがとう。
        将来のエントリのためにいくつかToDoをまとめておきます。
        1. Java EE 6アプリケーションをNetBeansで作成し、このインスタンスにリモートデプロイする
        2. このインストールを Azure Compute Emulator と Storage Emulator.を使ってローカルでやってみる
        3. Power Shell.を使ってLaunch.ps1スクリプトをデバッグする
        4. JPAを使ってSQL Azureのデータにアクセスする
        5. リモートデスクトップ接続でSOAPActionエラーをデバッグする
        6. JDKインストールのためのWindows Azure の VM Role 機能を使ってみる
        7. ServiceConfigurationが拡張可能か、このファイルの属性がJDK/GlassFishインストールをコントロールしてもらいたい。
        8. GlassFish 3.1クラスタをAzureクラスタやAzureロードバランシングと統合する
        あなたはどれをやってみたいですか? :-)

        原文はこちら。
        http://blogs.sun.com/arungupta/entry/ttod_155_glassfish_in_azure

        0 件のコメント:

        コメントを投稿