Azure Web AppsでFlaskデプロイしたのですが、その仕組みやらなんやらがわからず混乱しているという記事というかメモです。
1なぜコマンドプロンプトやPowerShellでコマンド入力せずに動くのか。
私はVScodeを使ってPythonやらFlaskやらのフレームワークを使ってコードを書いています。そのときに、コマンド入力したり、Pathを入力することで、実行しています。
しかし、AzureWebAppsでは主に
・Azure Portalで設定し、
・Githubと連携し、
・Github Actionsのワークフローが自動設定され、
・デバッグすることで、
なぜか動いているんです。
コマンド入力することでファイルが動くことを当然視していた私にとって、これは非常に奇妙に映るわけです。
設定することで動くPaaSやホスティングサービスの例はあります。
例えば、Heroku。HerokuにはProcfileという「最初にこれを設定して、あれを動かして」といった具合に手続きをHerokuに伝えるファイルがあるようです。
調べてみるとAzureWebAppsにもありました。
https://learn.microsoft.com/ja-jp/azure/app-service/configure-language-python#container-startup-process?appservice=startup
では設定しない私のファイルやコードはなぜ動いているんでしょうか。
from flask_app import app
if __name__ == __main__
app.run()
まさにこのファイルが認識されて動いてました。なぜ???よくわかりません。
2 Tips Flaskでキー取得にapp.configではos.environ.get使った方がいいかも
私はapp.configではos.environ.getでファイルではなく、変数として読み込むことで動きました。
使う場面ですが、Flaskではセッションを使うにあたって、SECRET_KEYが必要になります。これは人にたやすく見せてはいけないものであり、隠す必要があります。
Flask公式ドキュメントではベストな構成としてOSの環境変数からファイルを探すapp.config.from_envvar ('config.cfg')
などを使えと書いてあります。ただ、PaaSではOSが変わるため、そのままでは動きません。
なので、AzureWebAppsでconfiguration / 構成というメニューがあるため、そこにいき、SECRET_KEYを書きます。
そこで、ファイルから読み込むのではなく、変数を取得する方法を用い、
app.config[SECRET_KEY] = os.environ.get('SECRET_KEY')
とするとうまくいきました。
これによってGitのファイル、gitignoreで隠してしまうとファイルがそもそも参照できないという矛盾を克服できるのです。
おそらく初心者ではない人はこんなことせずに解決する方法があると思うので、調べてみてください。私にはわかりません。