見出し画像

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」
コマンドで行います。

WebAppでLinuxを選択した場合はLinuxの仮想マシン上でアプリが動きます。

ここまで来ればFlaskは「既定のドメイン」からWebアプリに
アクセス出来ますが、FastAPIではもう一つ作業が必要になります。

スタートアップファイルをWebAppに反映させる

先ほどGitHubにコミットしたスタートアップファイルを
WebAppに反映させる作業を行っていきます。
管理画面から「構成」を選択し、「全般設定」をクリックします。

何故か英語になってしまったので、後日差し替えます。

スタートアップコマンドにスタートアップファイル名を記入し、
保存します。

上記の作業が済んだら、既定のドメインからアクセスしてみましょう!

無事にデプロイする事が出来ました!

WebAppの削除

作業は以上となりますが、WebAppの削除手順も書いていきます.
管理画面から削除をクリックします。

アプリ名を入力して削除をクリックします

また、リソースグループ「apptest」も削除します。

クリックして画面遷移した後、「リソースグループの削除」を
クリックします。

先ほどと同様にリソースグループ名を入力します。

これでWebAppの削除が完了しました。
以上で今回の記事は終わりとなりますが、実はFastAPIの起動は
gunicornを使う事が推奨されています。
次回はFastAPIをgunicornで動かす方法を書いていきたいと思います。

※サンプルWebAPIでの注意事項

この記事ではサンプルWebAPIでマイグレーションをしていますが、
これはSQLite3データベースを生成する形で行っています。
この方法はAzure WebAppでの正規のデータベース運用方法ではないため、
ブラウザ上でのJWT認証が正しく動作しないのでご注意下さい。

いいなと思ったら応援しよう!