Streamlitを使用してアプリにフロントエンドエクスペリエンスを追加する

このトピックでは、 Streamlit アプリを Snowflake Native App 内に含める方法について説明します。

Streamlitおよび Snowflake Native App Framework について

Streamlit はオープンソースのPythonライブラリで、機械学習やデータサイエンスのためのカスタムウェブアプリを簡単に作成・共有できます。Streamlitを使用することで、強力なデータアプリケーションを迅速に構築し、展開することができます。

オープンソースライブラリの詳細については、 Streamlitライブラリのドキュメント をご参照ください。

Snowflake Native App Framework 内では、Streamlitを使用して以下を実行できます。

  • 自身の Snowflake Native App が提供するデータをコンシューマーが視覚化できるフロントエンドのウェブアプリを作成する。

  • コンシューマーが権限を付与し、 Snowflake Native App で使用されるコンシューマーのアカウント内でオブジェクトへの参照を作成するユーザーインターフェイスを作成する。

    詳細については、 コンシューマーアカウントでオブジェクトへのアクセスをリクエストする をご参照ください。

注釈

サポートされていないStreamlit機能については、 サポートされていないStreamlit機能 をご参照ください。

サポートされているStreamlitライブラリのバージョン

Snowflake Native App Framework はStreamlitライブラリのv1.22.0をサポートしています。Streamlitライブラリの新しいバージョンのサポートは、リリースされ次第提供されます。

サポートされている外部パッケージ

デフォルトでは、 Snowflake Native App 内に含まれるStreamlitアプリに、 pythonstreamlitsnowflake-snowpark-python パッケージがコンシューマー環境でプリインストールされています。コンシューマー環境には、これらのパッケージが必要とする依存関係に対するアクセス権もあります。

サポートされていないStreamlit機能

Snowflake Native App でStreamlitを使用する場合、以下のStreamlit機能は現在サポートされていません。

  • カスタムコンポーネントはサポートされていません。

  • AWS PrivateLink または Azure PrivateLink を使用してStreamlitアプリにアクセスすることはサポートされていません。

Streamlitアプリの作成とテストのワークフロー

次のワークフローでは、Streamlitアプリをアプリケーションパッケージに含めるための典型的なワークフローを説明します。使用するアプリの要件によっては、これが反復プロセスになる可能性があります。

  1. ネイティブアプリを開発します。

    これには、Streamlitを使用してコンシューマーにアクセスしてもらうデータコンテンツの追加も含まれます。詳細については、 Snowflake Native App Frameworkワークフロー をご参照ください。

  2. Streamlitライブラリのサポートされるバージョンとサポートされない機能を理解するために、以下のセクションを確認してください。

  3. Streamlitアプリを開発します。

    Streamlitオープンソースライブラリの使用に関する情報については、 Streamlitライブラリドキュメント をご参照ください。

  4. Streamlitアプリのローカルディレクトリ構造を作成します。

    Streamlitファイルのアプリ構造内における整理方法の推奨事項については、 Streamlitアプリのディレクトリ構造例 をご参照ください。

  5. manifest.yml ファイルにStreamlitアプリのエントリを追加します。

    Streamlitアプリを含めるには、 manifest.yml ファイルにデフォルトのStreamlitファイル名を含める必要があります。詳細については、 マニフェストファイルへのStreamlitアプリの追加 をご参照ください。

  6. セットアップスクリプトに CREATE STREAMLIT ステートメントを追加します。

    CREATE APPLICATION コマンドを実行すると、セットアップスクリプトは CREATE STREAMLIT ステートメントを実行してStreamlitオブジェクトを作成します。このオブジェクトには、Streamlitアプリが必要とするスキーマとPythonファイルが含まれています。

  7. environment.yml ファイルを構成して、Streamlitアプリに追加ライブラリを含めます。

    詳細については、 Streamlitアプリに付加的パッケージを追加する をご参照ください。

  8. Streamlitファイル、 environment.yml ファイル、セットアップスクリプト、 manifest.yml ファイルを名前付きステージにアップロードします。Streamlitコードファイルをアプリケーションパッケージに含めるには、そのファイルを名前付きステージにアップロードする必要があります。

  9. アプリケーションパッケージをテストします。

    アプリケーションパッケージとStreamlitアプリで必要なファイルを作成した後、セットアップスクリプトと manifest.yml ファイルをテストするアプリケーションオブジェクトを作成します。

    詳細については、 Streamlitアプリを含んでいるアプリケーションパッケージをテストする をご参照ください。

  10. Snowsight でStreamlitアプリを表示します。

    Streamlitアプリをテストするには、アプリを Snowsight で表示します。 SnowsightでStreamlitアプリをテストする をご参照ください。

Streamlitアプリのディレクトリ構造例

他のPythonモジュールと同様に、Streamlitアプリをアプリケーションパッケージに追加するには、Streamlitのコードファイルを名前付きステージにアップロードする必要があります。ステージにファイルをアップロードする方法については、 PUT をご参照ください。

