Windows Azure PowerShell、または商用版VS+PTVSから作成するクラウドサービス用のパッケージは通常、Windows Server 2008 R2インスタンスにデプロイされますが、Windows Azureクラウドサービスでは現在、Windows Server 2012インスタンスも利用可能です。
商用版VS+PTVSでクラウドサービス用のパッケージを作成した場合は、Windows Server 2012インスタンスへのデプロイも少しの変更で簡単に行うことができますが、Windows Azure PowerShellで作成したクラウドサービス用のDjango Webロールはデプロイ用のモジュールが古いため、そのままではWindows Server 2012インスタンスにデプロイすることができません(2012年11月時点)。以下ではDjangoを例に、商用版VSを使用せずにWindows Server 2012インスタンスにPythonアプリケーションをデプロイする方法について説明します。
警告
以下に説明する方法は公式にサポートされているものではありませんので、実際に運用するアプリケーションでの利用は自己責任で行ってください。
PTVSに含まれるデプロイモジュールで、Windows Azure PowerShellで作成されたクラウドサービスに含まれているデプロイモジュールを上書き更新します。
PTVS+VS Shellをローカルコンピュータに導入している場合は以下の場所(32bit版Windowsの場合は%ProgramFiles%以下)にデプロイモジュールがありますので、それらをクラウドサービスプロジェクトのWebロール/binに上書きコピーします。
> copy /y "%ProgramFiles(x86)%\MSBuild\Microsoft\VisualStudio\v11.0\Python Tools"\* [Webロール]\bin
PTVS+VS Shellを導入していない場合はまずPTVSのインストーラをダウンロードし、その中に含まれるデプロイモジュールを取り出してコピーします。
> msiexec /a "PTVS 1.5 VS 2012.msi" targetdir="%TEMP%ptvs" /qn
> copy /y "%TEMP%\ptvs\PFILES\MSBuild\Microsoft\VisualStudio\v11.0\Python Tools"\* [Webロール]\bin
Webロールフォルダ内にあるサービス定義ファイルServiceDefinition.csdefを以下の通り編集します。
<ServiceDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="azure-python" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2012-10.1.8">
<Sites>
<Site name="Web" physicalDirectory="mysite">
<Bindings>
<Binding name="Endpoint1" endpointName="Endpoint1" />
</Bindings>
</Site>
</Sites>
Webロールフォルダ内にあるサービス設定ファイルServiceConfiguration.Local.cscfgおよびServiceConfiguration.Cloud.cscfgを編集します。ServiceConfiguration要素について、osFamily属性値を「3」に変更、schemaVersion属性値「2012-10.1.8」を追加します。
<ServiceConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" serviceName="azure-python" osFamily="3" osVersion="*" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" schemaVersion="2012-10.1.8">
次に、Webロールフォルダ内にあるファイルweb.configを編集します。appSettings要素内に、key属性値「WSGI_HANDLER」、value属性値「Djangoプロジェクト名.wsgi.application」を持つadd要素を追加します。
<appSettings>
<add key="EMULATED" value="true" />
<add key="WSGI_HANDLER" value="mysite.wsgi.application" />
</appSettings>
同じフォルダ内にあるファイルweb.cloud.configについても編集します。configurationの子要素に当たるappSettings要素、および、key属性値「WSGI_HANDLER」、value属性値「Djangoプロジェクト名.wsgi.application」を持つadd子要素を追加します。
<appSettings>
<add key="WSGI_HANDLER" value="mysite.wsgi.application" />
</appSettings>
Windows Azure PowerShellではなく、Windows Azure Command Promptを起動し、クラウドサービスプロジェクトのフォルダに移動して以下のコマンドを実行します。[Webロール]には、作成したDjango Webロールの名前を指定してください。
> echo TargetFrameworkVersion=v4.0 > [Webロール].ini
> cspack ServiceDefinition.csdef /out:cloud_package.cspkg /rolePropertiesFile:[Webロール];[Webロール].ini
コマンドの実行完了後、出力されたパッケージファイルcloud_package.cspkgを管理ポータルよりデプロイします。デプロイの完了後にリモートデスクトップでログインすると、インスタンスのOSがWindows Server 2012であることが確認できます。
またWebブラウザでアプリケーションにアクセスすると、応答するWebサーバがWindows Server 2012で導入されているIISv8であることを確認できます。