目次

前のトピックへ

1.9. 静的ファイルを供給する

次のトピックへ

1.11. Windows Server 2012インスタンスを使用する

このページ

1.10. 他のWebアプリケーションフレームワークを使用する

ここまではWindows AzureのPythonパッケージとして公式に提供されているDjangoを使用したアプリケーション開発について説明してきましたが、Djangoに限らず、WSGIに対応する他のWebアプリケーションフレームワークも使用することができます。以下ではFlaskPyramidを例に、その方法を説明します。

1.10.1. Flaskアプリケーションのデプロイ

まず始めに、Flaskアプリケーションのデプロイ方法について説明します。

1.10.1.1. クラウドサービスプロジェクトの作成

まずプロジェクトを作成すると同様の方法で、Windows Azure PowerShellからクラウドサービスプロジェクトとそれに含めるDjango Webロールを作成します。

コマンドの実行によりWebロールフォルダの中に出力されるDjangoプロジェクトは不要ですので削除のうえ、同じ名前で空のフォルダを作成してください。またPYTHONPATH上にDjangoが見つからない場合はAdd-AzureDjangoWebRoleコマンドがエラー終了しますが、この場合も、出力されたWebロールフォルダの中に同じ名前で空のフォルダを作成してください。

1.10.1.2. セットアップ設定ファイルの編集

デフォルトのデプロイ処理でDjangoのインストールが行われることを説明しましたが、他のWebアプリケーションフレームワークを使用する場合はDjangoは不要となりますので、インストールの対象からDjangoを除外します。Webロール/bin/AzureSetup.cfgを開き、webpi_installプロパティ値の中にある「Django」の部分を、以下のように「Python27,PyPI」に変更します。

webpi_install=https://www.microsoft.com/web/webpi/4.0/toolsproductlist.xml;Python27,PyPI

1.10.1.3. FastCGIモジュールの更新

PTVSのダウンロードページより、ダウンロードリストの中にあるファイルwfastcgi.pyをダウンロードし、Webロール/binに上書きコピーします。

1.10.1.4. アプリケーションの作成

前段の手順で作成したWebロールフォルダ内の空フォルダの中にアプリケーションを作成します。ここではFlaskのトップページにある単純なHello Worldアプリケーションを例として用います。新しいファイルhello.pyを以下の内容で作成して、Djangoプロジェクトのコンテンツが出力されていたフォルダの中に保存してください。

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
   app.run()

1.10.1.5. web.configファイルの編集

次に、Webロールフォルダ内にあるファイルweb.configを編集します。appSettings要素内に、key属性値「WSGI_HANDLER」、value属性値「hello.app」を持つadd要素を追加します。

<appSettings>
  <add key="EMULATED" value="true" />
  <add key="WSGI_HANDLER" value="hello.app" />
</appSettings>

同じフォルダ内にあるファイルweb.cloud.configについても編集します。configurationの子要素に当たるappSettings要素、および、key属性値「WSGI_HANDLER」、value属性値「hello.app」を持つadd子要素を追加します。

<appSettings>
  <add key="WSGI_HANDLER" value="hello.app" />
</appSettings>

1.10.1.6. デプロイ処理の追加

デプロイ処理を追加するの内容に従い、クラウドサービスのインスタンス上でFlaskをインストールするためのスタートアップタスクを追加します。追加するバッチファイルの処理内容は以下のようになります。

@echo off

if "%EMULATED%"=="true" goto :EOF

%SystemDrive%\Python27\Scripts\pip install flask

以上で必要な設定は完了ですので、Windows Azure PowerShellでパッケージを作成してデプロイを実行します。正しくデプロイされていれば以下のようにFlaskの動作を確認できるはずです。

../../_images/201.png

1.10.2. Pyramidアプリケーションのデプロイ

Pyramidについても基本的な手順はFlaskの場合と同様です。ローカルコンピュータのPython環境にPyramidをインストールし、Flaskの場合の手順と同様にクラウドサービスプロジェクトの作成、セットアップ設定ファイルの編集、FastCGIモジュールの更新を実施のうえ、以下の手順に進んでください。

1.10.2.1. アプリケーションの作成

コンテンツを削除したDjangoプロジェクトフォルダ内にアプリケーションを作成します。以下ではPyramidのstarterアプリケーションを例として用います。まずWebロールフォルダ内で以下のコマンドを入力してアプリケーションを作成します。ここでは作成するアプリケーションの名前をmyappとします。

