AWS×Azure PHP導入と開発環境の対決:PHP開発で使える2大クラウドを徹底検証(2)(3/3 ページ)
クラウド上でのJavaやRuby、.NETを利用した開発についての記事は増えてきていますが、クラウド上でのPHP利用に関する記事は、現時点では意外と少ないです。本連載では、PHP開発で利用することを前提に、Amazon Web Services(以下、AWS)とWindows Azureの2大クラウドを比較します。PHPのエンジニア以外でも参考になる内容になっていると思いますので、ぜひお読みください
AWS上のPHPアプリケーションの開発環境とデプロイ
AWS上でのPHPアプリケーションの動作環境には、次の2つがあります。
- Amazon EC2上のWebサーバ
- Elastic Beanstalk(自動的にスケールするWebサーバ+ロードバランサ)
それぞれについて見ていきましょう。
Amazon EC2上のWebサーバを利用する場合
EC2を利用する場合、PHPアプリケーションを動作させるには、ApacheとPHPが動作するAmazon EC2のインスタンスを用意します。素のLinux OSにApacheとPHPをインストールしてもかまいませんし、ApacheとPHPを組み込んだインスタンスを起動してもよいでしょう。アプリケーションは、scp/sftpなどを利用してサーバに転送します。Windowsの場合、WinSCPなどを利用すると良いでしょう。
アプリケーションは、単なるファイル転送でデプロイできるので、開発環境は特に選びません。お好きなエディタや開発環境で開発を行うことができます。
Elastic Beanstalkを利用する場合
Elastcic Beanstalkを利用すると、システムの負荷に応じて自動的にサーバ台数を増やしたり減らしたりすることができます。残念ながら、Elastic Beanstalkは、現在のところJavaにしか対応していませんが、JavaのWebコンテナ上でPHPアプリケーションを動作させることができるQuercusを利用すると、PHPアプリケーションをElastic Beanstalk上で動作させることができます。Quercusについての詳細は「JavaでPHPを使ってみた」などをご覧ください。
Eclipse上での利用
Elastic Beanstalkを利用する場合、EclipseにAWS Toolkit for Eclipseをインストールすると、Eclipse上のプロジェクトから直接Elastic Beanstalkへアプリケーションをデプロイすることがでます。
Elastic Beanstalkの稼働状況も、TomcatやJBossなどの他のサーバと同様に、Eclipseのサーバビューから確認することができます。
また、AWS ExplorerからAWSの各サービスの設定を行うことができます。Elastic Beanstalkの設定では、アプリケーションサーバのJVMのメモリやスケールアウトする際のサーバ数の上限、スケールアウトする条件などを設定することができます。
その他のサービスの設定もここから行うことができます。
Elastic Beanstalkへデプロイすれば、自動的にロードバランサやEC2のインスタンスの起動・設定を行ってくれるので、インスタンスの起動、ApacheやPHPのインストール、アプリケーションの転送やWebサーバの公開ディレクトリへのコピーなどが不要になり便利です。
AWS Toolkit for Eclipseは、素のEclispe以外にもAptanaなどでも利用することができますが、Pleiadsと組み合わせて利用すると、AWS Toolkit for Eclipseが正しく動作しないことがあるので注意してください。
Eclipse以外からの利用
Elastic Beanstalkを利用する場合で、そのほかのエディタや開発環境を利用したいときは、warファイルを作成し、Elastic Beanstalkへデプロイすることもできます。その場合は、EclipseのAWS Explorerの代わりに、Webから操作できるAmazon Management Consoleが利用できます。
JVMの設定やスケールアウトの設定など、Eclipse上でできる設定は、Amazon Management Consoleからでも行えるので、心配は要りません。
Quecrusを利用する場合、完全に通常のPHPと互換性があるわけではないので注意してください。筆者がWordpressを簡単に動作させた感じでは、Wordpressの最新版である3.3は動作せず、2.9.2日本語版は動作はするがメッセージは英語になっていました。ただし、注意して利用すれば、実用レベルで利用でき、すでに動作実績があるアプリケーションも多数あります。Quercusの公式ページには、Wordpress、XOOPS、Drupal、phpMyAdminなどの動作実績が記載されています。
Windows Azureのデータベース環境
Windows Azure上でRDBを利用する方法としては、以下の2つがありますす。また、Windows Azure上のPHPアプリケーションからはオンプレミスと同様の方法でRDBを利用することが可能です。
仮想マシンの利用
WorkerロールやVMロールといった仮想マシン上に、MySQLなどのパッケージをインストールし、永続化データのみをストレージサービスのドライブに配置することで、Windows Azure上でRDBを利用することが可能です。また、Webサーバと同一のインスタンスにパッケージを配置することも可能です。
ただし、こちらの方法を利用する場合はレプリケーションやスケールアウトの設計を自分で行う必要があります。また、次項の「SQL Azureの利用」 で記載する豊富な機能を利用することができないため、Windows Azure上でRDBを利用したアプリケーションを運用する場合は SQL Azureの利用を推奨します。
SQL Azureの利用
Windows Azure上では、SQL Azureという、SQL Serverがクラウド対応したものを利用することが可能です。すでにサービスは正式リリースされており、データセンタ間の同期や帳票出力機能も提供しています。Windows Azureの管理ポータルから、SQL Azureのインスタンスを作成することで利用可能になります。
また、SQL Azureでは、基本機能であるデータベース機能、他のデータベースと同期させる機能、クラウド上の帳票基盤機能以外にもさまざまなサービスを提供しています。正式リリース前の機能はSQL Azure Labsというサイトから利用登録をすることが可能であり、データベースをバックアップする機能や、SQL Azureへ移行する際の互換性をチェックする機能などが利用可能です。
また、PHPアプリケーションから SQL Azureに接続する方法は、How to: Connect to SQL Azure Using PHPに詳しく記載されています。別途参照してください。
AWSのデータベース環境
AWSでは、MySQL、Oracleを利用できるAmazon RDSがデータベースサービスとして提供されています。また、EC2インスタンスで動作するOSにMySQLを導入する方法もあります。PHPによる開発では主にMySQLが利用されるので、ここでは、MySQLの導入について見ていきます。
EC2インスタンスでの利用
EC2インスタンスでMySQLを利用する場合、EC2インスタンスをAmazon Management Consoleなどから起動して、
# yum install mysql
や、
# aptitude install mysql
などでmysqlをインストールすれば完了です。
通常のLinuxへのMySQLサーバの構築となんら変わるものはありません。Webサーバと同じインスタンスでMySQLを起動することもできるし、別のサーバで起動することもできます。自分でMySQLを構築できるので、柔軟な構成を取ることができます。
Amazon EC2のインスタンスには、インスタンスストアから起動するイメージと、EBSから起動するイメージの2つがありますが、インスタンスストアから起動したイメージは、OSの障害などによりインスタンスが停止してしまうと内容が失われてしまいます。書き込みが発生するデータベースを利用する場合は、EBSを利用した方がいいでしょう。
Amazon RDSでの利用
Amazon RDSは、AWSが提供するRDBMSのデータベースサービスです。現在のところOracleとMySQLが利用できます。Amazon Management Consoleからデータベースの起動の設定を行うだけなので、非常に簡単に利用することができます。MySQLを利用した場合、設定によりレプリケーションやフェイルオーバ、定期バックアップ、パッチの自動適用などを簡単に行うことができます。
AWSでは、AWS SDK for PHPを利用すれば、分散データベースのSimpleDBやDynamoDBを利用することも可能ですが、SQLは利用できません。大規模なデータ処理などを行う場合は、SimpleDBやDynamoDBを利用した方が良い場合もあります。
まとめ
さて第2回は、クラウドのセットアップ、PHPアプリケーションの導入と開発環境、デプロイという観点で見ていきましたが、いかがでしたでしょうか。
クラウドをまずは使ってみるという点では、両者とも導入の手引きが完備されていて、迷うことなく始められそうです。ここは引き分けとみていいでしょう。
開発ツールについては、どちらも好きな開発ツールが利用できそうです。デプロイについては、AzureはEclipseを利用すれば簡単にできそうですが、他の開発ツールを利用する場合は、コマンドラインでパッケージングやデプロイを行う必要があり、若干煩雑に感じます。
AWSも、BeanstalkとPHPのJava実装のQuecursを利用すれば、Eclipseから簡単にデプロイでき、スケールアウトの設定までできるのは非常に便利そうです。また、warを作成すればWebコンソールから簡単にデプロイできます。通常のEC2環境であれば、scpなどによりファイルを転送するだけなので、それほど手間ではなさそうです。
開発ツールは互角ですが、デプロイについては、AWSがリードしていそうです。
データベースに関しては、MySQLの利用については、Amazon RDSなどを利用すればAWSの方が簡単にできそうです。一方、分散データベースであるWindows AzureのSQL Azureも魅力的です。Amazon SimpleDB/DynamoDBに比べると、分散データベースでSQLが使えるのと、PHP標準のデータベースアクセスフレームワークのPDOでデータベースが利用できるのは使い勝手がよいです。こちらはAzureが一歩リードといった感じです。
こうしてみると、今回は、どちらも一長一短で引き分けといったところでしょうか。次回は、実際にシステムとして利用する際に気になる、運用や性能面を見ていきたいと思います。お楽しみに!!
Copyright © ITmedia, Inc. All Rights Reserved.