snow streamlit deploy で Streamlit アプリをデプロイするとマルチページを利用できない
概要
Snowflake 上で Streamlit アプリケーションをデプロイする際、 snow streamlit deploy
コマンドを使用すると、マルチページ機能が利用できないという制約があります。
本記事では、この問題の原因を考察し、 create or replace streamlit
コマンドを用いた回避策を紹介します。また、ROOT_LOCATION を使用した場合のその他の制約についても触れ、効率的なデプロイ方法を提案します。
結論
snow streamlit deploy --replace
コマンドでデプロイ後 FROM 句を使用した create or replace streamlit
SQLを実行します。
Snowflake CLI を活用したデプロイの基本情報
作成した Streamlit アプリケーションを Snowflake へデプロイできる、 snow
コマンドが存在します。
snow streamlit deploy --replace
コマンドの詳細は、以下公式ドキュメントをご参照ください。
snow
コマンドは、 pip install
で導入できます。
pip install snowflake-cli
このデプロイコマンドを使用すると、開発した Streamlit アプリケーションを、設定ファイルである snowflake.yml
に従って、Snowflake へデプロイしてくれます。
まとめると、以下の流れとなります。
-
snowflake-cli
を導入 - streamlit アプリケーションを開発
-
snowflake.yml
を作成- 必要に応じて
environment.yml
を作成
- 必要に応じて
-
snow streamlit deploy --replace
コマンドでデプロイ
snowflake.yml
については、以下公式ドキュメントをご参照ください。
コマンド一つでデプロイできて非常に便利なのですが、 snow streamlit deploy
でデプロイすると、 マルチページ機能が使用できなくなる という問題が発生します。
マルチページ機能が使用できなくなる理由
公式ドキュメントにて、マルチページが機能しなくなるケースについて注意書きがあります。
Streamlit を動作させるためには、DB,スキーマ、ステージの指定が必要です。
これらを指定する方法に、以下二つがあります。
- FROM 句による指定
- ROOT_LOCATION による指定
そして、 ROOT_LOCATION を使用した場合、 マルチページ機能が使用できなくなります。
回避策
初めに、 snow streamlit deploy
コマンドで Streamlit アプリケーションをデプロイします。
snow streamlit deploy --replace
その後、デプロイしたアプリケーションに対して create or replace streamlit
コマンドを実行し、 FROM 句を使用した設定で上書きします。
update_streamlit_sql="""
create or replace streamlit your_streamlit_app_name
from '@your_db.your_schema.your_stage'
main_file = 'your_main_file.py'
query_warehouse = 'your_warehouse';
"""
snow sql -q ${update_streamlit_sql}
これで、 Snowflake 上の Streamlit にて、マルチページ機能が使用できるようになります。
上記コマンドをまとめてスクリプト化しておくことで、コマンド一発でデプロイできるようになります。
#!/bin/bash
set -eu
# Streamlit アプリケーションを Snowflake へデプロイ
snow streamlit deploy --replace
# FROM 句を用いた設定で上書きする
update_streamlit_sql="""
create or replace streamlit your_streamlit_app_name
from '@your_db.your_schema.your_stage'
main_file = 'your_main_file.py'
query_warehouse = 'your_warehouse';
"""
snow sql -q ${update_streamlit_sql}
余談 : ROOT_LOCATION の使用で発生する、他の制約
ROOT_LOCATION の使用では Streamlit のマルチページ機能が使用できなくなる事に加え、以下の制約が発生します。
- Git 連携機能が使用できない
- ファイル選択用のペインが使用できない
◆Git 連携機能が使用できない
Git 連携ボタンがグレーアウトされ、選択できなくなります。
◆ファイル選択用のペインが使用できない
VSCode のようなファイル編集ペインが表示されず、設定ファイル (environment.yml など) の編集やデバッグが困難になります。
参考文献
- https://pypi.org/project/snowflake-cli/
- https://docs.snowflake.com/ja/developer-guide/snowflake-cli/streamlit-apps/manage-apps/initialize-app#create-the-project-definition-for-a-streamlit-app
- https://docs.snowflake.com/ja/developer-guide/snowflake-cli/command-reference/streamlit-commands/deploy
- https://docs.snowflake.com/en/sql-reference/sql/create-streamlit
Discussion