Windows Azure で Copper PDF を運用するには

Microsoft社のクラウド環境であるWindows AzureでCopper PDFを動作させる方法を解説します。

Azure環境での構成

Azureでは仮想環境上に「ロール」と呼ばれる複数のプログラム実行環境を配置することができます。ロールの種類にはASP.NET, PHP等、Internet Information Server (IIS)のウェブアプリケーション実行環境である「Webロール」、バックグラウンドの処理などを行う「Workerロール」、両方の用途に使える「VMロール」があり、Copper PDFはそのうちどのロールでも動かすことができます。

ここでは、WebロールでCopper PDFを動作させ、非クラウド環境と同様にlocalhostへのソケット通信によりウェブアプリケーションからCopper PDFの機能を呼び出す方法を解説します。

なお、Azure環境でサーブレット/JSPを動作させる場合は、Workerロールでアプリケーションサーバー(Tomcat, Jetty等)を起動する方法が一般的ですが、この場合はWebロールがWorkerロールに変わるだけで、やり方はほとんど同じです。

プロジェクトの準備

次のソフトウェアが必要になります。

  • Copper PDF 3.0.0 以降 (ZIPアーカイブ)
  • Windows用のJava実行環境(JRE,64ビット版を推奨)

また、Windows Azureの開発サイトから次のものを入手してください。

  • Windows Azure のサブスクリプション
  • Windows Azure SDKおよびWindows Azure Tooks for Microsoft Visual Studio
あらかじめ必要な設定をしたVisual Studioのプロジェクトを準備しています。こちらからダウンロードしてください。このプロジェクトをWindows Azure Tooks for Microsoft Visual Studioで読み込んでください。次に、WebRole1のcopperディレクトリにCopper PDFのZIPアーカイブを配置してください。WindowsにJREをインストールし、JREのディレクトリ(通常はC:Program FilesJavajre6)をZIPアーカイブに圧縮し、copperディレクトリに配置してください。
2つのZIPのプロパティを開きCopy to Output DirectoryをCopy if newerに設定してください。
startup.cmdを編集し、次の太字の箇所を先のZIPアーカイブに合わせて書き換えてください。
@REM unzip JRE
cscript /B /Nologo utilunzip.vbs copperjre6.zip .

@REM unzip CopperPDF
cscript /B /Nologo utilunzip.vbs coppercopper-pdf-3_0_1.zip .

cd CopperPDF
start ..jre6binjava.exe -Duser.home=. -Djava.util.logging.config.file=conf/logging.properties -Djp.cssj.boot.lib=lib:jetty/lib -Djp.cssj.plugin.lib=plugins -Djp.cssj.boot.main=jp.cssj.copper.Main -Djp.cssj.driver.default=conf/profiles/default.properties -Djp.cssj.copper.config=conf -cp lib/boot.jar jp.cssj.boot.Main -start
アプリケーションの実行

アプリケーションをクラウドに配備するために、Solution ExplorerのAzureCopperを右クリックしてメニューからPublish…を選択してください。最初は証明書(Credentials)の設定が必要です。メニューから<Add…>を選択してください。

表示されたダイアログの1.のメニューで<Create…>を選択し、証明書を追加してください。

WindowsAzure管理ポータル(windows.azure.com)にアクセスし、管理証明書を追加してください。証明書ファイルは上のダイアログ2.のCopy the full pathでクリップボードにコピーされるファイルパスにあるものを使います。上記ダイアログの3.には以下の画面で表示されるサブスクリプションIDをコピーしてください。

Publishを実行して、アプリケーションの配備が終わるまで30~60分ほどかかります。

以下の画面のDNS名のアドレスにブラウザでアクセスすると、サンプルアプリケーションが表示されます。

サンプルアプリケーションの解説

ServiceDefinition.csdefにはInterrole Communicationとスタートアップコマンドの設定がされています。

以下の設定は、スタートアップコマンドとしてstartup.cmdを実行するためのものです。

    <Startup>
      <Task commandLine="utilstartup.cmd" executionContext="elevated" taskType="simple">
      </Task>
    </Startup>

startup.cmdではZIPファイルを展開するためのスクリプト(unzip.vbs)を使用して、必要なソフトウェアを仮想環境上に展開します。最後に、展開されたJREを使ってCopper PDFを起動しています。

あとは http://localhost:8097/ で起動しているCopper PDFに HTTP/RESTインターフェースを利用してウェブアプリケーションからアクセスしています。

ライセンスについて

クラウド環境では実際に動作するサーバーの台数が不確定となるため、クラウド環境向けのライセンスをお求め下さい。詳しくはこちらのフォームからお問い合わせください。

WorkerロールでCopper PDFを動作させる構成(参考)

Copper PDFをWorkerロールで動作させ、WebRoleから呼び出す構成も可能です。この場合、異なるロール間での通信(Interrole Communication)を行うための設定の必要があります。

2つのロールを使う場合のサンプルプログラムはこちらからダウンロードしてください。

こちらのサンプルではServiceDefinition.csdefにInterrole Communicationの設定をしています。

以下は、8097ポートへTCPプロトコルをInterrole Communicationに使用するための設定です。8097ポートはCopper PDFのHTTP/RESTインターフェースのデフォルトのポートです。

    <Endpoints>
      <InternalEndpoint name="CopperPDF" protocol="tcp" port="8097"/>
    </Endpoints>

WebロールのDefault.aspxは、Copper PDFにアクセスするサンプルのサーバーページです。クラウド環境で実行する場合、Webロールから見たWorkerロール上のCopper PDFは一般的にlocalhostにはありません。Default.aspx.csの以下の関数はWorkerロールのアドレスを取得するためのものです。このアドレスが、Webロールから見たCopper PDFのアドレスとなります。

        public string getCopperPDF()
        {
            RoleInstanceEndpoint[] endpoints =
                RoleEnvironment.Roles["WorkerRole1"].Instances.Select(
                    i => i.InstanceEndpoints["CopperPDF"]).ToArray();
            Random r = new Random(DateTime.Now.Millisecond);
            RoleInstanceEndpoint ep = endpoints[r.Next(endpoints.Count() - 1)];
            return String.Format("http://{0}/transcode", ep.IPEndpoint);
        }

PDF

Comments are closed.