Azure AppServiceでFastAPIで作ったWebAPI、Webアプリをデプロイする➁
①ではuvicornでサーバーを起動させる方法を書きましたが、実はuvicornの公式ドキュメントにおいてはuvicornのワーカークラスでgunicornを動かす事が推奨されています。
という事で、今回はAzure AppService上でgunicornを使ってFastAPIで作った
WebAPIを起動する方法を解説していきます。
なお、この記事はこちらの記事
からgunicornを使って起動する箇所に絞って解説していきます。
サンプルアプリ
今回もサンプルWebAPIを用意していますので、
とりあえず試してみたい方はご利用下さい。
gunicornのインポート
gunicornを使って起動するため、requirements.txtにgunicornを含めます。
ローカル開発時に以下のコマンドでインストールしておけばOKです。
pip install gunicorn
スクリプトファイルの作成
前回と決定的に違うのがこの部分で、gunicornで起動するための
スクリプトファイルが必要となります。
以下のモジュール「gunicorn.py」をレポジトリに追加します。
import multiprocessing
import os
name = "Gunicorn config for FastAPI"
accesslog = "/home/user/fastapi/gunicorn-access.log"
errorlog = "/home/user/fastapi/gunicorn-error.log"
bind = "0.0.0.0:8000"
worker_class = "uvicorn.workers.UvicornWorker"
workers = multiprocessing.cpu_count () * 2 + 1
なお、このモジュールをインポートして他のコードを書き換える、
といった作業は特に必要ありません。
モジュールを作成してレポジトリに追加するだけで大丈夫です。
スタートアップファイルの作成
前回同様スタートアップファイルを作成します。
gunicornを使うため コマンドの内容が若干異なっています。
gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app
先ほど作成したスクリプトファイルを起動させる形の
コマンドを記述します。
前回同様、テキストファイル(.txt)での作成で大丈夫です。
デプロイ設定
Azure WebApp上で行う作業は前回の記事と変わらないため、前回の記事を
参照して下さい。なお、今回のサンプルはデータベースは使用しないため、
データベースのマイグレーション作業は不要です。
元の記事ではスタートアップコマンドに直接コマンドを記載していますが、
テキストファイルを指定する事でも問題なく起動できます。
無事にデプロイする事が出来ました!
ログストリームからgunicornで起動している事が確認出来ます。
サンプルWebAPIでの起動を確認する場合は/docsからSwaggerUIが使える事を試してみて下さい。
FastAPIを使うメリット
前回の記事と合わせてAzure WebAppにおけるFastAPIを使ったWebAPIの
デプロイを解説させて頂きましたが、FastAPIはFlaskと比較して
次のようなメリットがあります。
・非同期処理の実装が容易であり、処理が非常に速い。
・Pydanticを使ったデータバリデーションとシリアライゼーションにより、
エラーチェックやフロントエンドとの連携が容易である。
・自動的にSwaggerUIでのAPIドキュメンテーションが生成され、
APIの使用とテストが容易である。
・APIキーやJWT認証が実装しやすい。
このようなメリットにより、特にWebAPI開発に適しています。
WebAPIとして他の言語のコードに組み込むといった使い方も出来るので、
是非ともおススメ出来るPythonでのウェブフレームワークです。
以上、2回に渡る記事をご覧下さり誠にありがとうございました。