LAMP開発者のためのWindows Azure講座

第3回 Azure上でPHPアプリをデプロイ,動作させてみよう

この記事を読むのに必要な時間:およそ 5 分

Windows Azureへのデプロイ

では,今作成したPHPプロジェクトをWindows Azureに実際にデプロイしてみましょう。

Windows Azureにデプロイするには,デプロイ用のパッケージファイルを作成します。PHP Explorerのプロジェクト「Sample1_WebRole1」を選択状態にして,⁠Windows Azure」メニューから「Create Windows Azure Service Package for Windows Azure PHP Project」を選びます。

図13 メニューから「Create Windows Azure Service Package for Windows Azure PHP Project」を選択

図13 メニューから「Create Windows Azure Service Package for Windows Azure PHP Project」を選択

しばらく待っていると,パッケージが作成され,パッケージが保存されたフォルダが自動的に開きます。

図14 パッケージフォルダの表示

図14 パッケージフォルダの表示

「Sample1.cspkg」が今作成したパッケージ(Zip圧縮されたファイル)で,⁠ServiceConfiguration.cscfg」⁠ServiceDefinition.csdef」が構成ファイル(XMLファイル)です。2つの構成ファイルの中身はそれぞれ以下のようになっています。

リスト1 ServiceConfiguration.cscfg

<?xml version="1.0" encoding="UTF-8"?>
<ServiceConfiguration serviceName="Sample1" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration">
  <Role name="WebRole1">
    <Instances count="1"/>
    <ConfigurationSettings>
      <Setting name="StorageAccountName" value="devstoreaccount1"/>
      <Setting name="StorageAccountKey" value="Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw=="/>
      <Setting name="SqlAzureHost" value=""/>
      <Setting name="SqlAzureUserName" value=""/>
      <Setting name="SqlAzurePassword" value=""/>
      <Setting name="SqlAzureDatabase" value=""/>
      <Setting name="UseDataStorage" value="false"/>
      <Setting name="UseDevelopmentStorage" value="true"/>
      <Setting name="UseCloudStorage" value="false"/>
      <Setting name="UseSqlAzure" value="false"/>
      <Setting name="LogLevel" value="Error"/>
      <Setting name="ScheduledTransferPeriodInSeconds" value=""/>
      <Setting name="WindowsAzureStorageConnectionString" value="UseDevelopmentStorage=true"/>
      <Setting name="XDrives" value=""/>
      <Setting name="XDrivesLocalCache" value=""/>
    </ConfigurationSettings>
  </Role>
</ServiceConfiguration>

リスト2 ServiceDefinition.csdef

<?xml version="1.0" encoding="UTF-8"?>
<ServiceDefinition name="Sample1" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WebRole enableNativeCodeExecution="true" name="WebRole1">
    <Imports/>
    <Endpoints>
      <InputEndpoint name="HttpIn" port="80" protocol="http"/>
    </Endpoints>
    <ConfigurationSettings>
      <Setting name="StorageAccountName"/>
      <Setting name="StorageAccountKey"/>
      <Setting name="SqlAzureHost"/>
      <Setting name="SqlAzureUserName"/>
      <Setting name="SqlAzurePassword"/>
      <Setting name="SqlAzureDatabase"/>
      <Setting name="UseDataStorage"/>
      <Setting name="UseDevelopmentStorage"/>
      <Setting name="UseCloudStorage"/>
      <Setting name="UseSqlAzure"/>
      <Setting name="LogLevel"/>
      <Setting name="ScheduledTransferPeriodInSeconds"/>
      <Setting name="WindowsAzureStorageConnectionString"/>
      <Setting name="XDrives"/>
      <Setting name="XDrivesLocalCache"/>
    </ConfigurationSettings>
  </WebRole>
</ServiceDefinition>

ServiceConfiguration.cscfgの<Role><Instances count="1"/>の記述があります。Instances要素はインスタンス数をあらわしていて,属性値の数だけAzure上にデプロイされます。

また,インスタンスのサイズについては,ServiceDefinition.csdefの<WebRole>に記述します。上記には含まれていませんが,たとえば,ServiceDefinition.csdefに<WebRole name="WebRole1" vmsize="ExtraSmall">のように記述すると,デフォルトのインスタンスのサイズである「小」⁠CPU:1.6 GHz メモリ:1.75 GB)が,⁠極小」⁠CPU:1 GHz メモリ:768 GB)に設定されます。

デプロイするにはEclipse上から直接行うこともできますが,ここでは,Windows Azure Platformの管理ポータルからパッケージをデプロイしてみます。管理ポータルからデプロイすることは,開発担当者と運用担当者を分離できるというメリットもあります。

