コンテナランタイム版の Notebook と Streamlit in Snowflake の自動停止の挙動を整理してみる

コンテナランタイム版の Notebook と Streamlit in Snowflake の自動停止の挙動を整理してみる

2026.06.21

はじめに

Streamlit in Snowflake(SiS)と Notebook(Notebooks in Workspaces)は、いずれも Container Runtime 上で動作します。
それぞれについて、自動停止の仕組みを確認した内容を本記事でまとめてみます。

概要

ポイントとして、サービス自体の停止だけでなく、その先にあるコンピュートプールのAUTO_SUSPEND_SECSが連動して初めて課金が止まるため、実際にいつ課金が止まるのかを正しく理解しておく必要があります。

SiS、Notebook ともに、課金停止までに以下の2つの独立したレイヤーが関係します。

レイヤー1: サービス(SiS アプリ / Notebook サービス)
  各サービスが独自のアイドルタイムアウトを持つ

レイヤー2: コンピュートプール(ノード)
  プール上の全サービスがアイドル(サスペンド)になって初めて
  AUTO_SUSPEND_SECS のカウントが始まる

コンピュートプール定義時に設定できるAUTO_SUSPEND_SECSはサービス側が停止した後から効きます。サービスが稼働している間はプールも稼働し続け、課金され続けます。

ドキュメントにも以下のように記載があります。

Number of seconds of inactivity after which you want Snowflake to automatically suspend the compute pool. An inactive compute pool is one in which no services or jobs are currently active on any node in the pool.

https://docs.snowflake.com/en/sql-reference/sql/create-compute-pool

SiS(Streamlit in Snowflake, Container Runtime)のアイドルタイムアウト

公式ドキュメントには、アプリのビューに3日間アクセスがない場合にサービスが自動停止すると記載されています。

Suspension after three days of viewer inactivity.

https://docs.snowflake.com/en/developer-guide/streamlit/app-development/runtime-environments

トリガーはアプリの表示で、常時稼働サーバーのように他ユーザーへサービス提供し続けるため、基本的に稼働を続けます。

Notebook(Notebooks in Workspaces, Container Runtime)のアイドルタイムアウト

前提として、コンテナランタイム版の Notebook は Notebookサービスという単位で動作します。

Notebook サービスは、Notebook を開いてConnectする際に、コンピュートプールや Container Runtime バージョン、アイドルタイムアウトなどをユーザー自身が指定して作成する、個人専用のコンテナサービスです。作成後の実体(コンテナの起動・カーネルプロセスの管理)は Snowflake 側が担い、カーネルをホストします。

https://docs.snowflake.com/en/user-guide/ui-snowsight/notebooks-in-workspaces/notebooks-in-workspaces-compute-setup

1つの Notebook サービスは1ユーザー専有で、コンピュートプール上の1ノードを占有します。同じサービスに複数の Notebook や.pyファイルが接続されている場合は、それらは同じノードのリソースを共有します。

アイドルタイムアウトの起点については、以下のように記載されています。

Idle time begins as soon as all running cells across all connected notebooks have finished. If multiple notebooks share the same service, idle time starts only when the last notebook becomes idle (no cells running).

つまり、ブラウザを閉じたかどうかではなく、「接続中の全 Notebook で実行中セルがすべて終了した時点」がアイドルカウントの起点です。複数のNotebook が同じサービスに接続されている場合は、最後の1つがアイドルになるまでカウントは始まりません。

Workspaces の Notebook サービスの場合、このアイドルタイムアウトはサービス作成・更新時の設定として指定でき、デフォルトは24時間です。

https://docs.snowflake.com/en/user-guide/ui-snowsight/notebooks-in-workspaces/notebooks-in-workspaces-compute-setup#idle-timeout

コンピュートプールの自動停止との違いを整理すると以下のようになります。

対象 設定方法 デフォルト
Notebookサービスのアイドルタイムアウト サービス作成・更新時にUIから指定 24時間
コンピュートプールのAUTO_SUSPEND_SECS ALTER COMPUTE POOL ... SET AUTO_SUSPEND_SECS = N プール設定による