Snowflake Native App の複数のバージョンに対応するため、以下のようなディレクトリ構造を使用して、Streamlitアプリや関連するアプリケーションファイルを管理することを検討してください。

@test.schema1.stage1:
└── /
    ├── manifest.yml
    ├── readme.md
    ├── scripts/setup_script.sql
    └── code_artifacts/
        └── streamlit/
            └── environment.yml
            └── streamlit_app.py
Copy

作成するディレクトリ構造は、アプリと開発環境の要件に依存することに注意してください。

注釈

environment.yml ファイルはStreamlitアプリのメインファイルと同じレベルにある必要があります。

相対パスに関する詳細については、 外部コードファイルの参照 をご参照ください

マニフェストファイルへのStreamlitアプリの追加

アプリケーションパッケージにStreamlitファイルを含めるには、 manifest.yml ファイルに以下のエントリを追加します。

artifacts:
  ...
  extension_code: true
  default_streamlit: app_schema.streamlit_app_na
  ...
Copy

extension_code: true エントリは、アプリの拡張コードを有効にするために必要です。

default_streamlit: app_schema.streamlit_app_na エントリは、Streamlitアプリを含むスキーマの場所を指定します。

セットアップスクリプトでStreamlitオブジェクトを作成します。

次の例では、アプリのセットアップスクリプト内で CREATE STREAMLIT を使用する方法を示します。

CREATE OR REPLACE STREAMLIT app_schema.my_test_app_na
     FROM '/code_artifacts/streamlit'
     MAIN_FILE = '/streamlit_app.py';

GRANT USAGE ON SCHEMA APP_SCHEMA TO APPLICATION ROLE app_public;
GRANT USAGE ON STREAMLIT APP_SCHEMA.MY_TEST_APP_NA TO APPLICATION ROLE app_public;
Copy

この例では、 app_schema という名前のスキーマ内にStreamlitオブジェクトを作成します。 CREATE STREAMLIT コマンドは、 MAIN_FILE 句で指定されたStreamlitアプリを使用します。ディレクトリの場所は FROM 句の値で指定されます。

アプリケーションパッケージ内でStreamlitアプリのディレクトリ構造を作成する方法については、 Streamlitアプリのディレクトリ構造例 をご参照ください。

この例では、スキーマとStreamlitオブジェクトに対して必要な権限をアプリケーションロールに付与しています。

Streamlitアプリに付加的パッケージを追加する

StreamlitアプリにPythonの付加的パッケージを追加するには、 environment.yml ファイルを使用します。たとえば、 scikit-learn ライブラリをStreamlitアプリに追加するには、 environment.yml ファイルに以下を追加します。

name: sf_env
channels:
- snowflake
dependencies:
- scikit-learn
Copy

namechannels プロパティの両方が必要です。

また、 channels プロパティでは、 - snowflake キーが必要です。これは Snowflake Anaconda Channel 示します。

注釈

Snowflake Anacondaチャネル に記載されているパッケージのみをインストールできます。SnowflakeのStreamlitは、外部Anacondaチャネルをサポートしていません。

Streamlitアプリを含んでいるアプリケーションパッケージをテストする

Streamlitアプリを含んでいるアプリケーションパッケージをテストするには、次の例のように CREATE APPLICATION を実行することにより、名前付きステージ上のファイルを使用してアプリケーションオブジェクトを作成します。

CREATE APPLICATION hello_snowflake_app
  FROM APPLICATION PACKAGE hello_snowflake_package
  USING '@hello_snowflake_code.core.hello_snowflake_stage';
Copy

テストする内容によっては、他の形式の CREATE APPLICATION を使用してアプリケーションオブジェクトを作成することもできます。たとえば、バージョンアップやアップグレードの一環としてStreamlitアプリをテストしたい場合があります。 アプリケーションオブジェクトを作成します。 をご参照ください。

SnowsightでStreamlitアプリをテストする

Streamlitアプリをテストするには、 Snowsight で以下を実行してアプリを表示します。

  1. Snowsight にサインインします。

  2. 左側のナビゲーションバーで、 Streamlit を選択します

  3. 表示したいStreamlitアプリを選択します。

    Snowsight でメインのStreamlitアプリを開きます。

  4. オプション: 複数ページのStreamlitアプリを表示する場合は、タブを選択して追加ページを表示します。

Snowflake Native App Framework でStreamlitアプリをトラブルシューティングする

アプリが不明なエラーを表示する場合は、次のセクションで説明する解決策を確実に試してください。

利用規約を確認する

SnowflakeでAnacondaが提供するStreamlitとパッケージを使用するには、 外部製品規約 を確認する必要があります。詳細については、 Anacondaのサードパーティパッケージの使用 をご参照ください。

ファイアウォール許可リスト

各Streamlitアプリは、固有のサブドメインを使用します。厳格なファイアウォールを使用している場合は、ファイアウォール許可リストに *.snowflake.app を追加します。このエントリを許可リストに追加すると、アプリは何の制限もなくSnowflakeサーバーと通信できるようになります。