こんにちは、エクスチュアの石原です。
前回に引き続き、Pythonスクリプトを使ってシンプルかつ迅速にインタラクティブなウェブアプリケーションを作成するためのオープンソースフレームワークStreamlitを使用したアプリケーション作成についてご紹介します。
前回の記事をご覧になってない方はぜひ併せてお読みください。
前回の記事で、アプリケーションの作成方法を紹介しました。アプリケーションを完成させたら、次のステップとしてはメンバーに公開する必要があります。通常、これにはWebサーバーへのデプロイが必要ですが、これが意外と手間がかかります。
Streamlit in Snowflake
今回紹介するのがStreamlit in Snowflake(SIS)です。これを使えば、公開のためのデプロイの手間を大幅に減らすことができます。
Streamlit in Snowflakeのメリット
追加インフラなしでの迅速かつ簡単なデプロイ
SISを利用することで、Snowflake上のデータ基盤を活かして、インタラクティブな操作UIやデータ分析機能を迅速に構築・デプロイできます。新たなインフラを追加することなく、プロジェクトの初期段階からアジャイル開発をスピーディに進めることが可能です。
セキュリティの確保とデータアクセスの制御
Snowflake上でのデータ管理は、ロールに基づいており、SISもこれを継承します。これにより、ユーザーはデータガバナンスを確保しながら許可された範囲内でのみデータセットにアクセスできます。セキュリティリスクへ頭を悩ませることなく、アプリケーション開発やデータ分析に集中してプロジェクトを進めることができます。
Snowflakeのマシンパワーを活用した分析とアプリケーション化
SISを使用すると、Snowflakeで用意したウェアハウスの強力な計算能力を活かしてSnowpark MLなどの分析を行い、その結果をSnowflake内で直接アプリケーションとして表示することが可能です。データ基盤の構築からデータ分析・可視化・インタラクティブな操作までを一貫してSnowflake内で完結できるのは、SISならではの強みです。
Streamlit in Snowflakeでの制限
残念ながら、SISでのアプリケーション開発にはいくつかの制限があります。特に開発済みのStreamlitアプリをデプロイする場合は使用しているStreamlit機能が対応しているのかどうかを確認する必要があります。
アカウント制限
- 対応リージョン:AWS、Azure、GCP
- 非対応リージョン:US政府のFedRAMP対応、PrivateLink
非対応のStreamlit機能
st.file_uploader
:ファイルアップロードst.camera_input
:カメラ入力st.bokeh_chart
:Bokehチャートst.set_page_config
:ページ設定- 一部カスタムテーマ
- Versionの違いによる一部の機能
外部リソース読み込み制限
- 外部ドメインからのコード読み込み不可
- Mapboxの一部リソースはサポート
その他の制限
- データ取得:32MB制限
- サーバーサイド暗号化ステージ:未サポート
- キャッシュ機能:スクリプトキャッシュ未サポート、キャッシュタイムアウト最大1時間
詳細はこちらで確認してください。
Snowsightでのアプリ作成
実際にSnowsightを使用してSISアプリを作成する画面をお見せします。UI上で簡単にアプリケーション開発ができます。
まずはCREATE STREAMLIT
権限をもつユーザでSnowsightにログインします。
次にプロジェクト→Streamlitを選択し、右上の+Streamlitアプリ
を選択してください。
クリックすると次のアプリ作成ウィンドウが開きます。
アプリケーション作成ウインドウでアプリタイトル、ウェアハウス、データベース、スキーマを設定して作成を実行してください。
するとサンプルスクリプトが記載されたアプリケーション作成画面とそのアプリケーションのプレビュー実行画面が表示されます。
Snowflake上のDBへアクセスする必要のないローカルなStreamlitアプリケーションであればコピペするだけでも作成することが出来ます。
外部のモジュールを使用する場合、エディタ画面のパッケージから追加することが出来ます。バージョン管理もこちらから設定できます。
作成したアプリケーションを表示するには再度プロジェクト→Streamlitから作成したアプリケーションを選択するとビュー画面が表示されます。編集ボタンを押すと再度エディタ画面になります。
共有を押すとロールを選択し、表示可能なロールを変更したり、URLにて表示可能なユーザのアクセスを実施することが出来ます(SISアプリを表示するためにはSnowflakeアカウントが必要になります)
Snowsightでの作成でできないこと
Streamlitには機能ごとにページを別のファイルで管理するものとしてマルチページという機能があります。
https://docs.streamlit.io/develop/concepts/multipage-apps
サイドバーに表示されるページ名をクリックすることでページ遷移することが出来ます。また、ボタンのクリックなどのイベントでの移動なども可能です。
SISでもマルチページを使用することはできますが、上記のようにSnowsightで作成する場合はマルチページを持つアプリケーションは作成できません。Snowsightではメインとなるファイル(上記の例で言うとapp.py)だけ編集可能という形になっています。
SISでマルチページなアプリケーションを作成する場合はローカルでマルチページアプリケーションを作成し、Snowflake上に移植することで実現することが出来ます。
ローカルで作成したStreamlitアプリのデプロイ
次にローカルで作成したアプリケーションをデプロイする方法についてご紹介します。(マルチページを持つアプリケーションは2024年8月現在ではこちらの方法で作成する必要があります。)
デプロイの手順
- アプリの作成
- SnowFlakeにアプリケーションファイルのアップロード
- Streamlitオブジェクトを作成する
デプロイの実例
前回のサンプルアプリケーションを実際にSISアプリとしてデプロイしてみます。
ディレクトリ構造
今回アップするアプリのディレクトリ構造は次のようになっています。
└── streamlit_test/
└── environment.yml # 必要に応じて追加
└── app.py
└── pages/
└── page1.py
└── page2.py
外部パッケージを追加する場合、下記のようなenvironment.yml
を作成してください。
name: app_env
channels:
- snowflake
dependencies:
- pandas
アプリケーションファイルのアップロード
ファイルの作成が完了したら、Snowflake上にアップします。
- Snowsightへのファイルのステージング
- SnowSQLを使用してアップロード
今回の例では1の方法を使用してアップロードしてみます。2の方法についてはこちらをご参照ください。
Snowsightにログインし、作成→ステージ→Snowflake管理を選択します。
ステージの作成ダイアログからステージを作成してください。
ディレクトリテーブルを有効にすることでステージ上のファイルを表示できますが、ウェアハウスが必要なのでコストが発生します。また、後からオプションで有効化することが出来ます。
STAGEを作成後、データ→データを追加からステージにファイルをロード
を選択します。
Streamlitオブジェクトの作成
下記のようにSQLコマンドを実行しstreamlitをデプロイします。
CREATE STREAMLIT hello_streamlit
ROOT_LOCATION = '@xxxxDB.xxxxSCHEMA.STREAMLIT_SAMPLE'
MAIN_FILE = 'app.py'
QUERY_WAREHOUSE = xxxxWH;
Streamlitページを確認します。
これでアプリケーションのデプロイは完了です。アクセスすると作成していたアプリケーションが表示されます。
セキュリティについて
SISアプリのデプロイ後に共有を選択するとSnowflakeの各ロールに対して閲覧権限の割り当てを実施することが出来ます。
複雑な制限の設定をせずにロールを割り当てられているグループ単位で権限設定することが可能です。
まとめ
今回の記事では、Streamlit in Snowflakeを使ったアプリケーションの簡単なデプロイ方法を紹介しました。ぜひお試しください。
エクスチュアはマーケティングテクノロジーを実践的に利用することで企業のマーケティング活動を支援しています。
ツールの活用にお困りの方はお気軽にお問い合わせください。