また、サービスがサスペンドされても、コンピュートプール上に他のサービスが残っていれば課金は継続します。プール上の最後のサービスが止まって初めてAUTO_SUSPEND_SECSのカウントが始まり、その後プールがサスペンドされて課金が停止します。

試してみる

事前準備

ここでは、Notebook 用・SiS 用のコンピュートプールをAUTO_SUSPEND_SECSを5分(300秒)として作成しました。

CREATE COMPUTE POOL NOTEBOOK_POOL
  MIN_NODES = 1
  MAX_NODES = 1
  INSTANCE_FAMILY = CPU_X64_S
  AUTO_SUSPEND_SECS = 300
  AUTO_RESUME = TRUE;

CREATE COMPUTE POOL STREAMLIT_POOL
  MIN_NODES = 1
  MAX_NODES = 1
  INSTANCE_FAMILY = CPU_X64_S
  AUTO_SUSPEND_SECS = 300
  AUTO_RESUME = TRUE;

デフォルトでは、作成直後はプールがアイドル状態で起動しています。

image

コンピュートプールはIDLEACTIVESTOPPINGRESIZINGいずれの状態でも課金が発生するため、検証を始める前に一度停止しておきます。

https://docs.snowflake.com/en/developer-guide/snowpark-container-services/working-with-compute-pool#compute-pool-lifecycle

-- サービス全停止
ALTER COMPUTE POOL NOTEBOOK_POOL STOP ALL;
ALTER COMPUTE POOL STREAMLIT_POOL STOP ALL;

-- コンピュートプールも停止
ALTER COMPUTE POOL NOTEBOOK_POOL SUSPEND;
ALTER COMPUTE POOL STREAMLIT_POOL SUSPEND;

STOP ALLはプール上で稼働しているサービスを停止するコマンドで、プール自体はAUTO_SUSPEND_SECSの経過を待って初めてサスペンドされます。すぐにプールを止めたい場合はSUSPENDを別途実行します。

SUSPENDED状態になりました。

image

Notebook のアイドル契機を確認

NOTEBOOK_POOLを使用する Notebook を Workspace 上から作成します。

image

作成した.ipynbファイルを開き、「Connect」を押すと Notebook Service(カーネルをホストするコンテナサービス)を作成できます。

デフォルトタイムアウトは24時間ですが、ここでは下図の通り15分としました。

image

サービス作成後、「Connected」の表示となります。

image

これに伴い、コンピュートプールも起動していました。

image

セルを実行し、完了を確認します(2026-06-21 11:11:29)。

image

サービスの稼働状況は対象のコンピュートプールの詳細からも確認できます。

image

SQL の場合は以下のコマンドです。

DESCRIBE SERVICE USER$<User名>.PUBLIC.<サービス名>;

その後は操作を行わず放置し、20分ほど経過した時点で確認すると、サービスはSUSPENDEDになっていました。

image

image

> DESCRIBE SERVICE USER$YASUHARA_TOMOKI.PUBLIC.YASUHARA_NOTEBOOK_SERVICE_1
    ->> SELECT "name", "status", "suspended_on" FROM $1;
+-----------------------------+-----------+-------------------------------+
| name                        | status    | suspended_on                  |
|-----------------------------+-----------+-------------------------------|
| YASUHARA_NOTEBOOK_SERVICE_1 | SUSPENDED | 2026-06-21 11:29:31.774 +0900 |
+-----------------------------+-----------+-------------------------------+

セル完了(11:11:29)から約18分後(11:29:31)にサービスがサスペンドされたことが確認できました。

コンピュートプールの状態も確認します。サービスサスペンドの時点ではまだ稼働中でした。

image

5分後(AUTO_SUSPEND_SECS経過後)にはプールもSUSPENDEDになりました。

image

> DESCRIBE COMPUTE POOL NOTEBOOK_POOL
    ->> SELECT "name", "state", "auto_suspend_secs", "updated_on" FROM $1;
+---------------+-----------+-------------------+-------------------------------+
| name          | state     | auto_suspend_secs | updated_on                    |
|---------------+-----------+-------------------+-------------------------------|
| NOTEBOOK_POOL | SUSPENDED |               300 | 2026-06-21 11:34:34.668 +0900 |
+---------------+-----------+-------------------+-------------------------------+

