PHP Web ロールと worker ロールの作成
概要
重要
2024 年 9 月 1 日に、すべてのお客様に対して Cloud Services (クラシック) は非推奨になりました。 既存の実行中のデプロイはすべて Microsoft によって停止およびシャットダウンされ、2024 年 10 月以降、データは永久的に失われます。 新しいデプロイでは、新しい Azure Resource Manager ベースのデプロイ モデル、 Azure Cloud Services (延長サポート) を使用してください。
このガイドでは、Windows 開発環境で PHP Web ロールまたは worker ロールを作成し、使用可能な "ビルトイン" バージョンから特定バージョンの PHP を選択し、PHP 構成を変更し、拡張機能を有効にし、最後に Azure にデプロイする方法を示します。 また、指定した PHP ランタイムを (カスタムの構成および拡張機能と共に) 使用できるように Web ロールまたは worker ロールを構成する方法についても説明します。
Azure にはアプリケーションを実行するためのコンピューティング モデルとして、Azure App Service、Azure Virtual Machines、および Azure Cloud Services の 3 種類があります。 これら 3 つのモデルはすべて、PHP をサポートしています。 Web ロールと worker ロールを含む Cloud Services は、 サービスとしてのプラットフォーム (PaaS)を提供します。 クラウド サービス内で、Web ロールはフロントエンド Web アプリケーションをホストする専用のインターネット インフォメーション サービス (IIS) Web サーバーを提供します。 worker ロールでは、非同期、長時間実行、または永続のタスクをユーザーの操作や入力からは独立して実行できます。
これらのオプションの詳細については、Azure が提供するコンピューティング ホスティング オプションに関するページを参照してください。
Azure SDK for PHP をダウンロードする
Azure SDK for PHP は、いくつかのコンポーネントで構成されています。 この記事では、そのうち Azure PowerShell と Azure エミュレーターの 2 つを使用します。 これら 2 つのコンポーネントは、Microsoft Web Platform Installer を使用してインストールできます。 詳細については、「 Azure PowerShell のインストールと構成の方法」を参照してください。
Cloud Services プロジェクトを作成する
PHP Web ロールまたは worker ロールを作成するための最初のステップは、Azure サービス プロジェクトを作成することです。 Azure Service プロジェクトには、Web ロールと worker ロールの論理コンテナーとしての役割があり、この中にプロジェクトのサービス定義 (.csdef) とサービス構成 (.cscfg) のファイルが格納されます。
新しい Azure サービス プロジェクトを作成するには、Azure PowerShell を管理者として実行し、次のコマンドを実行します。
PS C:\>New-AzureServiceProject myProject
このコマンドを実行すると新しいディレクトリ (myProject
) が作成され、ここに Web ロールと worker ロールを追加できるようになります。
PHP Web ロールまたは worker ロールを追加する
PHP Web ロールをプロジェクトに追加するには、プロジェクトのルート ディレクトリで次のコマンドを実行します。
PS C:\myProject> Add-AzurePHPWebRole roleName
worker ロールについては、次のコマンドを使用します。
PS C:\myProject> Add-AzurePHPWorkerRole roleName
Note
roleName
パラメーターは省略可能です。 省略した場合、ロール名は自動的に生成されます。 最初に作成された Web ロールは WebRole1
、2 番目は WebRole2
などとなります。 最初に作成された worker ロールは WorkerRole1
、2 番目は WorkerRole2
などとなります。
独自の PHP ランタイムを使用する
場合によっては、前述のようにビルトインの PHP ランタイムを選択して構成する代わりに、独自の PHP ランタイムを用意することが必要になります。 たとえば、開発環境で使用するものと同じ PHP ランタイムを Web ロールまたは worker ロールで使用することができます。 このプロセスを採用すると、アプリケーションの動作が運用環境でも変わらないことの保証が簡単になります。
独自の PHP ランタイムが使用されるように Web ロールを構成する
指定した PHP ランタイムが使用されるように Web ロールを構成するには、次の手順に従います。
この記事で既に説明したとおりに、Azure Service プロジェクトを追加して PHP Web ロールを追加します。
Web ロールのルート ディレクトリにある
bin
フォルダー内にphp
フォルダーを作成し、このphp
フォルダーに PHP ランタイム (すべてのバイナリ、構成ファイル、サブフォルダーなど) を追加します。(省略可能) PHP ランタイムで Microsoft Drivers for PHP for SQL Server が使用されている場合は、プロビジョニング時に SQL Server Native Client 2012 をインストールするように Web ロールを構成する必要があります。 これを行うには、Web ロールのルート ディレクトリにある
bin
フォルダーに sqlncli.msi x64 installer を追加します。 次のステップで説明するスタートアップ スクリプトでは、ロールのプロビジョニング時にインストーラーが自動的に実行されます。 PHP ランタイムで Microsoft Drivers for PHP for SQL Server が使用されていない場合は、下記の行を、次のステップで示すスクリプトから削除してもかまいません。msiexec /i sqlncli.msi /qn IACCEPTSQLNCLILICENSETERMS=YES
.php
ページに対する要求を処理する PHP ランタイムが使用されるようにインターネット インフォメーション サービス (IIS) を構成するスタートアップ タスクを定義します。 これを行うには、setup_web.cmd
ファイル (Web ロールのルート ディレクトリにあるbin
フォルダー内) をテキスト エディターで開いて、その内容を次に示すスクリプトに置き換えます。@ECHO ON cd "%~dp0" if "%EMULATED%"=="true" exit /b 0 msiexec /i sqlncli.msi /qn IACCEPTSQLNCLILICENSETERMS=YES SET PHP_FULL_PATH=%~dp0php\php-cgi.exe SET NEW_PATH=%PATH%;%RoleRoot%\base\x86 %WINDIR%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='%PHP_FULL_PATH%',maxInstances='12',idleTimeout='60000',activityTimeout='3600',requestTimeout='60000',instanceMaxRequests='10000',protocol='NamedPipe',flushNamedPipe='False']" /commit:apphost %WINDIR%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='%PHP_FULL_PATH%'].environmentVariables.[name='PATH',value='%NEW_PATH%']" /commit:apphost %WINDIR%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='%PHP_FULL_PATH%'].environmentVariables.[name='PHP_FCGI_MAX_REQUESTS',value='10000']" /commit:apphost %WINDIR%\system32\inetsrv\appcmd.exe set config -section:system.webServer/handlers /+"[name='PHP',path='*.php',verb='GET,HEAD,POST',modules='FastCgiModule',scriptProcessor='%PHP_FULL_PATH%',resourceType='Either',requireAccess='Script']" /commit:apphost %WINDIR%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi /"[fullPath='%PHP_FULL_PATH%'].queueLength:50000"
アプリケーション ファイルを Web ロールのルート ディレクトリに追加します。これが Web サーバーのルート ディレクトリになります。
「アプリケーションの発行」セクションの説明に従って、アプリケーションを発行します。
Note
download.ps1
スクリプト (Web ロールのルート ディレクトリの bin
フォルダー内) は、独自の PHP ランタイムを使用するための前述の手順を実行した後は削除してもかまいません。
独自の PHP ランタイムが使用されるように worker ロールを構成する
指定した PHP ランタイムが使用されるように worker ロールを構成するには、次の手順に従います。
この記事で既に説明したとおりに、Azure Service プロジェクトを追加して PHP worker ロールを追加します。
worker ロールのルート ディレクトリに
php
フォルダーを作成し、このphp
フォルダーに PHP ランタイム (すべてのバイナリ、構成ファイル、サブフォルダーなど) を追加します。(省略可能) PHP ランタイムで Microsoft Drivers for PHP for SQL Server が使用されている場合は、プロビジョニング時に SQL Server Native Client 2012 をインストールするように worker ロールを構成する必要があります。 これを行うには、sqlncli.msi x64 インストーラー を worker ロールのルート ディレクトリに追加します。 次のステップで説明するスタートアップ スクリプトでは、ロールのプロビジョニング時にインストーラーが自動的に実行されます。 PHP ランタイムで Microsoft Drivers for PHP for SQL Server が使用されていない場合は、下記の行を、次のステップで示すスクリプトから削除してもかまいません。
msiexec /i sqlncli.msi /qn IACCEPTSQLNCLILICENSETERMS=YES
ロールのプロビジョニング時に worker ロールの PATH 環境変数に
php.exe
実行可能ファイルを追加するスタートアップ タスクを定義します。 これを行うには、setup_worker.cmd
ファイル (worker ロールのルート ディレクトリ内) をテキスト エディターで開いて、その内容を次に示すスクリプトに置き換えます。@echo on cd "%~dp0" echo Granting permissions for Network Service to the web root directory... icacls ..\ /grant "Network Service":(OI)(CI)W if %ERRORLEVEL% neq 0 goto error echo OK if "%EMULATED%"=="true" exit /b 0 msiexec /i sqlncli.msi /qn IACCEPTSQLNCLILICENSETERMS=YES setx Path "%PATH%;%~dp0php" /M if %ERRORLEVEL% neq 0 goto error echo SUCCESS exit /b 0 :error echo FAILED exit /b -1
アプリケーション ファイルを worker ロールのルート ディレクトリに追加します。
「アプリケーションの発行」セクションの説明に従って、アプリケーションを発行します。
コンピューティング エミュレーターとストレージ エミュレーターでアプリケーションを実行する
Azure エミュレーターは、Azure アプリケーションをクラウドにデプロイする前にテストできるローカル環境を提供します。 ただし、エミュレーターと Azure 環境では、いくつか相違点があります。 これらの違いの詳細については、「開発とテストに Azure Storage Emulator を使用する」を参照してください。
コンピューティング エミュレーターを使用するには、PHP がローカルでインストール済みであることが必要です。 コンピューティング エミュレーターでは、ローカルにインストールされた PHP を使用してアプリケーションが実行されます。
エミュレーターでプロジェクトを実行するには、プロジェクトのルート ディレクトリで次のコマンドを実行します。
PS C:\MyProject> Start-AzureEmulator
出力は、次のサンプルのようになります。
Creating local package...
Starting Emulator...
Role is running at http://127.0.0.1:81
Started
アプリケーションがエミュレーターで実行されていることを確認するには、Web ブラウザーを開いて、出力の中に表示されているローカル アドレス (前述の出力例では http://127.0.0.1:81
) に移動してください。
エミュレーターを停止するには、次のコマンドを実行します。
PS C:\MyProject> Stop-AzureEmulator
アプリケーションの発行
アプリケーションを発行するには、まず、 Import-AzurePublishSettingsFile コマンドレットを使用して発行設定をインポートする必要があります。 次に Publish-AzureServiceProject コマンドレットを使用して、アプリケーションを発行できます。 サインインの詳細については、「 Azure PowerShell のインストールおよび構成方法」を参照してください。
次のステップ
詳細については、 PHP デベロッパー センターを参照してください。