SiS vs SPCS
社内アプリをStreamlit in Snowflake(以降 SiS)にするかSnowpark Container Services(以降 SPCS)にするか迷ったときに調べたことをメモします。
制限事項
比較表
項目 | Streamlit in Snowflake | Snowpark Container Services 上でのアプリ(Streamlit 等含む) |
---|---|---|
デプロイ形式 & 管理責任 | Snowflake が基盤を管理。Streamlit アプリは Snowflake オブジェクトとして扱われる | ユーザーが Docker イメージを作成し、SPCS 上に “サービス” として登録・管理 |
Python パッケージの自由度 | Snowflake が許可したパッケージのみ利用可能 | Docker イメージ内で任意のパッケージ・バージョンを利用可能 |
外部ネットワークアクセス | デフォルトは不可。External Access Integration を設定すれば利用可 | 比較的自由。必要なアクセスルールを設定すれば外部 API 呼び出し可能 |
データ転送量・メッセージ制限 | フロントエンドとのメッセージ交換に 32MB 制限あり | 制限なし(ただしリソースや帯域の制約には注意) |
キャッシュ機能 |
st.cache_data 等はセッション単位のみ。ユーザ間での共有不可 |
コンテナ内に自由にキャッシュ設計が可能 |
ファイルアップロード |
st.file_uploader の最大サイズは 200MB |
設計次第で大きなファイルも扱える |
ステージ / 外部ストレージ | 外部ステージは非対応。内部ステージのみ利用可 | 任意のストレージや S3 連携が可能 |
CSP / カスタム UI | 外部スクリプト、unsafe HTML、JS は CSP により制限される | コンテナ側の設定次第で自由に UI 制御可能 |
認証・アクセス制御 | Snowflake の RBAC と統合。アプリは「所有者権限」で実行 | 独自認証や Snowflake RBAC の組み合わせが可能 |
スケーラビリティ / リソース | 接続中は仮想ウェアハウスがアクティブに維持される | コンテナ単位でスケーリング設計が可能 |
料金・課金モデル | 仮想ウェアハウス稼働時間に基づいて課金 | コンテナの compute pool + 仮想ウェアハウスの利用分が課金対象 |
リージョン制約 | Snowflake が提供するリージョンでのみ利用可 | SPCS が利用可能なリージョンに限定 |
開発体験 | Snowsight 上でコード編集・プレビュー可能 | ローカル開発 → Docker ビルド → デプロイの流れ |
参照元
コスト
コンピュートの考え方
SiS
Streamlit アプリ本体と SQL クエリは、基本的に同一の仮想ウェアハウス(Virtual Warehouse)で実行される。
ただし、公式ドキュメント にあるように、アプリ用とクエリ用に異なるウェアハウスを切り替えて利用することも可能。
# アプリは小さい WH、クエリは大きい WH で実行する例
session.sql("USE WAREHOUSE LARGE_WH").collect()
この場合、クエリ実行時のみ別のウェアハウスが稼働し、利用時間分の課金が発生する。
SPCS
アプリケーションはCompute Pool上でコンテナとして稼働する。
Compute Pool は「コンテナ実行環境」であり、SQL クエリの実行自体は行わない。
コンテナ内から Snowflake に SQL を発行する場合は別途、仮想ウェアハウスが必要となる。
参考: Snowpark Container Services – Accounts and Usage Views
参考: Generate Reports at Scale using SPCS (Medium 記事)
課金の仕組み
SiS
仮想ウェアハウスの利用時間に応じて課金。
アプリ用とクエリ用でウェアハウスを切り替えた場合、それぞれの稼働時間分が加算される。
アイドル時は自動サスペンド設定を利用可能。
参考: About Streamlit in Snowflake
SPCS
Compute Pool の稼働に対して課金。IDLE, ACTIVE, STOPPING, RESIZING いずれの状態でも課金対象。
さらに以下のコストが追加される:
- データ転送(egress)
- ブロックストレージ、ログストレージ
- コンテナ内から発行する SQL クエリについては、別途指定した仮想ウェアハウスに課金される。
参考: Accounts and Usage Views for SPCS
単価比較
仮に「実行環境用コンピュート」単体の時間単価で見ると、Compute Pool(SPCS)の方が安い場合がある。 (料金単価表)
ただし実際には以下の要因も効いてくるため、ユースケース次第。
- Compute Pool はアイドル状態でも課金される
- データ転送コストやストレージコストが別途発生する
- 実行環境から発行するクエリのコスト