次の方法で共有


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 ロールを構成するには、次の手順に従います。

  1. この記事で既に説明したとおりに、Azure Service プロジェクトを追加して PHP Web ロールを追加します。

  2. Web ロールのルート ディレクトリにある bin フォルダー内に php フォルダーを作成し、この php フォルダーに PHP ランタイム (すべてのバイナリ、構成ファイル、サブフォルダーなど) を追加します。

  3. (省略可能) 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
    
  4. .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"
    
  5. アプリケーション ファイルを Web ロールのルート ディレクトリに追加します。これが Web サーバーのルート ディレクトリになります。

  6. アプリケーションの発行」セクションの説明に従って、アプリケーションを発行します。

Note

download.ps1 スクリプト (Web ロールのルート ディレクトリの bin フォルダー内) は、独自の PHP ランタイムを使用するための前述の手順を実行した後は削除してもかまいません。

独自の PHP ランタイムが使用されるように worker ロールを構成する

指定した PHP ランタイムが使用されるように worker ロールを構成するには、次の手順に従います。

  1. この記事で既に説明したとおりに、Azure Service プロジェクトを追加して PHP worker ロールを追加します。

  2. worker ロールのルート ディレクトリに php フォルダーを作成し、この php フォルダーに PHP ランタイム (すべてのバイナリ、構成ファイル、サブフォルダーなど) を追加します。

  3. (省略可能) 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
    
  4. ロールのプロビジョニング時に 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
    
  5. アプリケーション ファイルを worker ロールのルート ディレクトリに追加します。

  6. アプリケーションの発行」セクションの説明に従って、アプリケーションを発行します。

コンピューティング エミュレーターとストレージ エミュレーターでアプリケーションを実行する

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 デベロッパー センターを参照してください。