Azure WebSites で自分専用の MySQL Server を作成する
このポストは、9 月 2 日に投稿した Create your own dedicated MySQL Server for your Azure Websites の翻訳です。
お客様が利用している LAMP 環境や WAMP 環境のアプリケーションを Azure でホストするには、使用が簡単で高い信頼性も得られる Azure WebSites を使用することをお勧めします。また、Azure WebSites は PHP スタックをサポートしており、MySQL Server の使用方法としては次の 2 種類から選択できます。
- Azure ストアから MySQL サービスの ClearDB を使用する
- Azure Virtual Machine で自分専用の MySQL Server をセットアップする
以下のような状況のときには、Azure で実行されている Virtual Machine で MySQL Server を使用します。
- MySQL の構成要件が特殊で、Azure ストアから利用可能な ClearDB のサービス プランでは対応できない場合
- 開発とテストを目的とした MySQL Server を構築し、複数の開発用/ステージング用サイトで再利用する場合
MySQL Server をセットアップする場合は Azure Virtual Machine を使用するのが最も手軽で、柔軟性の高いリソースが必要なときに自分専用のスケーラブルなコンピューティング インフラストラクチャを自由に構築することができます。Windows と Linux ディストリビューションのいずれでも、Azure 管理ポータルから数分程度で簡単に新しい Azure Virtual Machine を作成できます。この記事では次の操作について説明します。
- Microsoft Azure VM で MySQL Server を作成する
- Linux Azure VM で MySQL Server を作成する
- MySQL Server に接続可能な Azure WebSites を作成する
Microsoft Azure VM で MySQL Server を作成する
- ご自身の Azure アカウントで Azure 管理ポータルにログインします。
- 管理ポータルの左下で [ +New] をクリックし、[VIRTUAL MACHINE]、[QUICK CREATE] の順にクリックします。
- [Virtual machine configuration] ページで次の情報を入力します。
- Virtual Machine 名称 (windowsmyslsrv など) を指定します。
- 新規ユーザー名 (azureuser など) を指定します。
- [NEW PASSWORD] ボックスに強力なパスワードを入力します。
- [CONFIRM] ボックスにパスワードを再入力します。
- [SIZE] ボックスのドロップダウン リストから適切なサイズを選択します。
- [REGION/AFFINITY GROUP/VIRTUAL NETWORK] ボックスで、Virtual Machine イメージをホストするリージョンを選択します。
以上の手順で Windows Server 2012 VM が作成されます。MySQL を Microsoft VM にインストールする手順は、「Azure で Windows Server 2008 R2 を実行する Virtual Machine への MySQL のインストール」の記事を参照してください。この記事は Windows Server 2008 R2 について書かれたものですが、Azure Virtual Machine で任意の Windows Server VM を作成する場合も手順は同じです。
リモート アクセスを有効にする
MySQL Server は、既定では「ルート」ユーザーへのリモート アクセスを禁止しています。このため、新たにルート ユーザー用のホストを作成して、任意の場所からルート ユーザーとしてログインできるようにする必要があります。
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'
> IDENTIFIED BY 'password' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
mysql> exit
これで MySQL Server の構成が完了し、Microsoft Azure VM のデータベース ホスト名が「windowsmysqlsrv.cloudapp.net:3306」に設定されました。
Azure WebSites で index.php という名前の簡単な PHP アプリケーションを作成します。方法は、「Azure WebSites で PHP Web サイトを作成する方法」の説明をご覧ください。このアプリケーションは MySQL Server を実行している VM のデータベースに接続し、お客様の WebSites から新たに作成した MySQL Server に接続できるかどうかのテストを行います。
<?php
// 接続の作成: ホスト名、データベースのユーザー名とパスワード、
// データベース名を更新
$con=mysqli_connect("windowsmysqlsrv.cloudapp.net:3306","root","root",
"databasename");
// 接続を確認
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
else
{
echo "Connection with MySQL database was successful";
}
?>
注 : 「Access denied (アクセスが拒否されました)」や 「Host ‘xxx.xx.xxx.xxx’ is not allowed to connect to this MySQL server (ホスト ‘xxx.xx.xxx.xxx’ はこの MySQL Server への接続が許可されていません)」 などのエラー メッセージが表示された場合は、次の項目を確認します。
- ファイアウォール用の 3306 番ポートが受信側と送信側の両方で開かれているか
- 接続に使用しているユーザーが MySQL Server でリモート接続を許可されているか。ユーザーがホスト列でワイルドカードの「%」に関連付けられ、任意のリモート IP が許可されているかどうかを、mysql.host テーブルで確認します。
Linux Azure VM で MySQL Server を作成する
- ご自身の Azure アカウントで Azure 管理ポータルにログインします。
- 管理ポータルの左下で [ +New] をクリックし、[VIRTUAL MACHINE]、[FROM GALLARY] の順にクリックします。
- プラットフォームイメージとして [Ubuntu] を選択し、ページ右下の矢印をクリックして次に進みます。
- [Virtual machine configuration] ページで次の情報を入力します。
- Virtual Machine 名称 (linuxmysqlsrv など) を指定します。
- Virtual Machine の認証には、SSH キーによる方法とユーザー名とパスワードによる方法のいずれかを選択できます。ここではユーザー名とパスワードによる方法を使用します。新しいユーザー名 (azureuser など) を指定します。ここで指定した名前は Sudoers リストのファイルに追加されます。
- [NEW PASSWORD] ボックスに強力なパスワードを入力します。
- [CONFIRM] ボックスにパスワードを再入力します。
- [SIZE] ボックスのドロップダウン リストから適切なサイズを選択します。
- 矢印をクリックして次に進みます。
- [Virtual machine mode] ページで次の情報を入力します。
- Azure で Virtual Machine が作成されるまで待機します。
Virtual Machine の作成が完了したら、リモート接続先のエンドポイントを構成する必要があります。既定では、Azure のインストーラーが SSH のエンドポイントを公開されている 22 番ポートに作成し、該当する Virtual Machine に接続できるようにします。
Virtual Machine に接続する
仮想マシンのプロビジョニングとエンドポイントの構成が完了したら、SSH (Linux の場合) または PuTTY (英語) (Windowsの場合) を使用してそのエンドポイントに接続します。
SSH を使用した接続
Linux マシンの場合は、SSH を使用して仮想マシンに接続します。コマンド プロンプトで次のコマンドを実行します。
ssh newuser@testlinuxvm.cloudapp.net -o ServerAliveInterval=180
画面の指示に従って仮想マシンのユーザーのパスワードを入力し、仮想マシンに接続します。
PuTTY を使用した接続
Windows マシンの場合は、PuTTY を使用して仮想マシンに接続します。PuTTY はこちらのページ (英語) からダウンロードできます。
- putty.exe をご自身のコンピューター上のフォルダーにダウンロードして保存します。コマンド プロンプトを開き、putty.exe をダウンロードしたフォルダーに移動して実行します。
- [Host Name] に「linuxmysqlsrv.cloudapp.net」、[Port] に「22」と入力します。
Virtual Machine を更新する
仮想マシンの接続が確立された後に次のコマンドを実行すると、オプションでシステムの更新と修正プログラムの適用が実行できます。
sudo apt-get update
Ubuntu に MySQL Server 5 をインストールする
Ubuntu に MySQL Server 5 をインストールする手順は簡単で、時間もそれほどかかりません。皆様が想像するほど難しいものではないかと思います。
端末ウィンドウを開いて、次のコマンドを実行します。
sudo apt-get install mysql-server
MySQL クライアントも必要なので、端末ウィンドウで次のコマンドも実行します。
sudo apt-get install mysql-client
これで MySQL Server がインストールされます。サーバーの稼働状況は次のコマンドで確認できます。
sudo service mysql status
SSH トンネルを使用して MySQL に接続する
Secure Shell (SSH) は、ローカル マシンとリモート マシンの間に安全なチャネルを作成する際に使用されます。SSH は端末への安全なアクセスやファイル転送を実現するために一般的に使用されていますが、他にも、通常は暗号化されないネットワーク接続を転送するためにコンピューター間で安全なトンネルを作成する際にも使用されます。SSH トンネルも便利な機能で、外部から内部のネットワーク リソースへのアクセスを許可する場合に使用できます。SSH では、ローカル マシンのポートを開いて、そのポートを通過するすべての通信をサーバー上で実行されている MySQL にシームレスに転送します。このため、MySQL Server がローカル マシンで実行されている場合と同じように見えます。
Ubuntu VM で SSH トンネルを作成する場合、端末ウィンドウで –L のオプションを付けて SSH コマンドを実行し、ローカル マシンのポートでの転送を許可します。
- まず 3306 番ポートを開いて (既定では閉じられています)、リモート クライアントが MySQL Server に接続できるようにします。次のコマンドを実行して、TCP で使用する 3306 番ポートを開きます。
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT
次のコマンドを実行して、3306 番ポートが開かれたかどうかを確認します。
sudo netstat -anltp|grep :3306
- 3307 番ポートで SSH トンネルを作成します。
sudo ssh -fNg -L 3307:127.0.0.1:3306 azurevmuser@servername
- Azure 管理ポータルで、VM のダッシュボードから 3307 番ポートにエンドポイントを作成します。詳細については「仮想マシンに対してエンドポイントを設定する方法」を参照してください。これで、データベースのホスト名は「linuxmysqlsrv.cloudapp.net:3307」に設定されました。
リモート システムから MySQL に直接アクセスできるようにすることもできますが、この方法は非推奨であるためここでは取り扱いません。非推奨なのは、MySQL Server への直接接続を許可すると、サーバーが攻撃を受ける可能性が高まるためです。MySQL は、既定ではセキュリティで保護された接続を使用しない設定になっています。詳細については「MySQL での SSL の使用 (英語)」を参照してください。
MySQL Server に接続可能な PHP Web サイトを作成する
Azure 管理ポータルで WebSites を作成する場合、[QUICK CREATE]、[CREATE WITH DATABASE]、[FROM GALLERY] の 3 つの方法があります。ここでは、[QUICK CREATE] で作成する方法を説明します。他の 2 つの方法の詳細については、「PHP-MySQL Azure WebSites を作成して Git で展開する」および「Azure でギャラリーから WordPress Web サイトを作成する」のページを参照してください。ここでは、簡単なサイトを作成し、データベースへの接続を確立するシンプルな PHP スクリプトを追加します。
「Azure WebSites で PHP Web サイトを作成する方法」の説明に従って、Azure WebSites で index.php という名前の簡単な PHP アプリケーションを作成します。このアプリケーションは MySQL Server を実行している Linux VM のデータベースに接続し、お客様の WebSites から新たに作成した MySQL Server に接続できるかどうかのテストを行います。
<?php
// 接続の作成: ホスト名、データベースのユーザー名、パスワード、
// データベース名を更新
//Linux VM の名前は linuxmysqlsrv.cloudapp.net:3307
$con=mysqli_connect("linuxmysqlsrv.cloudapp.net:3307","username","password",
"databasename");
// 接続を確認
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
else
{
echo "Connection with MySQL database was successful";
}
?>
まとめ
Clear DB サービスと Azure Virtual Machine のどちらを選択する場合でも、Azure WebSites で MySQL を使用することができます。データベースの要件を確認していただき、お客様のニーズに合ったソリューションをお選びください。