> pcreate -s starter myapp

さらに、新しいファイルwsgi.pyを以下の内容でWebロールフォルダの下に作成します。

import os
from pyramid.paster import get_app

config = os.path.abspath(os.path.join(os.path.dirname(__file__),
                                      'production.ini'))

application = get_app(config, 'main')

1.10.2.2. web.configファイルの編集

次に、Webロールフォルダ内にあるファイルweb.configを編集します。appSettings要素内に、key属性値「WSGI_HANDLER」、value属性値「wsgi.application」を持つadd要素を追加します。

<appSettings>
  <add key="EMULATED" value="true" />
  <add key="WSGI_HANDLER" value="wsgi.application" />
</appSettings>

同じフォルダ内にあるファイルweb.cloud.configについても編集します。configurationの子要素に当たるappSettings要素、および、key属性値「WSGI_HANDLER」、value属性値「wsgi.application」を持つadd子要素を追加します。

<appSettings>
  <add key="WSGI_HANDLER" value="wsgi.application" />
</appSettings>

また静的ファイルを供給するで述べた通り、アプリケーションに含まれる静的ファイルをIISから供給するため、作成されたPyramidアプリケーションのstaticフォルダの中にも以下の内容でweb.configファイルを追加します。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <remove name="Python_via_FastCGI" />
      <remove name="Django FastCGI" />
    </handlers>
  </system.webServer>
</configuration>

1.10.2.3. デプロイ処理の追加

デプロイ処理を追加するの内容に従い、クラウドサービスのインスタンス上でFlaskをインストールするためのスタートアップタスクを追加します。追加するバッチファイルの処理内容は以下のようになります。

@echo off

if "%EMULATED%"=="true" goto :EOF

%SystemDrive%\Python27\Scripts\easy_install -Z pyramid

cd %~dp0..\myapp
%SystemDrive%\Python27\python setup.py install

以上で必要な設定は完了ですので、Windows Azure PowerShellでパッケージを作成してデプロイを実行します。正しくデプロイされていれば以下のようにPyramidの動作を確認できるはずです。

../../_images/202.png

1.10.3. Windows Azure SQL データベースの使用

Windows Azure SQL データベースを使用するではSQL Serverドライバとpyodbcを用いて、Djangoアプリケーションから Windows Azure SQL データベースを使用する方法について説明しましたが、上記のWebアプリケーションフレームワークからは、Pythonアプリケーションではお馴染みのO/RマッパーであるSQLAlchemyを利用できます。

この場合まずWebロール/bin/AzureSetup.cfgを開き、webpi_installプロパティ値に「,SQLNativeClient」の記述を追加します。

webpi_install=https://www.microsoft.com/web/webpi/4.0/toolsproductlist.xml;Python27,PyPI,SQLNativeClient

またスタートアップタスクに追加するバッチファイル内にも、pyodbcとSQLAlchemyのインストールコマンドを追記します。

%SystemDrive%\Python27\Scripts\easy_install -Z pyodbc
%SystemDrive%\Python27\Scripts\pip install sqlalchemy

ノート

このときSQLAlchemyのスピードアップ用C言語拡張はコンパイルされませんので、必要な場合は、インスタンス上でのダウンロードによるインストールではなく、VSを導入したローカルコンピュータ上で予めC言語拡張をコンパイルし、アプリケーションパッケージに含めたうえでデプロイしてください。

SQL Serverドライバ+pyodbc+SQLAlchemyを使用してアプリケーションからWindows Azure SQL データベースに接続する場合のデータベースURLは以下のようになります。

mssql+pyodbc://ログインID@サーバ名:パスワード@サーバ名.database.windows.net/データベース名?driver=SQL Server Native Client 11.0

以下は、Pyramidのalchemyアプリケーションをクラウドサービスにデプロイし、デバッグツールバーを有効化してWindows Azure SQL データベースに対するSQLAlchemyの実行ログを表示した様子です。

../../_images/205.png

ノート

alchemyアプリケーションのmodels.pyに記述されているMyModelクラスをSQL データベースで使用するためには、name属性の修正、具体的には初期状態でTextとなっているデータ型をString(n)などに変更する必要があります。