Python（FastAPI）Webアプリを Azure App Service にデプロイするクイックスタート

::: note
こちらの記事は投稿時点の情報です。
最新情報は公式ドキュメントMicrosoft Learnでご確認お願いいたします。
:::

Microsoft Japan - Azure Developer Platform Team の D̷ELL と申します。
本日は Azure App Service で FastAPI をホスティングする手順の紹介です。

https://learn.microsoft.com/ja-jp/azure/app-service/overview

Azure App Service は、Web アプリケーション、REST API、およびモバイル バックエンドをホストするための HTTP ベースのサービスです。様々なプログラムを、Azure の恩恵を受けつつ、手軽にホスティングすることができます。

生成AI関係のアプリを開発していると、Python でアプリを構築することが多いと思います。
今回は、FastAPI で構築したアプリを Azure 上で安定稼働させるためのクイックスタートを試してみます。

## 0. リファレンス

公式ドキュメント

https://learn.microsoft.com/ja-jp/azure/app-service/quickstart-python?tabs=flask%2Cwindows%2Cazure-cli%2Cazure-cli-deploy%2Cdeploy-instructions-azportal%2Cterminal-bash%2Cdeploy-instructions-zip-azcli

リポジトリ

https://github.com/Azure-Samples/msdocs-python-fastapi-webapp-quickstart

## 1. リポジトリの準備

CI/CDを行うためのリポジトリを作成します。
先ほどの GitHub リポジトリ「msdocs-python-fastapi-webapp-quickstart」を、ご自身の GitHub アカウントにForkしてください。

## 2. App Serviceの作成

Azure Portal に移動し、App Service のページに遷移します。
Azure Portal の画面上部の検索窓に「App Service」と入力し、App Service を選択してください。
https://portal.azure.com/#home

![FireShot Capture 012 - ホーム - Microsoft Azure - portal.azure.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419037/d182abed-1576-13e4-8e6f-c7857399fe75.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419037/cb9482ec-2c61-c345-998d-2b246e4007e7.png)

---
Webアプリを作成していきましょう。
左上の[作成] -> [Web アプリ] を選択し、各種パラメータを設定していきます。

- ランタイムスタック：[Python 3.10]
- 地域：[Japan East]
- Linuxプラン：（新規）
- 価格プラン： [Free F1]

他の項目はデフォルトの値で構いません。この設定で、アプリを作成していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419037/e44ba1cb-893c-e491-2134-368dfd823cba.png)

![FireShot Capture 003 - Web アプリの作成 - Microsoft Azure - portal.azure.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419037/46af0819-ee9f-21ce-8b24-baa90ff11087.png)

![FireShot Capture 004 - Microsoft.Web-WebApp-Portal-95bea4bb-871a - Microsoft Azure_ - portal.azure.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419037/c679a67b-a42b-90a7-9ce5-5ed85c09c0b3.png)

:::note warn
現在、Windows 上の Python はサポートされていません。Linux プランを選択してください。
:::

言語ラインタイムのサポートポリシー

https://learn.microsoft.com/ja-jp/azure/app-service/language-support-policy?tabs=windows


App Service プラン

https://learn.microsoft.com/ja-jp/azure/app-service/overview-hosting-plans

---

App Service の作成が完了しました。この状態で [既定のドメイン]にアクセスすると、サンプルページが表示されていると思います。

![FireShot Capture 005 - fastapi-quickstart - Microsoft Azure - portal.azure.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419037/96940b8a-17dd-c9b3-761f-e2a4bdfaaa5b.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419037/dd8a571d-5a9d-32f9-856f-4edcc9b78c83.png)

## 3. CI/CD の設定

次に、CI/CDの設定を行います。[デプロイメント] ブレードから、[デプロイセンター]を選択します。
以下の通り設定を行い、GitHubリポジトリと連携します。

- ソース：[GitHub]
- 組織：[任意の組織]
- リポジトリ：[msdocs-python-fastapi-webapp-quickstart] ※forkしている場合
- ブランチ：[main]

その他の項目はデフォルトで構いません。設定が終わったら [保存] してください。

![FireShot Capture 008 - fastapi-quickstart - Microsoft Azure - portal.azure.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419037/fd182463-cf49-5b49-896f-6cffd4fa7e08.png)

なお、ページ下部の [ワークフローの作成] - [ファイルのプレビュー] から、自動生成されたワークフローファイルを閲覧することも可能です。

![FireShot Capture 009 - fastapi-quickstart - Microsoft Azure - portal.azure.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419037/7c2d7502-345f-82ba-0fde-76a68206e8af.png)

---

保存後、[デプロイセンター] を確認すると、デプロイが進捗していることがわかります。
[概要] で、[前回のデプロイ] に ✅ が表示されるまで待ちましょう。これで、CI/CDの設定は完了です。

![FireShot Capture 010 - fastapi-quickstart - Microsoft Azure - portal.azure.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419037/7056b0a4-6968-419d-b395-cdb087537ad0.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419037/9ba129e6-6fab-d58c-0ac9-55e993158d1f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419037/74176880-ba7d-4f2c-6949-0ce45e20ed7d.png)


## 4. アプリの設定

CI/CDの設定は完了しましたが、この状態で[既定のドメイン]にアクセスしても、まだサンプルページが表示されていると思います。これは、デプロイした FastAPI アプリを起動するように設定がされていないためです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419037/dd8a571d-5a9d-32f9-856f-4edcc9b78c83.png)

---

デフォルトの待ち受けポートを、FastAPIに合わせて変更します。
[設定] ブレードから [環境変数] にアクセスします。

以下の環境変数を [追加] します。
- [WEBSITES_PORT]：[8000]

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419037/ed55d3d2-cb1d-5840-cc58-f40349f6172a.png)

次に、App Service起動時に実行するファイルを指定します。
今回は、Startup.sh に依存関係の解決とサーバーの起動が設定されているため、該当のシェルを指定します。

[設定] ブレードから [構成] にアクセスし、スタートアップコマンドを指定して [保存] します。

- スタートアップコマンド：[startup.sh]

![FireShot Capture 016 - fastapi-quickstart - Microsoft Azure - portal.azure.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419037/0e27aae9-5d03-4953-822e-ce595a4358d6.png)

設定後、[概要] ページにアクセスして、 [再起動] を実施してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419037/9ba129e6-6fab-d58c-0ac9-55e993158d1f.png)

## 4. 動作確認

[既定のドメイン]にアクセスすると、[msdocs-python-fastapi-webapp-quickstart] の画面が表示され、FastAPIが動作していることが確認できます。

![FireShot Capture 017 - Hello Azure - Python Quickstart_ - fastapi-quickstart-hxc3g7d9ckbtdehp.japaneast-01.azurewebsites.net.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419037/d5bbf2c4-6c08-4c89-0ef4-26096db860fe.png)

## 5. まとめ

このように、Azure App Service では Python アプリを簡単にホストすることが可能です。
FastAPI や Gradio を用いたアプリケーションのホストにも利用できますね。

HuggingFace Spaces でも Gradio アプリは手軽にホスティング可能ですが、パブリックに公開したくない場合は App Service が選択肢に入ってくると思います。ぜひ、ご利用ください。

最後までご覧いただき、ありがとうございました。

## 最後に
＊本稿は、個人の見解に基づいた内容であり、所属する会社の公式見解ではありません。また、いかなる保証を与えるものでもありません。正式な情報は、各製品の販売元にご確認ください。