ここでは Streamlit で構築したアプリを Azure にデプロイする方法を紹介します。

1. Streamlit とは

Streamlit は、Python でデータ分析用の Web アプリケーションを簡単に構築できるフレームワークです。データ分析の結果を共有する際に、データ分析のコードと結果を同時に共有できるため、非常に便利です。最近では、 LLM を利用するプロントアプリ用のインターフェースとしても利用されています。

特に、データ分析や LLM のような AI を利用する人に使い慣れている Python で Web アプリケーションを構築できることが大きなメリットです。

streamlit-hp

2. デプロイする Azure サービスの選定

Azure には、Web アプリケーションをデプロイするためのサービスがいくつかあります。例えば、 Streamlit で開発されたチャットアプリをデプロイするサービスとしては、 App Serivce や Web App for Containers が考えられます。

これらのサービスの特徴としては、以下のようなものがあります。

今回は 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

すると、ブラウザが立ち上がり次のような画面が表示されます。

streamlit-app

3.2. デプロイ用のファイルを作成

次に、デプロイ用のファイルを作成します。デプロイに必要なファイルはアプリのコードに加え、外部ライブラリを利用している場合は、必要なライブラリのリストを requirements.txt として用意する必要があります。

requirements.txt を作成する簡単な方法は、以下のコード実行して requirements.txt を生成する方法です。このコマンドを実行することで、現在、利用している Python 環境にインストールされているライブラリとそのバージョンがリストとして出力されます。

pip freeze > requirements.txt

次に、仮想環境である .venv ディレクトリを削除します。この作業をしていない場合、 App Service 上の OS 環境と差異が出てしまい、デプロイに失敗する可能性があるので、必ず削除してください。

3.3. Azure にデプロイ

Azure にデプロイするためには、以下の手順を実行します。

  1. Azure ポータルにログイン
  2. App Service を作成
  3. App Service にデプロイ
  4. スタートアップ スクリプトを設定

これらの手順を順に紹介します。

3.3.1. Azure ポータルにログイン

まず、 Azure ポータルにログインし、「リソースの作成」を選択して「 Web アプリ」の「作成」を選択します。

azure-portal

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 価格プランを指定
ゾーン冗長 無効 ゾーン障害時にサービスを継続できるよう冗長に構成

create-app-service-basic

3.3.2.2. App Service 作成 - 「デプロイ」タブ

項目 設定値の例 説明
継続的デプロイ 無効化 CI/CD ツールと連携するよう構成するか (有効化:構成する場合 / 無効化:構成しない場合)
認証の認証の設定 無効にする IdP と連携してアクセス時に認証状態を確認する機能を有効化するか

create-react-app-deploy

3.3.2.3. App Service 作成 - 「ネットワーク」タブ

項目 設定値の例 説明
パブリックアクセスを有効にする オン インターネットからの接続を許可
ネットワークインジェクションを有効にする オフ App Service からのアウトバウンド通信を VNet 側に制限

create-react-app-network

3.3.2.4. App Service 作成 - 「監視とセキュリティ保護」タブ

項目 設定値の例 説明
Application Insights を有効にする いいえ 発生したログを Application Insight へ保存

create-react-app-network

3.3.3. App Service にデプロイ

次に作成した App Service に対して、アプリをデプロイします。 App Service では様々なデプロイ方法が提供されていますが、今回は、開発環境からデプロイする一番簡単な方法を紹介します。今回、開発環境としては、 Visual Studio Code を利用していることを前提としています。 Visual Studio Code には拡張機能をインストールする機能があり、 Azure に関連する拡張機能 (Azure Tools) をインストールすることで、 Visual Studio Code から、直接 App Service にデプロイすることが可能です。

vscode-azure-tools-plugin

Azure Tools を Visual Studio Code にインストールしたら、以下の手順でデプロイを行います。まず、左のペインで Explorer を開き、右クリックすると、「 Deploy to Web App... 」というメニューがあるので、それを選択します。すると、デプロイ先の App Service を選択する画面が表示されるので、デプロイ先の App Service を選択します。デプロイが完了すると、ブラウザが立ち上がり、デプロイしたアプリが表示されます。

vscode-deploy-to-web-app

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 をソースコードとともにリポジトリ内で管理することによって、そのリポジトリの開発環境を統一できるとともに、環境構築の手間を省くことができます。そのため、チーム開発においても有用です。

vscode-devcontainers

6. 参考文献