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
@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); }