Windows AzureでPerlやPython、Ruby、Git、SSH、MySQLを利用しよう
Windows AzureではPerlやPython、PHP、RubyなどによるWebアプリケーションの実行や、SSHによるアクセス、GitやMySQLの利用も可能だ。今回は前回作成した「FTPでアクセスできるWebサイト」をベースに、Windows Azure環境におけるPerlなどの言語環境構築や、SSH、MySQL、Gitなどのインストールについて解説する。
前回記事「UNIX/Linux目線のWindows Azure入門ガイド」では、Windows Azureを使って「FTPでコンテンツをアップロードできるWebサイト」を作成した。しかし、この状態では静的なHTMLこそ表示できるものの、動的なコンテンツは表示できない。そこで今回はPHPやPerl、Ruby、Pythonといった言語環境やMySQLをインストールし、これらを使ったWebアプリケーションを実行できる環境を整えてみよう。
また、UNIX/LinuxベースのWebサーバーでWebアプリケーションを運用する場合、GitやSubversionといったバージョン管理ツールやSSHによるリモートログインが多く使われる。これらのツールをWindows Azureで利用する方法も解説する。
前回の復習と作成する環境の概要
Windows AzureはWindows Serverベースの仮想環境を提供しており、WebサーバーとしてはIISを利用する形になっている。デフォルトではASP.NETアプリケーションの利用に適した設定となっているが、設定ファイルを修正したりスクリプトを用意することで任意ポートの開放やIISの設定変更が行える、ということを前回記事で紹介した。前回はスタートアップタスクやWebRole.cs内でIISの設定変更を行ったが、今回はそれに加えてアプリケーションのインストールやその設定変更などを行っていく。
今回Windows Azure環境にインストール/設定するプログラムは次のとおりだ。
- PHP
- Perl
- Python
- Ruby
- MySQL
- WordPress
- OpenSSH(Cygwin)
- Git(Cygwin)
PHPやPerl、Python、MySQLといったパッケージのダウンロードやインストールにはバッチファイルを利用する。これらの処理をバッチファイルに記述しておき、スタートアップ処理およびWebRole.cs内のOnStart関数で実行するというものだ。
また、OpenSSHやGitについては、UNIX/Linux向けソフトウェアをWindows向けにポーティングしたパッケージ集であるCygwinのものを使用する。Cygwinではこれら以外にも多数のソフトウェアが提供されているので、必要に応じてほかのソフトウェアをインストールすることも容易だ。
ベースとなる環境の準備
今回は前回作成した「永続的ストレージを持ちFTPでファイルにアクセスできる」環境をベースに作業を行う。スタートアップタスクとしてバッチファイル「startup.cmd」を実行する点や、OnStart関数内で永続的ストレージのマウントを行ったり、「onstart.cmd」バッチファイルを呼び出す、といった点については前回と同様である。ただし、今回はスタートアップタスクやOnStart()内で実行するバッチファイルの数が多くなる。そこでstartup.cmdはリスト1のように変更し、「StartupTask\enabled」内に保存したバッチファイルを順に実行する形にする。また、コマンドの実行結果はファイルにリダイレクトしてあとから参照できるようにしておく。
リスト1 今回のstartup.cmd
REM スタートアップタスクとして実行するスクリプト set logfile=startup.log REM StartupTask\enabled\内の*.cmdを順に実行 cd /d "%ROLEROOT%\approot\bin\StartupTask\enabled" echo Starting onstart.cmd > %logfile% for %%i in (*.cmd) do ( cd /d "%ROLEROOT%\approot\bin\StartupTask\enabled" echo run %%i >> %logfile% 2>&1 call %%i >> %logfile% 2>&1 ) exit /b 0
スタートアップタスクで実行するバッチファイルは、Webロールに追加した「StartupTask」というフォルダ内に格納する。StartupTaskフォルダ内には「enabled」と「disabled」というフォルダを作成しておき、実行するバッチファイルのみをenabledフォルダに格納しておく(図1)。不要なバッチファイルはdisabledフォルダに移動しておけば実行されない。
Webロール内にディレクトリを追加するにはクリックしたいディレクトリ(もしくはWebロールのルート)を右クリックして「追加」-「新しいフォルダー」をクリックすれば良い。
また、OnStart関数内で実行するonstart.cmdについても同様に「OnStart\enabled」内のバッチファイルを実行するように変更している(リスト2)。こちらについてもStartupTaskフォルダと同様にOnStartフォルダと、その中の「enabled」および「disabled」フォルダを作成しておく。
リスト2 今回のonstart.cmd
REM WebRoleの開始時に実行するスクリプト REM ログを出力 set logfile=onstart.log REM OnStart\enabled\内の*.cmdを順に実行 cd /d "%ROLEROOT%\approot\bin\OnStart\enabled" echo Starting onstart.cmd > %logfile% for %%i in (*.cmd) do ( cd /d "%ROLEROOT%\approot\bin\OnStart\enabled" echo run %%i >> %logfile% 2>&1 call %%i >> %logfile% 2>&1 ) exit /b 0
これらの変更に伴い、前回startup.cmd内に記述してあった内容はStartupTask\enabled内の「010ftp.cmd」というファイルに、onstart.cmdの内容はOnStart\enabled内の「010ftp.cmd」および「020http.cmd」というファイルに分割してそれぞれ記述している(リスト3~5)。
リスト3 「StartupTask\enabled\010ftp.cmd」の内容
REM FTPサーバーの設定 setlocal REM FTPサービスのインストール start /w pkgmgr /iu:IIS-FTPServer;IIS-FTPSvc;IIS-FTPExtensibility endlocal exit /b 0
リスト4 「OnStart\enabled\010ftp.cmd」の内容
REM FTPサーバーの設定 setlocal set ftp_path=%AZUREDRIVE_ROOT% set ftp_cert=%SSLCERT% REM IISの設定変更 cd /d %windir%\system32\inetsrv REM すでにFTPサイト設定が作成されている場合はいったん削除 appcmd delete site "%FTP_SITENAME%" REM FTPサイト設定の作成 appcmd add site /name:"%FTP_SITENAME%" /bindings:ftp/*:21: /physicalPath:"%ftp_path%\\" REM SSL証明書の追加 appcmd set site "%FTP_SITENAME%" /ftpServer.security.ssl.serverCertHash:%ftp_cert% REM 基本認証の有効化 appcmd set site "%FTP_SITENAME%" /ftpServer.security.authentication.basicAuthentication.enabled:true REM 承認規則の追加 appcmd set config "%FTP_SITENAME%" /section:system.ftpServer/security/authorization /+"[accessType='Allow',users='*',permissions='Read, Write']" /commit:apphost REM FTPでPASV向けに使用するポートを指定する appcmd set config /section:system.ftpServer/firewallSupport /lowDataChannelPort:"5000" /commit:apphost appcmd set config /section:system.ftpServer/firewallSupport /highDataChannelPort:"5000" /commit:apphost REM ロードバランサのインターネット側IPアドレスを指定 appcmd set config /section:system.applicationHost/sites /siteDefaults.ftpServer.firewallSupport.externalIp4Address:%INET_IP_ADDR% /commit:apphost REM ファイアウォールの設定 netsh advfirewall firewall add rule name="FTP" action=allow protocol=TCP dir=in localport=21 netsh advfirewall firewall add rule name="FTP-Data" action=allow protocol=TCP dir=in localport=5000 REM FTPサーバーを再起動する net stop ftpsvc net start ftpsvc endlocal exit /b 0
リスト5 「OnStart\enabled\020http.cmd」の内容
REM Webサーバーの設定 setlocal set web_site=%ROLEINSTANCEID%_Web set web_root=%AZUREDRIVE_ROOT%\WWWRoot REM IISの設定変更 cd /d %windir%\system32\inetsrv REM Webサーバーの設定 REM ルートディレクトリを作成する mkdir %web_root% REM 公開するルートディレクトリを変更する appcmd set vdir "%web_site%/" /physicalPath:"%web_root%" endlocal exit /b 0
これらのバッチファイルについてもonstart.cmdやstartup.cmdと同様、プロパティの「出力ディレクトリにコピー」を「新しい場合はコピーする」に変更しておく。