Azure Web App + Python
Azure Web Appはお手軽にアプリケーションをデプロイできるサービスです。
ここではPythonプロジェクトのAzure Web Appへのデプロイをまとめます。
基本的にはお手軽なのですが、Pythonのバージョンを変えたりするとなるとつまりポイントがあります。
*以下ではローカルにgit、pythonがインストールされていることが前提です。
目次
flask (Python 2.7 or 3.4)
まずはWeb Appの機能を確認するために簡単なflaskプロジェクトをデプロイしてみます。
flaskプロジェクトをクローン
サンプルプロジェクトをローカルに持ってきます。
git clone https://github.com/Azure-Samples/python-docs-hello-world.git
requirementsを使ってインストール、早速開発サーバで動かしてみます。
cd Python-docs-hello-world pip install -r requirements.txt python main.py
ブラウザでlocalhost:5000にアクセスしましょう。
動作することが確認できました。
Cloud ShellでWeb Appを作成
Azure Cloud Shellを使えばCUIで操作ができます。
右上のコンソールから赤枠で囲ったアイコンを選択してシェルを起動します。
必要なものを作成します。
デプロイユーザ、リソースグループ、サービスプラン、Web Appを作成します。
最後にPython 3.4を使うよう指示します。
az webapp deployment user set --user-name <user_name> --password <password> az group create --name <resource_name> --location "Japan East" az appservice plan create --name <plan_name> --resource-group <resource_name> --sku FREE az webapp create --name <app_name> --resource-group <resource_name> --plan <plan_name> az webapp config set --python-version 3.4 --name <app_name> --resource-group <resource_name>
全てのリソースから今しがた作ったWeb Appの名前で検索して確認します。
赤枠のURLにアクセスすれば、ウェルカムページが閲覧できます。
デプロイ
「デプロイメント -> クイック スタート」をクリックして言語を選択します。
すると以下の選択肢が出るので好きなように選びましょう。
クラウドベースのソース管理
ローカルからいちいちpushするのが面倒であれば、Github経由でソース管理することができます。
この場合、Githubにpushしたら自動でAzure Web Appにも最新のコードが反映されます。
下の画像の2の「ここ」をクリックします。
デプロイ画面が開かれるので、「セットアップ -> ソースの選択」と進み、自分が使うソースを選択します。
その後リポジトリ名などを選べば、あとは勝手に同期してくれます。楽チン。
local-gitからデプロイ
ACSに戻り、gitでデプロイするようのアドレスを取得します。
URLが返ってきます。
az webapp deployment source config-local-git --name <app_name> --resource-group myResourceGroup --query url --output tsv https://<user_name>@<app_name>.scm.azurewebsites.net:443/<app_name>.git
ローカルに戻って、先ほど作成したflaskプロジェクトのディレクトリまで移動します。
先ほどのURLをリモートに登録して、pushします。
パスワードを聞かれるのでaz webapp deployment user setで設定したパスワードを使用します。
git remote add azure https://<user_name>@<app_name>.scm.azurewebsites.net:443/<app_name>.git git push azure master
Web AppのURLにアクセスすると「Hello, World!」と表示されました。
以降、ローカルの変更をプッシュしてあげれば良いです。
IIS設定
ひとまず、これまでの流れでHello, World!は表示できます。
しかしルーティングを実行すると、
「The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.」というエラーが出てしまいます。
これはIIS(Windowsサーバで使われるWebサーバ)の設定を修正することで回避できます。
Python 3.4を使っているならweb.3.4.config、2.7を使っているのならweb.2.7.configを修正します。
いずれも</appSettings>と</configuration>の間(最後から2行目)に以下のコードを挿入してください(タブがうまく表示されませんが動きます、気になる方はエディタ側で綺麗に揃えてあげてください)。
<system.web> <compilation debug="true" targetFramework="4.0" /> </system.web> <system.webServer> <modules runAllManagedModulesForAllRequests="true" /> <handlers> <remove name="Python27_via_FastCGI" /> <remove name="Python34_via_FastCGI" /> <add name="Python FastCGI" path="handler.fcgi" verb="*" modules="FastCgiModule" scriptProcessor="D:\Python34\python.exe|D:\Python34\Scripts\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" /> </handlers> <rewrite> <rules> <rule name="Static Files" stopProcessing="true"> <conditions> <add input="true" pattern="false" /> </conditions> </rule> <rule name="Configure Python" stopProcessing="true"> <match url="(.*)" ignoreCase="false" /> <conditions> <add input="{REQUEST_URI}" pattern="^/static/.*" ignoreCase="true" negate="true" /> </conditions> <action type="Rewrite" url="handler.fcgi/{R:1}" appendQueryString="true" /> </rule> </rules> </rewrite> </system.webServer>
ここから次のページへ、
飛べました。
django (Python 2.7)
細かいことを考えなくていいならこちらのリンクをクリックすれば、Azure Portalに飛んでdjangoプロジェクトをデプロイしたWeb Appを作成してくれます。
Web AppのURLにアクセスするとこれだけでdjangoが動いています!
この場合、Pythonは2.7が使用されます。
django (Python 2.7 or 3.4以外)
こちらの記事で色々試しましたが、うまくいきませんでした。
調べてうまく行く方法を見つけたらアップデートします。