ここでは Streamlit で構築したアプリを Azure にデプロイする方法を紹介します。
1. Streamlit とは
Streamlit は、Python でデータ分析用の Web アプリケーションを簡単に構築できるフレームワークです。データ分析の結果を共有する際に、データ分析のコードと結果を同時に共有できるため、非常に便利です。最近では、 LLM を利用するプロントアプリ用のインターフェースとしても利用されています。
特に、データ分析や LLM のような AI を利用する人に使い慣れている Python で Web アプリケーションを構築できることが大きなメリットです。
2. デプロイする Azure サービスの選定
Azure には、Web アプリケーションをデプロイするためのサービスがいくつかあります。例えば、 Streamlit で開発されたチャットアプリをデプロイするサービスとしては、 App Serivce や Web App for Containers が考えられます。
これらのサービスの特徴としては、以下のようなものがあります。
- App Service
- Web アプリを簡単にデプロイできることがメリット
- 利用可能なランタイムの選択肢が限定される
- Web App for Containers
- Docker コンテナ化された Web アプリをデプロイできることがメリット
- 利用可能なランタイムの選択肢が多いことがメリット
- コンテナをホスティングするための手数がかかる
今回は App Service で Python が利用可能であり、かつ、コンテナ化する手間を省くため、 App Service へデプロイする方法を紹介します。
3. デプロイの手順
デプロイの手順は以下の通りです。前提条件として、手元の PC に Python がインストールされていることが必要です。また、開発 PC の OS としては Windows を想定しています。
3.1. Streamlit アプリの作成
まずは、 Streamlit アプリを作成します。以下のコードを app.py
として保存します。
import streamlit as st
st.title('Streamlit で作成したアプリ')
st.write('これは Streamlit で作成したアプリです。')
次に、以下のコマンドを実行して、 Streamlit アプリを起動します。
python -m venv .venv
./.venv/Scripts/Activate.ps1
pip install streamlit
streamlit run app.py
すると、ブラウザが立ち上がり次のような画面が表示されます。
3.2. デプロイ用のファイルを作成
次に、デプロイ用のファイルを作成します。デプロイに必要なファイルはアプリのコードに加え、外部ライブラリを利用している場合は、必要なライブラリのリストを requirements.txt
として用意する必要があります。
requirements.txt
を作成する簡単な方法は、以下のコード実行して requirements.txt
を生成する方法です。このコマンドを実行することで、現在、利用している Python 環境にインストールされているライブラリとそのバージョンがリストとして出力されます。
pip freeze > requirements.txt
次に、仮想環境である .venv
ディレクトリを削除します。この作業をしていない場合、 App Service 上の OS 環境と差異が出てしまい、デプロイに失敗する可能性があるので、必ず削除してください。
3.3. Azure にデプロイ
Azure にデプロイするためには、以下の手順を実行します。
- Azure ポータルにログイン
- App Service を作成
- App Service にデプロイ
- スタートアップ スクリプトを設定
これらの手順を順に紹介します。
3.3.1. Azure ポータルにログイン
まず、 Azure ポータルにログインし、「リソースの作成」を選択して「 Web アプリ」の「作成」を選択します。
3.3.2. App Service を作成
次に App Service の作成画面が表示されるので、以下のように設定します。
3.3.2.1. App Service 作成 - 「基本」タブ
項目 | 設定値の例 | 説明 |
---|---|---|
リソースグループ | streamlit | リソースグループの名前を指定 |
アプリ名 | streamlitsample20240713 | App Service の名前。 FQDN の一部になるため、グローバルで一意 |
公開 | コード | コードを直接デプロイする場合は「コード」を選択 |
ランタイム スタック | Python 3.12 | Python のバージョンを指定 |
オペレーティング システム | Linux | Python の場合は Linux のみ選択可 |
地域 | Japan East | リージョンを指定 |
Linux プラン | streamlit-asp | 設置するアプリの土台になる App Service Plan の名前 |
価格プラン | Free F1 | 価格プランを指定 |
ゾーン冗長 | 無効 | ゾーン障害時にサービスを継続できるよう冗長に構成 |
3.3.2.2. App Service 作成 - 「デプロイ」タブ
項目 | 設定値の例 | 説明 |
---|---|---|
継続的デプロイ | 無効化 | CI/CD ツールと連携するよう構成するか (有効化:構成する場合 / 無効化:構成しない場合) |
認証の認証の設定 | 無効にする | IdP と連携してアクセス時に認証状態を確認する機能を有効化するか |
3.3.2.3. App Service 作成 - 「ネットワーク」タブ
項目 | 設定値の例 | 説明 |
---|---|---|
パブリックアクセスを有効にする | オン | インターネットからの接続を許可 |
ネットワークインジェクションを有効にする | オフ | App Service からのアウトバウンド通信を VNet 側に制限 |
3.3.2.4. App Service 作成 - 「監視とセキュリティ保護」タブ
項目 | 設定値の例 | 説明 |
---|---|---|
Application Insights を有効にする | いいえ | 発生したログを Application Insight へ保存 |
3.3.3. App Service にデプロイ
次に作成した App Service に対して、アプリをデプロイします。 App Service では様々なデプロイ方法が提供されていますが、今回は、開発環境からデプロイする一番簡単な方法を紹介します。今回、開発環境としては、 Visual Studio Code を利用していることを前提としています。 Visual Studio Code には拡張機能をインストールする機能があり、 Azure に関連する拡張機能 (Azure Tools) をインストールすることで、 Visual Studio Code から、直接 App Service にデプロイすることが可能です。
Azure Tools を Visual Studio Code にインストールしたら、以下の手順でデプロイを行います。まず、左のペインで Explorer を開き、右クリックすると、「 Deploy to Web App... 」というメニューがあるので、それを選択します。すると、デプロイ先の App Service を選択する画面が表示されるので、デプロイ先の App Service を選択します。デプロイが完了すると、ブラウザが立ち上がり、デプロイしたアプリが表示されます。
3.3.4. スタートアップ スクリプトを設定
App Service にデプロイした Python アプリを起動するためには、スタートアップ スクリプトを設定する必要があります。スタートアップ スクリプトは、アプリが起動する際に実行されるコマンドを指定することができます。
App Service の設定画面で「構成」を選択し、「全般設定」を選択します。次に、スタートアップ コマンド欄に、次のように入力して「保存」ボタンを押します。
python -m streamlit run main.py --server.port 8000 --server.address 0.0.0.0
ポイントとしては、 App Service ではデフォルトで 8000 ポートを 443/80 にフォワードする形でサービスを外部に公開しています。そのため、ここでは streamlit のアプリがホスティングするポートを 8000 に指定しています。
3.4. アプリの確認
デプロイが完了したら、ブラウザでアプリを確認します。
4. まとめ
ここでは、 Streamlit で構築したアプリを Azure にデプロイする方法を紹介しました。 Streamlit は Python でデータ分析用の Web アプリケーションを簡単に構築できるため、データ分析の結果を共有する際に非常に便利です。 Azure には、 App Service など Web アプリケーションをデプロイするためのサービスがいくつかありますが、 Python が利用可能な App Service を利用することで、簡単にデプロイすることができます。
5. 補足
5.1. Python の仮想環境
Python を用いて手元の PC 上でアプリを開発する場合、プロジェクトごとに環境を分離できる機能を提供する仮想環境を利用することが一般的です。 Python には、仮想環境を構築するための標準ライブラリである venv
が提供されています。 以下のコマンドを実行することで、仮想環境を構築することができます。
python -m venv .venv
仮想環境を有効化するためには、以下のコマンドを実行します。
./.venv/Scripts/Activate.ps1
これにより、仮想環境が有効化され、仮想環境内での Python の実行が可能となります。 この環境上で pip コマンドを使ってモジュールをインストールすることで、閉じた環境で開発を進めることが可能になります。 また、仮想環境を無効化するためには、以下のコマンドを実行します。
deactivate
仮想環境により環境を分離できるメリットとしては、次のことが考えられます。
- プロジェクト単位でライブラリのバージョンを指定できる
- ライブラリのインストールやアンインストールが他のプロジェクトに影響を与えない
また、デメリットを上げるとすると、以下のようなことが考えられます。
- 仮想環境の管理が面倒
- プロジェクトごとに環境を構築するため、ディスクの容量を消費する
以上のようなメリット・デメリットを踏まえて、プロジェクトの規模や目的に応じて、仮想環境を利用するかどうかを検討するとよいでしょう。個人的には、 venv
は Python が標準で備える機能ですし、必ず利用することをお勧めします。
5.2. Dev Container を利用した開発
Visual Studio Code では、ワークスペースの開発環境を定義するために、 Dev Container という拡張機能が提供されています。 Dev Container を利用することで、開発環境を JSON ファイルで定義可能です。さらに、定義された環境を Dev Container で開くとコンテナとして定義に従った環境が構築され、実行されます。そのため、手元の PC の環境に依存せず、開発環境を統一することができます。
この Dev Container 環境定義ファイルの JSON をソースコードとともにリポジトリ内で管理することによって、そのリポジトリの開発環境を統一できるとともに、環境構築の手間を省くことができます。そのため、チーム開発においても有用です。