Windows Azure SDK for PHPによるWindows Azureクラウド サービス (Webロール) 向けパッケージングでのWebPIのアップデート

Posted: 2012/09/27 カテゴリー: Uncategorized
タグ:, , , ,

Windows Azure SDK for PHPを使って、Windows Azureクラウド サービス (Webロール) 向けにパッケージングを行っているシステムで、新規デプロイ、ゲストOS自動更新などで、ロール インスタンス (VM) が起動した際に、Microsoft Drivers for PHP for SQL Server (php_sqlsrv.dll、php_pdo_sqlsrv.dll) が存在しないためにエラーとなるケースが、最近起きています。

 

 

自動生成されるWebロールのスタートアップ タスク (インスタンス起動時に自動実行されるスクリプト) では、Microsoft Web Platform Installer (WebPI) v3を使って、PHPやMicrosoft Drivers for PHP for SQL Serverをインストールしています。

エラーの原因は、WebPI v3でのMicrosoft Drivers for PHP for SQL Serverの定義 (ダウンロードURLやインストール手順) がメンテナンスされていなかったことが原因です。

2012年8月のWebPI v4リリース後はWebPI v3はサポートされなくなったので、Webロールのスタートアップ タスクが内部使用するWebPIをv3からv4にアップデートしてみましょう。

まず、新旧SDK共通の手順として、パッケージングを行うWindowsマシンで、上記URLの「Free Download」からWebPI v4をダウンロード、インストールします。

(1) Windows Azure SDK for PHP (旧バージョン)

CodePlexで公開されているWindows Azure SDK for PHP (旧バージョン) を使った、パッケージの流れは、次のチュートリアルをご覧ください。

まず、scaffolderコマンドで、ベースとなるクラウド サービス ディレクトリを自動生成します。

scaffolder run -out="クラウド サービス ディレクトリ"

クラウド サービス ディレクトリには、クラウド サービスの定義ファイル (csdef)、構成ファイル (cscfg)、Webロール ディレクトリ (既定ではPhpOnAzure.Web) が自動生成されているはずです。

Webロール ディレクトリには、アプリケーションのPHPファイル (index.phpなど) をコピーします。動作確認をする場合は、phpinfo()を出力するindex.phpを作成しましょう。

<?php
phpinfo();
?>

Webロール ディレクトリ配下の \resources\WebPICmdLine ディレクトリには、WebpiCmdLine.exe を含むWebPI v3 Betaのバイナリがあります。

ここで、これをWebPI v4にアップデートしていきます。WebPI v4をインストール済みのはずなので、インストール ディレクトリ (C:\Program Files\Microsoft\Web Platform Installer など) にある次の4ファイルを、Webロールの \resources\WebPICmdLine ディレクトリに上書きコピーします。v3とv4で、実行ファイル名が異なる点に注意しましょう。

  • Microsoft.Web.PlatformInstaller.dll
  • Microsoft.Web.PlatformInstaller.UI.dll
  • WebpiCmd.exe
  • WebpiCmd.exe.config

次に、Webロールの \bin ディレクトリにある install-php-impl.cmd を編集します。実行ファイル名を webpicmdline から webpicmd に変更し、/Install オプションを追加します。

"..\resources\WebPICmdLine\webpicmdline" /Products:PHP53,SQLDriverPHP53IIS,PHPManager /AcceptEula  >> ..\startup-tasks-log.txt 2>>..\startup-tasks-error-log.txt

 

"..\resources\WebPICmdLine\webpicmd" /Install /Products:PHP53,SQLDriverPHP53IIS,PHPManager /AcceptEula  >> ..\startup-tasks-log.txt 2>>..\startup-tasks-error-log.txt

後は、通常通り、packageコマンドでクラウド サービス パッケージ (cspkg) を作成し、管理ポータルや管理APIでWindows Azureにデプロイします。

package create -in="クラウド サービス ディレクトリ" -out="出力ディレクトリ" -dev=false

phpinfo()のRegistered PHP Streamsに「sqlsrv」が含まれていれば、Microsoft Drivers for PHP for SQL Serverが正しくインストールされています。

(2) Windows Azure SDK for PHP (新バージョン)

新バージョンでは、Windows Azure PowerShellを使って、パッケージングを行います。Windows Azure PowerShellの基本的な使い方については、次のドキュメントをご覧ください。

まだ行っていない場合は、上記ドキュメントを参考にして、Get-AzurePublishSettingsFile、Import-AzurePublishSettingsFileコマンドレットを使い、デプロイ先のAzureサブスクリプションを設定しておきます。

New-AzureServiceProjectコマンドレットで、クラウド サービス ディレクトリを自動生成します。クラウド サービスの定義ファイル (csdef)、構成ファイル (cscfg) が自動生成されるはずです。

New-AzureServiceProject

次に、クラウド サービス ディレクトリでAdd-AzurePHPWebRoleコマンドレットを実行し、PHP向けに構成されたWebロールのディレクトリを自動生成します。

Add-AzurePHPWebRole

このWebロール ディレクトリ配下の \bin ディレクトリには、WebPI v3 Betaのバイナリとスタートアップタスクが含まれています。

ここで、これをWebPI v4にアップデートしていきます。WebPI v4をインストール済みのはずなので、インストール ディレクトリ (C:\Program Files\Microsoft\Web Platform Installer など) にある次の4ファイルを、Webロールの \bin ディレクトリに上書きコピーします。v3とv4で、実行ファイル名が異なる点に注意しましょう。

  • Microsoft.Web.PlatformInstaller.dll
  • Microsoft.Web.PlatformInstaller.UI.dll
  • WebpiCmd.exe
  • WebpiCmd.exe.config

次に、Webロールの \bin ディレクトリにある setup.cmd を編集します。実行ファイル名を webpicmdline から webpicmd に変更し、/Install オプションを追加します。

".\webpicmdline" /Products:PHP53,SQLDriverPHP53IIS,PHPManager /AcceptEula  >> ..\startup-tasks-log.txt 2>>..\startup-tasks-error-log.txt

 

".\webpicmd" /Install /Products:PHP53,SQLDriverPHP53IIS,PHPManager /AcceptEula  >> ..\startup-tasks-log.txt 2>>..\startup-tasks-error-log.txt

後は、通常通り、Publish-AzureServiceProjectコマンドレットで、クラウド サービスをWindows Azureにデプロイします。

Publish-AzureServiceProject -Location "East Asia"

phpinfo()のRegistered PHP Streamsに「sqlsrv」が含まれていれば、Microsoft Drivers for PHP for SQL Serverが正しくインストールされています。

Windows Azure SDK for PHPの旧バージョンから新バージョンへの移行

このブログ ポストの本題ではないですが、Windows Azure SDK for PHPの旧バージョンをお使いの方は、新バージョンへの移行をご検討ください。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中