デプロイするのは,Sample1.cspkgとServiceConfiguration.cscfgの2つです。

ブラウザで管理ポータルを開きます。サインイン後,図15のようなホーム画面が表示されるので,左側のメニューから「ホステッドサービス,ストレージ アカウント,CDN」をクリックします。

図15 Windows Azure Platform管理ポータル ホーム

図15 Windows Azure Platform管理ポータル ホーム

すると,そのすぐ上に「デプロイのステータス」⁠アフィニティグループ」などのメニューが表示されるので,⁠ホステッドサービス」をクリックします。すると,図16のように,現在利用可能なサブスクリプションとホステッドサービス,WebRole,インスタンスのリストが表示されます。

図16 利用可能なリソースの確認

図16 利用可能なリソースの確認

まず,デプロイする新規ホステッドサービスを作成します。サブスクリプションを選択して,ページ左上の「新規ホステッドサービス」をクリックすると(サブスクリプション上で右クリックでも可能⁠⁠,図17の画面が表示されます。

図17 新規サービス作成

図17 新規サービス作成

サービスの名前は任意です。URLは,.cloudapp.netのサブドメインになります。ここでは「webrole-phpinfo-test」とします。地域は「東アジア⁠⁠,デプロイオプションは「デプロイしない」を選択し,OKを押します。すると,図18のように「Sample1」ホステッドサービスが作成されるので,それを選択し,上部メニューまたは右クリックから「新規運用環境のデプロイ」を選択します。

図18 ホステッドサービスが作成される。⁠新規運用環境のデプロイ」を選択

図18 ホステッドサービスが作成される。「新規運用環境のデプロイ」を選択

続いて表示される画面図19で,デプロイ名を「phpinfo-test」⁠任意です)とし,⁠パッケージの場所」として,⁠ローカルを参照」を選んで,先ほど作成したC:\inetpub\wwwroot\Sample1配下にあるパッケージSample1.cspkgを選択します。次に,⁠構成ファイル」として,同じく「ローカルを参照」からServiceConfiguration.cscfgを選択します。

図19 デプロイにまつわる要件を入力

図19 デプロイにまつわる要件を入力

そのままOKを押すと,図20のような警告が出ます。インスタンス数に1を設定した場合に出る警告です。ここはそのままOKを押します。

図20 インスタンス数が1の場合の警告

図20 インスタンス数が1の場合の警告

その後,以下のように,⁠アップロードの準備中です」⁠○%アップロードしました」⁠初期化しています」などと進捗が表示されます。緑色で「準備完了」になるとアクセスできるようになるのですが,準備完了するまで5~10分ほどかかります。利用するデータセンター(さきほど「地域」で選択したものです)やアプリケーションの規模などによってデプロイの時間は変わります。

図21 デプロイ進行中

図21 デプロイ進行中

準備完了が表示されたら,⁠http://webrole-phpinfo-test.cloudapp.net」にアクセスしてみましょう。図22のようなサイトが表示されるはずです。

図22 デプロイが完了したページ

図22 デプロイが完了したページ

以上で,デプロイは終了です。デプロイしたままでは課金対象になりますので,動作が確認できたら,忘れずに環境を削除しておきましょう。

MySQLをインストールするための基礎知識

これまで見たように,Windows Azureは,インスタンス数やインスタンスのサイズを自由に変更できます。一方で,インスタンス内で利用するデータについては保証されません。

たとえば,PHPで掲示板アプリケーションを作成し,データをルートディレクトリ配下のDATAディレクトリに保存するとします。この場合,インスタンスが再起動した場合,デプロイ後に作成されたDATAディレクトリは消えてしまいます。実際には,いつインスタンスが再起動するかはユーザーサイドで把握できませんので,データを保存しておくストレージが必要になります。

そのため,Windows Azure Platformでは,データの永続性を確保するために,ブロブ(Blob⁠⁠,テーブル(Table⁠⁠,キュー(Queue⁠⁠,ドライブ(drive)という4つのストレージ,そしてRDBMSとしてSQL Azureが提供されています。PHPアプリケーションが利用するデータは,これらのストレージか,SQL Azureに格納することになります。

SQL AzureのかわりにMySQLを利用したいという場合は,工夫が必要です。次回は,その辺りの事情を踏まえつつ,MysqlをAzure上にデプロイする手順を検討してみたいと思います。

著者プロフィール

齋藤公二(さいとうこうじ)

インサイト合同会社

『月刊Computerwold』『CIO Magazine』(IDGジャパン)の記者,編集者などを経て,2011年11月インサイト合同会社設立。エンタープライズITを中心とした記事の執筆,編集のほか,OSSを利用した企業Webサイト,サービスサイトの制作を担当する。