見出し画像

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上で行う作業は前回の記事と変わらないため、前回の記事を
参照して下さい。なお、今回のサンプルはデータベースは使用しないため、
データベースのマイグレーション作業は不要です。

元の記事ではスタートアップコマンドに直接コマンドを記載していますが、
テキストファイルを指定する事でも問題なく起動できます。

テキストファイルでもOK

無事にデプロイする事が出来ました!
ログストリームからgunicornで起動している事が確認出来ます。

サンプルWebAPIでの起動を確認する場合は/docsからSwaggerUIが使える事を試してみて下さい。

FastAPIを使うメリット

前回の記事と合わせてAzure WebAppにおけるFastAPIを使ったWebAPIの
デプロイを解説させて頂きましたが、FastAPIはFlaskと比較して
次のようなメリットがあります。
・非同期処理の実装が容易であり、処理が非常に速い。
・Pydanticを使ったデータバリデーションとシリアライゼーションにより、
エラーチェックやフロントエンドとの連携が容易である。
・自動的にSwaggerUIでのAPIドキュメンテーションが生成され、
APIの使用とテストが容易である。
・APIキーやJWT認証が実装しやすい。
このようなメリットにより、特にWebAPI開発に適しています。
WebAPIとして他の言語のコードに組み込むといった使い方も出来るので、
是非ともおススメ出来るPythonでのウェブフレームワークです。

以上、2回に渡る記事をご覧下さり誠にありがとうございました。

この記事が気に入ったらサポートをしてみませんか?