Snowflake

コンテナ版Streamlitは見ていなくてもCompute Poolが残る—操作ログが空なら自分で止める

Snowflakeのコンテナ実行Streamlitは、視聴者が来なくてもサーバーが残り、Compute Poolの自動停止は始まらない。画面を閉じたこととノード課金を分け、操作ログと稼働日で画面用プールだけを止める判断基準。

コンテナ実行のStreamlitで運用画面を出していると、Compute Poolの自動停止を短くしただけでは、昼のあいだ誰も見ていなくてもノードの課金が残ります。見ていないことと、サービスが止まっていることは別です。画面がサービスとして残っているあいだ、プールの自動停止は数え始めません。読み終わると、公式の停止条件と自分の停止条件を分け、操作ログが空のときだけ画面用プールを止め、祝日も時間外にできます。金額と実測のクレジットは書きません。

この記事でわかること

コンテナ版Streamlitの未使用が、プールの自動停止だけでは止まらない理由と、止めてよい条件を、2026年11月7日に開いた公式の秒数と状態名で示します。ウェアハウス実行のStreamlitとは止め方が違うことも先に分けます。

前提

対象は、Snowflakeのコンテナ実行で動かすStreamlitです。クエリ用ウェアハウスの自動停止とは別の話です。ウェアハウス実行のStreamlitは、視聴者の接続が切れるとコード用ウェアハウスが止まりやすく、公式は最後の操作から約15分でWebSocketが切れる、としています。マウスをアプリの上で動かしているあいだは、その接続が残ります。ここから先の秒数と状態は、コンテナ実行の話です。

失敗1 画面を閉じていればプールは止まっていると思う

コンテナ実行のStreamlitは長時間サービスです。公式は、サーバーがCompute Poolのノード上で動き続け、同時に見る人は同じサーバーへ接続する、と書いています。視聴者が3日来ないとサーバープロセスは終わり、そのあとプールは自身の AUTO_SUSPEND に従って止まります。3日のあいだは、誰も画面を開いていなくてもサービスが残ります。

AUTO_SUSPEND_SECS が数える非活動は、どのノードにもサービスもジョブも動いていない状態です。0にすると自動停止は無効です。Streamlitのサービスが残っているあいだ、このタイマーは始まりません。

課金される状態は IDLE、ACTIVE、STOPPING、RESIZING です。SUSPENDED と STARTING は課金されません。サービスが残った ACTIVE は、視聴者がゼロでも課金されます。IDLE はノードが希望数だけあり、サービスがスケジュールされていない状態で、こちらも課金されます。

悪い例は、AUTO_SUSPEND_SECS を短くしただけで、昼の未使用が止まると書くことです。

良い例では、公式の「視聴者不在が3日続いてプロセスが終わったあと、プール自身の自動停止に従う」を先に書き、それより早く止めたい条件は自分のTaskとして別に書きます。

合格条件は、停止の説明に、視聴者不在でもサービスが残ることと、自動停止が数える非活動(サービスもジョブも無いこと)が、公式の3日と一緒に書いてあることです。

失敗2 ドキュメントの既定秒数を自分のプールの値だと思う

自動停止の既定は、プールの種類で違います。2026年11月7日の公式では、自分で作るCompute Poolの AUTO_SUSPEND_SECS の既定は3600秒です。システムプール SYSTEM_COMPUTE_POOL_CPU と SYSTEM_COMPUTE_POOL_GPU の既定は600秒です。どちらも、画面を誰も開いていない時間の長さではありません。

SYSTEM_COMPUTE_POOL_CPU では、Snowflakeが空きノードを無償で置くことがあり、そのあいだプールの AUTO_SUSPEND_SECS を259200秒(3日)に伸ばします。その空きノードの費用は請求に出ません。空きノードでワークロードが始まると、そのノードは通常どおり課金されます。コンテナ版Streamlitが載っているノードは、無償の空きではありません。無償の空きノードは動いているワークロードに数えないので、自動停止そのものは妨げません。画面が載って課金されるノードとは別です。

悪い例は、ドキュメントの600秒や3600秒を自分のプールの現在値だと思い、無償の空きノードの説明を画面ノードの免除と読むことです。

良い例では、SHOW COMPUTE POOLS の auto_suspend_secs を見てから秒数を話します。システムプールの無償の空きノードと、ワークロードが載って課金されるノードを分けて書きます。

合格条件は、停止の判断に使った秒数が、SHOW COMPUTE POOLS で見た auto_suspend_secs の値であると書いてあることです。

失敗3 画面を1本に寄せるとノード代が減ると思う

SYSTEM_COMPUTE_POOL_CPU では、1ノードあたりStreamlitが3本まで載ります。それ以外のプールでは、1本がノードを占有します。3本の画面を1本のタブに寄せると、システムプールのCPUでは枠が空きます。占有型のプールでは、もともと1本でノードが埋まっているので、本数を減らしても枠は空きません。

