ランタイム環境間の移行¶
アプリの RUNTIME_NAME および COMPUTE_POOL プロパティを更新することで、ウェアハウスランタイムとコンテナランタイム間でStreamlitアプリを移行できます。ただし、一部の機能は1つのタイプのランタイム環境でのみサポートされるため、ランタイム環境間でアプリを移行する場合はいくつかの考慮事項があります。
このページは、ウェアハウスからコンテナランタイムに移行するためのチェックリストを提供します。各項目は、必要に応じて簡単な要約と詳細情報へのリンクを提供します。
前提条件¶
始める前に、ウェアハウスランタイムアプリを調整して、移行の準備をします。
- オプション:アプリのコードをバックアップする
アプリのソースコードがバージョン管理システム、外部リポジトリ、またはローカルディレクトリにまだ格納されていない場合は、移行中の潜在的なデータ損失を防ぐためにバックアップしてください。
- アプリが ROOT_LOCATION で作成されていないことを確認してください
ROOT_LOCATION パラメーターで作成されたアプリはウェアハウスのランタイムのみを使用できます。アプリが ROOT_LOCATION で作成された場合、 FROM パラメーターを使用するためアップグレードしてください。
さまざまなタイプのStreamlitオブジェクトについて理解する をご参照ください。
- アプリをStreamlit 1.50+にアップグレードする
アプリとすべての依存関係がStreamlit 1.50+と互換性があることを確認してください。
Streamlitアプリの依存関係を管理する をご参照ください。
- アプリをPython 3.11のみに更新する
コンテナランタイムはPython 3.11のみをサポートしますが、ウェアハウスランタイムはPython 3.9、3.10、3.11をサポートします。アプリとすべての依存関係がPython 3.11と互換性があることを確認してください。
Streamlitアプリの依存関係を管理する をご参照ください。
- オプション:Snowflake CLI 3.14.0+をローカルにインストールする
Snowflake CLI を使用してアプリをデプロイする場合、コンテナランタイム展開構文をサポートするには、バージョン3.14.0以降が必要です。
snow --versionでバージョンを確認してください。オプションで、--experimentalフラグを使用する場合は、バージョン3.12.0~3.13.1を使用できます。
リソースと権限¶
アプリは既存のクエリウェアハウスを引き続き使用できますが、コンテナランタイムのコンピューティングプールを設定する必要があります。
- コンピューティングプールの作成とアクセス許可
アプリ所有者はコンテナランタイムが実行されるコンピューティングプールに対する USAGE 権限が必要です。アプリのビューアーは、コンピューティングプールの権限を必要としません。
Streamlitアプリの作成と使用に必要な権限 をご参照ください。
- 外部アクセス統合へのアクセスの作成と付与
コンテナランタイムには、最小限のパッケージのセットがプリインストールされています。アプリで追加パッケージやプリインストールパッケージの異なるバージョンが必要な場合は、 PyPI のような外部パッケージインデックスを使用する必要があります。アプリが外部パッケージインデックスにアクセスできるようにするには、外部アクセス統合(EAI)を作成し、 EAI に対する USAGE 権限をアプリ所有者に付与する必要があります。
Streamlit in Snowflake の外部ネットワークアクセス をご参照ください。
依存関係管理¶
environment.ymlをpyproject.tomlまたはrequirements.txtに置き換えます依存関係のバージョンをロックしたり、追加の依存関係を指定したりする必要がある場合は、プロジェクトディレクトリのルートに
pyproject.tomlまたはrequirements.txtファイルを追加する必要があります。パッケージはCondaと PyPI ではパッケージ名が異なる場合がありますので、アーティファクトリポジトリには正しいパッケージ名を使用するようにしてください。Streamlitアプリの依存関係を管理する をご参照ください。
- アプリを変更して外部アクセス統合を設定する
依存関係にバージョン指定子が含まれている場合や追加パッケージをインストールする場合は、アプリに外部アクセス統合を割り当てる必要があります。これにより、依存関係ファイルで指定されたパッケージインデックスにアクセスできるようになります。 PyPI は、デフォルトのパッケージインデックスです。
Streamlitアプリの依存関係を管理する をご参照ください。
コードの変更¶
get_active_session()をst.connection("snowflake").session()に置き換えますコンテナランタイムを使用すると、Streamlitサーバーは複数のビューアーを同時に処理します。
get_active_session()はスレッドセーフではないため、代わりにst.connection("snowflake")を使用して接続を管理する必要があります。シークレットを管理し、Streamlitアプリを設定する をご参照ください。
- コードを確認してキャッシュを実装する
コンテナランタイムはビューアセッション間でディスク、コンピューティング、およびメモリリソースを共有するため、
st.cache_resourceまたはst.cache_dataを使用して負荷の高いコンピューティングや頻繁に変更されないデータをキャッシュする必要があります。以下をご参照ください。Streamlitドキュメント内の Streamlitのクライアントサーバーアーキテクチャの理解 および キャッシュの概要
- スレッドセーフティの確保
コンテナランタイムを使用する場合、複数のビューを同時に処理するには、アプリのコードがスレッドセーフである必要があります。各ビューアーはアプリスクリプトの固有のインスタンスを取得しますが、競合状態や一貫性のない動作につながる可能性のある、共有状態やグローバル変数のインポートされたコードを確認する必要があります。Streamlitアプリに新しいスレッドを導入する場合は、Streamlitのアーキテクチャを確認し、カスタムスレッドでStreamlitコマンドを使用しないでください。
以下をご参照ください。Streamlitドキュメント内の `Streamlitのマルチスレッド<https://docs.streamlit.io/develop/concepts/design/multithreading>`_
_snowflakeの使用をネイティブPythonに相当するものに置換する_snowflakeは、ユーザー定義関数(UDFs)およびストアドプロシージャでのみ使用できるプライベートモジュールです。ウェアハウスランタイムは_snowflakeにアクセスを継承しますが、コンテナランタイムは継承しません。アプリで_snowflakeを使用する場合、Snowflake PythonコネクタなどのネイティブPythonの同等のものに置き換えます。必要であれば、ストアドプロシージャを使用してシークレットにアクセスします。シークレットを管理し、Streamlitアプリを設定する をご参照ください。
- ファイルパスと組織を更新する
ソースロケーションのルートは、アプリの作業ディレクトリです。ほとんどのPythonライブラリでは、アプリはソースロケーションのルートからの相対パスを使用する必要があります。ただし、一部のStreamlitコマンドにはエントリポイントファイルからの相対パスが必要です。エントリポイントファイルがサブディレクトリにある場合は、それに応じてコード内のパスを確認します。
secrets.tomlおよびconfig.tomlの場所を確認します。Streamlitアプリファイルを整理する をご参照ください。
アプリ構成の変更¶
- アプリを変更して、コンピューティングプール、クエリウェアハウス、ランタイムを設定する
アプリのランタイムタイプを切り替える準備ができたら、 Snowsight または SQL を使用できます。
Snowsight にサインインします。
ナビゲーションメニューで、 Projects » Streamlit を選択してから、アプリを選択します。
Python environment には、 Run on container を選択します。
Compute pool ドロップダウンで、コンピューティングプールを選択します。
Query warehouse ドロップダウンで、クエリウェアハウスを選択します。
変更を保存してダイアログを閉じるには、 Save を選択します。
ALTER STREAMLIT my_app COMPUTE_POOL = my_compute_pool QUERY_WAREHOUSE = my_warehouse RUNTIME_NAME = SYSTEM$ST_CONTAINER_RUNTIME_PY3_11;
アプリが再起動して新しいコンテナをビルドするために数分かかります。
Streamlitアプリのランタイム環境 をご参照ください。
