Azure AppServiceでFastAPIで作ったWebAPI、Webアプリをデプロイする①
プログラミング学習の一環としてFastAPIでWebAPIを作成し、
Azure AppServiceでデプロイをしているのでそのデプロイ手順を
書いていきます。
DjangoやFlaskでは下記のように公式チュートリアルがありますが、
FastAPIをデプロイする際にはもうひと手間発生します。
FastAPIで開発する際に、サーバー起動方法としてuvicornを使いますが、
Azure AppServiceでも同じようにuvicornを使って起動する事が出来ます。
GitHubにローカルで開発したWebAPIをコミット
GitHub Actionsを使ったデプロイを行うため、
GitHubのリモートレポジトリにコミットします。
サンプルWebAPIを用意していますので、
とりあえず試してみたい方はご利用下さい。
スタートアップファイルの設定
レポジトリにAppServiceで起動させるためのスタートアップファイルを
追加コミットします。
スタートアップファイルで記述するコードは
python -m uvicorn main:app --host 0.0.0.0
のみで、テキストファイル(.txt)で大丈夫です。
サンプルアプリでは一番下に保管されています。
デプロイを行う
続いて、Azure Portalでデプロイを行っていきます。
まずは、PortalからWeb Appを選択。
App Serviceの画面に遷移した後、「Webアプリ」を選びます。
作成画面に遷移後、リソースとコストを管理するサブスクリプションを
選択します。
インスタンスの詳細を設定していきます。ポイントは、
・ランタイムスタックはローカル開発時のPythonと同じバージョンに
します。
・オペレーティングシステムはLinuxです。Windowsではありません。
・価格プランはBasic以上にします。
この価格プラン以上にしないと次に設定するGitHubActionsを
利用出来ません。
GitHubActionsの設定を行います
継続的デプロイを有効化した後、組織に自分のユーザーアカウント、
リポジトリにデプロイするWebAPIのレポジトリ、ブランチはmainを
指定します。
とりあえず必要な設定はここまでで、「確認および作成」をクリックすると
デプロイがスタートします。
リソースに移動すると、WebAppの管理画面に遷移します。
次に、サンプルではデータベースのマイグレーションを行います。
管理画面上の「SSH」からmigrate_db.pyを実行します。
SSHはLinuxのため、migrate_db.py実行時は
「python3 migrate_db.py」
コマンドで行います。
ここまで来ればFlaskは「既定のドメイン」からWebアプリに
アクセス出来ますが、FastAPIではもう一つ作業が必要になります。
スタートアップファイルをWebAppに反映させる
先ほどGitHubにコミットしたスタートアップファイルを
WebAppに反映させる作業を行っていきます。
管理画面から「構成」を選択し、「全般設定」をクリックします。
スタートアップコマンドにスタートアップファイル名を記入し、
保存します。
上記の作業が済んだら、既定のドメインからアクセスしてみましょう!
WebAppの削除
作業は以上となりますが、WebAppの削除手順も書いていきます.
管理画面から削除をクリックします。
また、リソースグループ「apptest」も削除します。
クリックして画面遷移した後、「リソースグループの削除」を
クリックします。
これでWebAppの削除が完了しました。
以上で今回の記事は終わりとなりますが、実はFastAPIの起動は
gunicornを使う事が推奨されています。
次回はFastAPIをgunicornで動かす方法を書いていきたいと思います。
※サンプルWebAPIでの注意事項
この記事ではサンプルWebAPIでマイグレーションをしていますが、
これはSQLite3データベースを生成する形で行っています。
この方法はAzure WebAppでの正規のデータベース運用方法ではないため、
ブラウザ上でのJWT認証が正しく動作しないのでご注意下さい。