既存のPHP+MySQLのウェブアプリケーションをWindows Azure上で動かすにはいくつかの方法あります、今回は元々Xampp上で動作するウェブアプリケーションをWindows Azure MySQL PHP Solution Accelatorを使って動作検証しました。
今回利用するパッケージは下記通り
 1. Windows Azure MySQL PHP Solution Accelator
 2. MySQL 5.1.58 x64
 3. PHP 5.2.17 nts VC6 x86
 4. phpMyAdmin 3.4.3.2
手順は下記通り
■上記パッケージをインストール
 MySQLインストールに関して
 1. カスタマイズインストールを選んで、サーバーデータとプログラムを同じフォルダにインストール
 2. インスタンスConfigurationは行わない
 3. binフォルダにある.map及び.pdbを削除
■Solution AccelatorのBuild.batを実行
 先ほどインストールしたMySQL、PHP及びphpMyAdminのフォルダを指定します
■PHPの修正
 PhpMyAdminWebRole\php\php.ini-recommendedをphp.iniに名前変更して、下記修正を行う
 extension_dir = "./ext"
 extension=php_mbstring.dll
 extension=php_mcrypt.dll
 extension=php_mysql.dll
 cgi.force_redirect = 0
 今回検証したウェブアプリケーションにはさらに下記設定が必要
 short_open_tag=On
 extension=php_pdo.dll
 extension=php_pdo_mysql.dll
■PhpMyAdminの修正
 PhpMyAdminWebRole\phpmyadmin\libraries\config.defualt.phpに下記修正を行う
 $cfg['AllowArbitraryServer'] = true;
■MySQLの設定
 ServiceConfiguration.cscfgでMySQLのインスタンス数を設定します
  <Role name="MySql_WorkerRole">
     <Instances count="1" />
    ……
  </Role>
■Configの修正
 ServiceConfiguration.cscfgに下記修正を行う
 1.ローカルエミュレータの場合
  a.TableStorageEndpoint
   http://127.0.0.1:10002
  b.BlobStorageEndpoint
   http://127.0.0.1:10000
  c.DataConnectionString
   UseDevelopmentStorage=true
  d.DiagnosticsConnectionString
   UseDevelopmentStorage=true
 2.WIndows Azureにデプロイする場合
  a.TableStorageEndpoint
   http://Account Name.table.core.windows.net
  b.BlobStorageEndpoint
   http://Account Name.blob.core.windows.net
  c.DataConnectionString
   DefaultEndpointsProtocol=https;AccountName=Account Name;AccountKey=Account Shared Key
  d.DiagnosticsConnectionString
   DefaultEndpointsProtocol=https;AccountName=Account Name;AccountKey=Account Shared Key
  e.AccountName
  f.AccountSharedKey
■デプロイ&実行
 1. ローカルエミュレータの場合
  Runme.cmdを実行します。途中でMySQLにのファイアウォール警告が出た場合許可します。
  
 2. Windows Azureの場合
  Packme.cmdを実行して、パッケージファイルが作成されます。
  このファイルをAzureにデプロイします。
■PhpMyAdminからMySQLへ接続
 1. MySQLのIPアドレスおよびポートの確認
  http://XXX.cloudapp.net/Admin.aspxに接続します
   
   「Show MySql instances」をクリックして、MySQLのIPアドレスおよびポートを確認できます
   
2. PhpMyAdminからMySQLへ接続
  http://XXX.cloudapp.net/PHPMyAdmin/index.phpに接続して、先ほど確認したIPアドレスおよびポート番号を入力してログインします。初期状態ではユーザー名は「mysqluser」、パスワードは「#ms123」になります。
  
  ログイン後、phpMyAdminの画面が表示されます
■まとめ
 とりあえずAzure上でPHP+MySQLが動作することを確認しました。ただし課題まだ残っています。
 1.MySQLインスタンスのアドレスやポート番号は固定じゃないので、ウェブアプリケーションで設定を動的に変える方法を考える必要があります。Azure Companionでは改良されたようなので、今度試してみる
 2. Windows Azureではロールが終了した場合、MySQLのデータも全部消えます。そのためMySQLはレプリケーション機能を利用して、Master/Slave構成で動作しています、さらにBlob Storageを使って、定期的に差分バックアップを取っています。今後障害発生時のリカバリについて検証する必要があります。
Azure Companionでどうなったのも気になる。
 3. メンテナンスを考える場合、SQLAzureに移行したほうが楽かもしれません、移行のコストにもよりますが
 4. 今回検証したウェブアプリケーションではAzure上で多くの機能が動作しませんでした。下記のエラーが発生します
  HTTP エラー 400.0 - Bad Request
  ASP.NET detected invalid characters in the URL.
  どうも今回のウェブアプリケーションでは下記例のように、URLに「&」が使われており(URLエンコードはしておりますが)
   URL例:http://xxxxxxx/delete/id/6&26?abc=1
  Apacheでは問題ないですが、IISではそれがだめ。ここに書いてある解決方法を試してもだめでした。今度時間あったらもうちょっと調べる
以上
0 件のコメント:
コメントを投稿