はじめに
APIを経由するだけのサーバープログラム的なやつが欲しいなーと思ってみたが、IaaSでWebサーバーのインフラ用意するのは面倒だし、PaaSで環境を用意してみようと思いました。
が、結局は普通のWebAppではうまくいかず、Docker使っちゃった的な失敗ネタです。
なんでAzure?
AmazonならElasticBeanstalk・・・・ちょっと見てみたら設定がややこしくEC2で環境作ったほうが簡単そうで本末転倒感もありやめました。
GoogleはAppEngineは色々苦い思い出がありプログラム的にPython3が使えないのがつらい
AzureのWebAppは5ステップくらいの操作でWebサーバー用意できるのがいいと思いました。
なんでPython?なんでFlask?
ちょっとした文字処理するプログラムなので、学習コストの低めなPythonにしました。
高機能なWebサーバーになるわけでもないのでDjangoは機能多すぎだし
Bottleと悩んだがFlaskのマイクロサービスの流行りに乗ってみたいシンプルにも作れるしライブラリとかで拡張できるのがいいと思いました。
環境
- Azure:Web App
- Python:3.7.0
ローカル環境の準備
仮想環境の作成
以下のコマンドを入力
python3 -m venv env
Flaskで使う専用環境ができました。
(参考)仮想環境で作業するためのコマンド
.\env\Scripts\activate
が、自分はVisualStudioCodeで開発していて、バージョン切り替え機能を使ったので上記はやってませーん
Flaskインストール
以下のコマンドを入力
pip install flask
ローカルで実行
Hello World的なものを書いてmain.pyで保存してみた。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
app.run()
想定通り
Azure環境の準備
WebAppの用意
なんとなく、Azure Cloud Shell使いました。
起動方法がこちら
WebApp作成までに実行したコマンドです
#デプロイユーザー名とパスワード
az webapp deployment user set --user-name <ユーザー名> -password <パスワード>
#リソースグループ
az group create --name <リソースグループ名> --location "<ロケーション>"
#プラン名作成
az appservice plan create --name <プラン名> --resource-group <リソースグループ名> --sku FREE
#Webアプリ作成
az webapp create --resource-group <リソースグループ名> --plan <プラン名> --name <Webアプリ名> --runtime "python|3.4" --deployment-local-git
順調順調♪
Azure Web Appへデプロイ
gitにて以下のコマンドを実施
git remote add azure https://<デプロイユーザー名>@<Webアプリ名>.scm.azurewebsites.net:443/<Webアプリ名>.git
あれ・・・・?動いてない?
なぜ動いてくれないか確認してみた
Azureで用意しているコンソールに接続してみたが、ローカルとWebAppのファイル構成がなんか違う。。。
自分の開発環境がMacでWebAppがWindows2012ベースだから?と思ってみたりもしたが、割と普通のWebAppではPythonのライブラリインストールできない問題もあったり、そもそも・・・・
Python3.6.4までしかサポートしてないやん
あ、、、、自分の環境は3.7.0
WebAppでPython使う場合、デフォのバージョンがPython3.4らしく、それ以外は色々カスタマイズが必要のようで、結局設定が面倒だなーと悶々としながらぐぐっていたら
Web App for Containers!?
Dockerを動かせるWeb Appらしいが、Dockerなのに仮想マシンいらないの?
だし、環境はコンテナ化されていて、なんかいいとこ取り感もあって、期待してみたが力尽きたので次回書きます。
参考文献
https://microsoftou.com/azure-flask/#toc6
https://qiita.com/ShikaTech/items/8217eded8bf757847b53