残った1本がコンテナサービスとして動いていれば、ノードは課金されたままです。枠が空くことと、プールが SUSPENDED になることは別です。

悪い例は、1本に寄せたのでノード代がおよそ3分の1になる、と書くことです。

良い例では、タブへの集約を「同じノードに載せられる本数」の話として書き、課金を止める手段はプールの停止だけだと分けます。

合格条件は、画面の本数を減らした変更と、プールを SUSPENDED にする変更が、別の文で書いてあることです。

失敗4 停止のTaskをジョブが載るプールに掛ける

公式の3日より早く止めるなら、自分の操作ログで判定します。数分おきのTaskで、画面用プールだけを見ます。稼働時間の外は、必ずそのプールを SUSPEND します。稼働時間の内は、画面の操作ログに直近数分の記録が1件も無いときだけ止めます。操作として数えるのは、開く、再読み込み、タブの移動、ボタン、入力です。次に誰かが開いたときは、プールの AUTO_RESUME に任せます。自分で作るプールの既定は TRUE で、サービスを始めるか、アプリのURLを開くと、停止中のプールが起きます。

公式では、プールを止めるとサービスは止まります。ジョブサービスは完了か失敗まで動き続け、そのあとでノードが解放されます。画面と取得ジョブを同じプールに載せたままこの条件で止めると、次の取得が載る場所まで止まります。

悪い例は、同じ停止条件を、アカウント内の全部のプール、またはジョブが載っているプールに掛けることです。

良い例では、画面用プールとジョブ用プールを分け、Taskの対象を画面用の名前だけにします。

合格条件は、停止するプールの名前が画面用だけであり、再開を AUTO_RESUME に任せると書いてあることです。

失敗5 平日の時刻だけで稼働日を決める

稼働時間を平日の9時から18時とコードに書くと、祝日と振替休日の昼にプールが起きたまま残ります。祝日の日付は年ごとに変わります。

悪い例は、曜日と固定時刻だけをTaskの条件にすることです。

良い例では、祝日と振替休日を持つ日付の表で、その日を時間外にします。Taskはその関数の結果を読み、時刻の窓と日付の両方で稼働時間の外を決めます。

合格条件は、次の祝日の日付が、コードへの直書きではなく、日付の表から時間外になると書いてあることです。

作業前にAIへ渡す入力

人間向けの長い手順は書きません。次は、ルールファイルへ残す文と、作業の開始時にチャットへ貼る文です。

AI向けの永続ルール

Snowflakeのコンテナ実行StreamlitとCompute Poolの未使用を止めるとき:
- 見ていないことと、サービスが止まっていることを分けて書く。公式では、視聴者不在が3日続くとサーバープロセスが終わり、そのあとプールは自身のAUTO_SUSPENDに従う。AUTO_SUSPEND_SECSが数える非活動は、どのノードにもサービスもジョブも無い状態。サービスが残るあいだタイマーは始まらない。
- 課金される状態はIDLE、ACTIVE、STOPPING、RESIZING。SUSPENDEDとSTARTINGは課金されない。
- 秒数はSHOW COMPUTE POOLSのauto_suspend_secsを見る。2026-11-07時点の公式の既定は、自分で作るプールが3600秒、SYSTEM_COMPUTE_POOL_CPUとSYSTEM_COMPUTE_POOL_GPUが600秒。無償の空きノードを置いているあいだは259200秒に伸びうる。無償の空きノードと、Streamlitが載って課金されるノードを混ぜない。
- SYSTEM_COMPUTE_POOL_CPUは1ノードあたりStreamlit 3本。それ以外のプールは1本がノードを占有する。本数を減らすのは枠の話。課金を止めるのはSUSPEND。
- 数分おきのTaskは画面用プールだけを止める。稼働時間の外は必ずSUSPEND。稼働時間の内は、開く、再読み込み、タブ、ボタン、入力の操作ログが直近数分に無いときだけSUSPEND。再開はAUTO_RESUME。ジョブが載るプールには掛けない。
- 稼働日は平日の固定時刻だけで決めない。祝日と振替休日は日付の表で時間外にする。
金額と実測クレジットは書かない。

AI向けの開始時に貼る文

コンテナ実行のStreamlitが、誰も見ていない時間もCompute Poolを消費している。実装はまだするな。
先に次を出せ。runtimeがコンテナかウェアハウスか。SHOW COMPUTE POOLSで見た画面用プールのauto_suspend_secsとstate。サービスが残っているあいだ自動停止が始まらないことを、公式の3日と非活動の定義で説明できるか。止めるTaskの対象プールが画面用だけか。操作ログが空、の定義。祝日を日付の表で時間外にしているか。
ジョブ用プールを同じ条件で止める案は出すな。

人間向け

なし。上をAIに渡すだけでよい。

参考リンク