パッケージ化してローカルのエミュレータで動作確認
本番へ展開する前に、ローカルのエミュレータであるCompute Emulatorで、アプリの動作を確認してみましょう。
■ サービス定義ファイルとサービス構成設定ファイルを作成
その前に、パッケージを作成するのに必要なサービス定義ファイルと、実行するために必要なサービス構成設定ファイルを作成する必要があります。作成したファイルは、「wwwroot」フォルダの親フォルダ(通常は「C:\inetpub」、以下「inetpub」)に追加します。
まずは、サービス定義ファイル(今回は、「ServiceDefinition.csdef」)を作成します。以下のような内容で、エンドポイントの設定を定義して作成します(参考:Windows Azure Service Definition Schema)。
<?xml version="1.0" encoding="utf-8"?> <ServiceDefinition name="PHPSample" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition"> <WebRole name="WebRole" enableNativeCodeExecution="true"> <Sites> <Site name="Web"> <Bindings> <Binding name="Endpoint1" endpointName="Endpoint1" /> </Bindings> </Site> </Sites> <Endpoints> <InputEndpoint name="Endpoint1" protocol="http" port="80" /> </Endpoints> </WebRole> </ServiceDefinition>
次に、サービス構成設定ファイル(今回は、「ServiceConfiguration.cscfg」)を作成します。今回は、以下のような内容で、Guest OSには2.x系を設定します(参考:Service Configuration Schema)。
<?xml version="1.0" encoding="utf-8"?> <ServiceConfiguration serviceName="PHPSample" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="2" osVersion="*"> <Role name="WebRole"> <Instances count="1" /> </Role> </ServiceConfiguration>
■ CSpackとCSRunを使ったパッケージ化と実行
ファイルの作成が終了したら、Compute Emulatorを使って、アプリを動作させます。Compute EmulatorやAzure本番環境で実行するには、CSPackを使ってサービスのパッケージを作成する必要があります。
CSPackで作成したエミュレータ用のパッケージは、CSRunを使って実行可能です。
エミュレータ用のパッケージを作成します。「Azure SDK Command Prompt」を実行(「inetpub」フォルダのUACが有効の場合は、管理者として実行)し、inetpubフォルダに移動します。まず、以下のコマンドを実行し、Compute Emulatorで動作させるパッケージを作成します。
cspack ServiceDefinition.csdef /copyonly /out:SamplePackage.csx /sitePhysicalDirectories:WebRole;Web;wwwroot /role:WebRole;wwwroot
「SamplePackage.csx」フォルダが作成されパッケージの作成が終了したら、以下のコマンドを実行します。
csrun SamplePackage.csx ServiceConfiguration.cscfg /launchbrowser
■ ローカルの「Compute Emulator上」で動作確認
問題がなければパッケージされたサービスがCompute Emulator上で起動し、Webブラウザが起動されます。
Webブラウザが起動したら、先ほどと同様に適当なファイルを指定して「アップロード」ボタンをクリックすれば、ページが遷移しファイルの登録が完了します。確認が終わったらWebブラウザを終了します。また、稼働しているCompute Emulatorを停止して削除するため、以下のコマンドを実行します。
csrun.exe /removeall
この後、本番環境へ展開します。AzureホストサービスとAzureストレージ サービスを使用するので、「Azureデベロッパー ポータル」でホストサービスとストレージアカウントを事前に作成する必要があります。
PHP実行環境をWebアプリと一緒にパッケージ化
ローカルでの確認が終わったら、本番環境へ展開していきます。その前に少しだけ修正します。ローカルと同様に、本番環境でもPHPのWebアプリを動かす場合には、PHPをインストールして環境を設定する必要があります。
WebPIを用いてインストールすることも可能ですが、今回は本番と開発環境でPHPのバージョンに差が出ないように、PHPランタイムをWebアプリと一緒にパッケージ化します。スタートアップタスクで、FastCGIとハンドラマッピングの設定を行います。
最初に、PHPランタイムを含めたパッケージを作成するため、Webサイト内にシンボリックリンクを作成します。
mklink /d "c:\inetpub\wwwroot\php" "C:\Program Files\PHP\v5.3"
次に、PHPアプリを実行するための設定を、スタートアップタスクで行います。まず、スタートアップタスクで実行されるバッチとして「setup.cmd」を作成します。setup.cmdでは、PowerShellの実行ポリシーを変更し、script.ps1を実行します。今回は、以下のような内容で作成し、「wwwroot」フォルダの直下に「bin」フォルダを作成して追加します。
@echo off powershell -command Set-ExecutionPolicy RemoteSigned powershell .\script.ps1 "\"%RoleRoot%\""
次に、setup.cmdから実行されるPowerShellスクリプトとして「script.ps1」を作成します。script.ps1 では、FastCGIとハンドラマッピングの設定を行います。今回は、以下のような内容で作成し、binフォルダに追加します。
Import-Module Webadministration $phpPath = $Args[0] + "\approot\php\php-cgi.exe" $basePath = $Args[0] + "\base\x86" New-WebHandler -Name "PHPHandler" -Path *.php -Verb * -Modules FastCgiModule -ScriptProcessor $phpPath -PSPath "IIS:\Sites" Add-WebConfiguration "/system.webServer/fastCgi" -value @{fullPath=$phpPath} Add-WebConfiguration "/system.webServer/fastCgi/application/environmentVariables" -value @{name='PATH';value=$basePath}
次に、サービス構成設定ファイル(ServiceDefinition.csdef)を修正して、スタートアップタスクとしてsetup.cmdを実行するようにします。以下のような内容になります。
<?xml version="1.0" encoding="utf-8"?> <ServiceDefinition name="PHPSample" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition"> <WebRole name="WebRole" enableNativeCodeExecution="true"> <Sites> <Site name="Web"> <Bindings> <Binding name="Endpoint1" endpointName="Endpoint1" /> </Bindings> </Site> </Sites> <Endpoints> <InputEndpoint name="Endpoint1" protocol="http" port="80" /> </Endpoints> <Startup> <Task commandLine="setup.cmd" executionContext="elevated" taskType="simple"></Task> </Startup> </WebRole> </ServiceDefinition>
最後に、ファイルの保存先をAzureストレージ サービスに変更します。upload.php の以下の部分を修正します。
$host = Microsoft_WindowsAzure_Storage::URL_CLOUD_BLOB; $accountName = ‘{ストレージアカウント}’; $accountKey = ‘{ストレージキー}’; $usePathStyleUri = false;
ファイルをBlobに保存するPHPアプリをAzureへ展開
Azure本番環境へ展開していきます。最初に、アップロードする本番用パッケージを作成するために、以下のコマンドを実行します。
cspack ServiceDefinition.csdef /sitePhysicalDirectories:WebRole;Web;wwwroot /role:WebRole;wwwroot
パッケージ化が終了すると、サービス構成設定ファイルと同じフォルダ内に「ServiceDefinition.cspkg」が作成されるので、「Azureデベロッパー ポータル」にアクセスしてデプロイします。
デプロイが終わったら、ローカルと同様にWebブラウザでPHPアプリを起動してファイルをアップロードし、確認してください。実際には、異なる環境でアプリが動作していますが、先ほどとほぼ変わりなく動作します。
ここまで、Azure SDKとエディタを使った、簡単なAzure用PHPアプリの開発方法と、本番環境へのデプロイについて解説してきました。通常のIISで稼働している既存のWebアプリをAzure上へ移行するシナリオなどでも、CSPackとCSRunを使ったデプロイ方法を適用できます。
次ページからはいよいよ、FacabookアプリをPHP言語でAzure上に作成する方法を解説します。
Copyright © ITmedia, Inc. All Rights Reserved.