サービスのサスペンドからプールのサスペンドまで、想定通りAUTO_SUSPEND_SECS(300秒=5分)分の間隔が空いていることが分かります。

SiS のアイドル契機を確認

同様にSTREAMLIT_POOLを使用する SiS アプリを作成し、アクセスします。

image

アプリを起動します。

image

これに伴い、コンピュートプールも起動していました。

image

アプリ(ワークスペースも含む)を閉じ、5分後・4時間後と時間を空けて様子を見ましたが、SiSのサービスは稼働し続けていました。

image

> DESCRIBE SERVICE USER$<User>.PUBLIC.STPLATSTREAMLIT11797137
    ->> SELECT "name", "status", "auto_suspend_secs" FROM $1;
+-------------------------+---------+-------------------+
| name                    | status  | auto_suspend_secs |
|-------------------------+---------+-------------------|
| STPLATSTREAMLIT11797137 | RUNNING |            259200 |
+-------------------------+---------+-------------------+

auto_suspend_secsが259200秒(3日)になっており、ドキュメント記載の「3日間アクセスがないと停止」という挙動と一致しています。アプリを閉じただけでは、この3日間が経過するまでサービスは稼働を続け、コンピュートプールも稼働し続けて課金が継続することになります。

3日間待つのは現実的ではないため、ここではALTER COMPUTE POOL ... STOP ALL;でサービスを強制停止してみます。

-- すべてのサービスをドロップし、コンピューティングプールで実行中のジョブをキャンセル
ALTER COMPUTE POOL STREAMLIT_POOL STOP ALL;

-- コンピュートプールのSuspend時間を待たずに停止する場合
ALTER COMPUTE POOL STREAMLIT_POOL SUSPEND;

これによりサービスが停止します。

image

コンピュートプールもアイドル(サスペンド待ち)になりました。他のサービスが無ければ、ここからコンピュートプールのカウントが開始します。

image

SUSPENDコマンドを実行することで、AUTO_SUSPEND_SECSの経過を待たずにプールもSUSPENDEDとできます。

> DESCRIBE COMPUTE POOL STREAMLIT_POOL
    ->> SELECT "name", "state", "auto_suspend_secs", "updated_on" FROM $1;
+----------------+-----------+-------------------+-------------------------------+
| name           | state     | auto_suspend_secs | updated_on                    |
|----------------+-----------+-------------------+-------------------------------|
| STREAMLIT_POOL | SUSPENDED |               300 | 2026-06-21 17:07:47.512 +0900 |
+----------------+-----------+-------------------+-------------------------------+

image

SiS のコンテナランタイムは3日固定のアイドルタイムアウトで、ユーザー側で短縮する手段はドキュメント上提供されていません。

コストを抑えたい場合は、使い終わったタイミングでALTER COMPUTE POOL ... STOP ALL;でサービスを停止し、すぐに課金を止めたい場合は続けてALTER COMPUTE POOL ... SUSPEND;でプールも明示的にサスペンドするのが確実です。

まとめ

検証内容のまとめは以下の通りです。

SiS(Streamlit, Container Runtime) Notebook(Container Runtime)
アイドル契機 アプリへのアクセスが一定期間ない 実行中セルが全て終了してから
タイムアウト(ドキュメント記載) 3日間 24時間(※デフォルト)
タイムアウトの変更 現時点ではユーザー側での短縮手段はなし サービス作成・更新時にUIで指定可能。アカウント全体のデフォルト値変更もサポート問い合わせることで可能

さいごに

SiS と Notebook のアイドルタイムアウトとコンピュートプールのAUTO_SUSPEND_SECSとの関係を確認してみました。サービスとプールが別レイヤーで動いている点、SiS は長時間(最大3日)稼働し続ける一方で Notebook は比較的短時間でサスペンドされる点などは、コスト管理の観点で意識しておきたいと思いました。
こちらの内容がどなたかの参考になれば幸いです。


Snowflakeの導入支援はクラスメソッドに!

クラスメソッドでは Snowflake の導入を支援しております。
製品の詳細や支援の内容についてお気軽にお問い合わせください。

Snowflakeの詳細を見る

この記事をシェアする

関連記事