SELECT

SELECT

Héberger vos dashboards Streamlit dans Snowflake : les bonnes pratiques

Cette page est également disponible en English, Deutsch, Español, Italiano, 日本語 et Português.

By Jeff SkoldbergOct 19, 202613 min read

L'essentiel

  • Le container runtime est mon choix par défaut pour héberger Streamlit dans Snowflake. Les dashboards restent préchauffés, pour la meilleure expérience utilisateur possible.
  • Un nœud de container runtime coûte 0,11 crédit par heure, contre 1 crédit par heure pour un warehouse XS. À 3 $ le crédit, cela représente environ 238 $ par mois s'il tourne en continu. Un nœud héberge trois dashboards. Le quatrième démarre un nouveau nœud.
  • Pour économiser davantage, suspendez le compute pool avec une tâche planifiée chaque soir. En contrepartie, le premier visiteur de chaque dashboard ou application le matin attend environ 45 secondes.
  • Après une suspension, seuls les dashboards réellement ouverts recommencent à être facturés. Vous payez ce qui est utilisé, pas ce qui est déployé.
  • Pour le prix de 100 licences Power BI Premium Per User (2 400 $ par mois), Snowflake peut héberger environ 81 applications Streamlit activement consultées avec la suspension nocturne.

Introduction

Streamlit est une bibliothèque Python open source qui permet de créer des applications web ou des dashboards orientés données. Vous écrivez du Python, et vous obtenez des graphiques, des filtres, des boutons, des fenêtres modales et de l'interactivité, sans toucher au HTML ni au JavaScript. Cette approche 100 % Python a fait de Streamlit un outil très populaire auprès des équipes data pour livrer des outils internes.

Snowflake a racheté Streamlit en 2022, et Streamlit dans Snowflake en est le fruit. Votre application s'exécute dans votre compte Snowflake, au plus près de vos données. Pas de serveur à héberger, pas de système d'authentification séparé, pas de copie de données vers un autre environnement. Les accès suivent les rôles que vous gérez déjà.

Il existe désormais deux façons d'exécuter une application Streamlit dans Snowflake, et elles sont facturées très différemment. Choisissez la mauvaise, ou laissez la bonne tourner toute la nuit, et vous en paierez le prix.

Cet article détaille la facturation de chaque option, un piège d'auto-suspension qui m'a coûté de vrais crédits, comment suspendre chaque nuit, l'impact sur votre facture (plus important que vous ne l'imaginez) et où se situe le seuil de rentabilité face à Power BI.

Applications Streamlit dans Snowflake

Deux façons d'exécuter Streamlit dans Snowflake

Warehouse runtime

L'application s'exécute sur un virtual warehouse. Vous êtes facturé pour le temps pendant lequel ce warehouse est actif. À chaque connexion d'un utilisateur, un nouveau processus serveur Streamlit y démarre, et un websocket maintient le warehouse éveillé jusqu'à environ 15 minutes après la dernière activité de l'utilisateur. Ce délai est configurable : vous pouvez facilement le ramener à 5 minutes d'inactivité. Un warehouse XS consomme 1 crédit par heure lorsqu'il est actif. Vos requêtes SQL peuvent s'exécuter sur un warehouse distinct, vous pouvez donc avoir deux warehouses qui consomment des crédits.

Container runtime

L'application s'exécute sur un nœud d'un compute pool géré pour vous par Snowflake. Le serveur Streamlit y tourne en continu : les pages se chargent vite et tous les utilisateurs partagent le même serveur. C'est de loin la meilleure expérience utilisateur, car rares sont ceux qui subissent un démarrage à froid.

Snowflake prend en charge les deux options, et fait du container runtime le choix par défaut pour les nouvelles applications.

Mon avis : utiliser un warehouse runtime avec un délai strict de 5 minutes pour économiser offre une expérience utilisateur médiocre, car presque chaque visiteur subit un démarrage à froid. J'utilise le container runtime pour toutes mes applications Streamlit : les dashboards sont préchauffés et mis en cache dès la première visite.

Même code Streamlit. Facture très différente.

Choisissez le plus petit compute possible pour exécuter le processus Streamlit

Que vous choisissiez le warehouse runtime ou le nouveau container runtime par défaut, le processus Streamlit lui-même n'a pas besoin de beaucoup de puissance. Un warehouse Extra Small Gen 1 suffit pour toutes les applications Streamlit que j'ai rencontrées. Les requêtes elles-mêmes peuvent utiliser un warehouse plus grand, mais ne gaspillez pas de crédits sur le processus Streamlit.

Si vous pouvez développer le dashboard sur votre ordinateur portable, vous pouvez l'héberger sur un Extra Small ou sur le compute pool par défaut, qui tourne en CPU_X64_S.

Comment le container runtime est facturé

Un nœud est une unité de facturation. Sur le compute pool CPU système par défaut, Snowflake place trois dashboards par nœud. Lorsqu'un quatrième dashboard tourne, un deuxième nœud démarre. Un septième en déclenche un troisième. Le pool grandit par paliers de trois. (Voir la section Scénarios de coûts ci-dessous pour plus d'exemples.)

Le plus petit nœud coûte environ 0,11 crédit par heure. Soit :

  • 2,64 crédits par jour
  • environ 79 crédits par mois
  • 7,92 $ par jour ou 237,60 $ par mois à 3 $ le crédit, si l'auto-suspension ne se déclenche jamais.

Votre prix du crédit sera différent : remplacez-le par le vôtre. J'utilise 3 $ dans tous les exemples ci-dessous.

Quelques points à noter :

  • Le prix est le même pour 1 ou 100 utilisateurs. Le nœud s'en moque. (Comparaison avec la tarification par utilisateur de Power BI plus bas !) Un modèle tarifaire rafraîchissant : j'en ai assez des licences BI facturées par utilisateur.
  • Un nœud coûte environ 9 fois moins cher par heure qu'un warehouse XS. Le piège : le nœud reste allumé, pas le warehouse. Si un warehouse devait rester actif plus d'environ 2,6 heures par jour, le nœud l'emporte. Si votre dashboard est ouvert deux fois par semaine, le warehouse l'emporte.
  • Un dashboard que personne n'a ouvert ne coûte rien. Le service de l'application démarre à la première consultation. Déployer 25 dashboards ne revient pas à louer 9 nœuds. Seuls ceux qui sont ouverts comptent.
  • Le container runtime ne supprime pas vos coûts de requêtes. Le SQL s'exécute toujours sur un warehouse. Cet article ne couvre que le coût d'hébergement de l'application.

J'ai eu une excellente expérience avec le container runtime pour Streamlit, associé aux Adaptive Warehouses pour l'exécution des requêtes. Selon la documentation Snowflake, les Adaptive Warehouses sont plus rapides que les warehouses Gen 2.

Combien de nœuds mon compute pool Streamlit fait-il tourner ?

Les applications Streamlit sont déployées sur le compute pool par défaut, system_compute_pool_cpu. Vous pouvez vérifier le nombre de nœuds actifs dans l'interface, sous Compute dans la barre latérale, puis compute pools.

Combien de nœuds me sont facturés ?

En cliquant sur cette ligne, vous arrivez sur une page de détails où vous voyez les applications en cours d'exécution :

Page de détails du compute pool affichant les applications en cours d'exécution

Si vous préférez le code, exécutez :

show compute pools like 'SYSTEM_COMPUTE_POOL_CPU';

Puis consultez la colonne active_nodes.

Résultat de show compute pools avec la colonne active_nodes

Le piège de l'auto-suspension

Voici ce que dit la documentation : après trois jours d'inactivité, le processus serveur Streamlit s'arrête. Ensuite, le compute pool se suspend selon sa propre valeur AUTO_SUSPEND.

Deux problèmes.

Premièrement, les trois jours ne sont pas configurables, pour l'instant. Impossible de passer à un jour ou à une heure. Trois jours de nœud inactif, c'est environ 8 crédits, soit 24 $. Pas un désastre en soi. Mais cela s'accumule à l'échelle d'un pool, et de chaque environnement où vous déployez.

Deuxièmement, l'AUTO_SUSPEND du pool ne commence à compter que lorsqu'aucun service n'y tourne. Le service Streamlit reste là jusqu'à l'échéance des trois jours, donc le minuteur du pool n'a jamais l'occasion de vous aider.

Au 15 octobre 2026, l'auto-suspension ne se déclenche pas de manière fiable : j'ai vu un service et son conteneur dépasser le jour 3 et continuer à dépenser de l'argent au jour 4. Le support Snowflake m'a indiqué que la cause venait d'onglets de navigateur laissés ouverts qui relancent le websocket (même des reconnexions rejetées en 401 réinitialisent le minuteur d'inactivité côté backend). Snowflake travaille sur un correctif : le problème est peut-être déjà résolu au moment où vous lisez ces lignes.

Une fonctionnalité en private preview ajoute idle_auto_shutdown_time_seconds au niveau de l'application, comme pour le warehouse runtime. Vous avez peut-être vu cette propriété apparaître en décrivant une application Streamlit. Une fois inscrit, vous pouvez définir une valeur plus courte. Demandez à votre équipe de compte Snowflake. J'adorerais pouvoir régler cela sur quelques heures par application et avoir la configuration la plus légère possible !

D'ici là, ne comptez pas sur le minuteur de trois jours. Suspendez vous-même le pool si vous voulez économiser. Voyons cela de plus près.

Suspendez chaque nuit et laissez les utilisateurs réveiller le pool

La façon la plus simple d'économiser est une tâche planifiée qui suspend le pool chaque soir :

CREATE OR REPLACE TASK suspend_streamlit_pool
SCHEDULE = 'USING CRON 30 18 * * * America/New_York'
AS
ALTER COMPUTE POOL SYSTEM_COMPUTE_POOL_CPU SUSPEND;

Le rôle propriétaire de la tâche a besoin du privilège OPERATE sur le pool. Si vous l'exécutez en tâche serverless, il lui faut aussi EXECUTE MANAGED TASK.

Le matin, personne n'a rien à faire. La première personne qui ouvre un dashboard le réveille. D'après mon expérience, ce premier chargement correspond à un démarrage à froid d'environ 45 secondes. Ensuite, c'est rapide pour tout le monde.

Ce que beaucoup ratent, et là où les économies s'additionnent

Quand vous suspendez le pool la nuit, tous les dashboards sont arrêtés. Le matin, seuls ceux que l'on ouvre redémarrent, et seuls ceux-là sont à nouveau facturés.

Imaginons 25 dashboards. Si vous laissez tout tourner, vous payez 9 nœuds, car avec le temps, quelqu'un finit par tous les ouvrir. Si vous suspendez la nuit et que seuls 4 dashboards sont ouverts le lendemain, vous payez 2 nœuds. Les 21 autres ne coûtent rien ce jour-là.

La suspension nocturne est donc bien plus puissante que la simple économie des heures de nuit. Vous cessez aussi de payer pour les dashboards que personne ne regarde. Les rapports de fin de mois, la revue trimestrielle, le dashboard oublié construit pour un projet il y a des mois : ils ne coûtent que les jours où quelqu'un les consulte réellement.

Votre facture suit désormais le nombre de dashboards ouverts par jour, pas le nombre de dashboards déployés.

Avantages

  • Facture prévisible. Vous connaissez le pire scénario.
  • Cela fonctionne même tant que le bug d'auto-suspension n'est pas corrigé.
  • Une seule instruction suspend tous les nœuds du pool, que vous ayez 3 ou 30 dashboards.
  • Les dashboards rarement utilisés ne coûtent plus rien.
  • Aucun risque d'oubli. Personne n'a besoin de se connecter pour arrêter quoi que ce soit.

Inconvénients

  • Le premier visiteur de chaque dashboard chaque jour attend environ 45 secondes. Mes utilisateurs s'en accommodent très bien.
  • Quiconque travaille tard ou le week-end subit le même démarrage à froid.
  • La suspension coupe tous les nœuds du pool. Toute personne en pleine session verra soudain une page de redémarrage : choisissez donc une heure où tout le monde est parti. À mon avis, le risque est faible et le rechargement assez rapide pour que cela en vaille la peine.

Si 45 secondes sont trop longues pour celles et ceux qui ouvrent les dashboards à la première heure, vous pouvez envoyer une requête authentifiée aux endpoints de ces applications quelques minutes avant leur arrivée. Cela a fonctionné pour moi, mais il faut configurer OAuth, ce qui ajoute de la complexité. Ne préchauffez que les quelques dashboards qui comptent, sinon vous annulez les économies réalisées sur ceux que personne ne consulte. À mes yeux, le préchauffage des dashboards n'en vaut pas la complexité (à cause du flux OAuth), mais l'option existe.

Scénarios de coûts

Hypothèses : 3 $ par crédit, 25 dashboards déployés, trois dashboards par nœud. Suspendu signifie que les nœuds tournent 12 heures par jour, uniquement en semaine (22 jours par mois). C'est une borne haute, car un dashboard ouvert à 14 h n'est pas facturé pour la matinée.

Tableau du coût mensuel de 25 dashboards Streamlit avec suspension nocturne du compute pool, selon le nombre de dashboards ouverts

Comparez maintenant avec 25 dashboards qui tournent en continu. Avec le temps, chaque dashboard finit par être ouvert : vous payez donc 9 nœuds, tout le mois, soit 2 138 $. Si seuls 4 dashboards sont utilisés un jour typique, la suspension nocturne vous fait passer de 2 138 $ à 174 $.

Remplissez vos nœuds. Le dashboard numéro 4 coûte autant que le numéro 6 : si vous payez un deuxième nœud, remplissez-le.

Seuil de rentabilité face à Power BI

Power BI Pro est facturé par utilisateur. Au tarif public de 14 $ par utilisateur et par mois, chaque personne qui consulte un rapport a besoin d'une licence. Streamlit dans Snowflake est facturé par nœud. Pas de frais de plateforme, pas de frais par licence.

Partez donc de vos effectifs. Voici ce que coûte Power BI à 24 $ par utilisateur et par mois (Premium), et combien de dashboards le même budget fait tourner dans Snowflake avec la suspension nocturne :

Tableau comparant le coût de Power BI à 24 dollars par utilisateur avec le nombre de dashboards que Snowflake fait tourner pour le même budget

Lisez-le ainsi : si 4 dashboards sont utilisés par 50 personnes, Power BI Pro coûte environ 700 $ par mois et Snowflake 174 $. Si 25 dashboards sont utilisés par 40 personnes, Power BI coûte environ 560 $ et Snowflake 784 $, ou 2 138 $ sans suspension. Plus il y a de personnes par dashboard, plus Snowflake est avantageux. Plus il y a de dashboards par personne, plus Power BI est avantageux.

Deux réserves honnêtes :

  • Streamlit, c'est du code. Power BI, du glisser-déposer. Si vos analystes ne savent pas écrire du Python (et ne sont pas pleinement outillés par l'IA), les économies d'hébergement risquent de ne pas peser lourd.
  • Power BI Premium Per User coûte 24 $ par utilisateur et par mois, et la capacité Fabric supprime la licence lecteur pour les grands déploiements, mais elle démarre autour de 5 000 $ par mois. Vérifiez les tarifs en vigueur avant de monter votre business case.

À retenir

  1. Utilisez le container runtime pour les dashboards ouverts fréquemment. C'est mon nouveau choix par défaut : je préfère son coût horaire plus bas et je ne veux pas le mélanger avec mon usage de warehouses. J'apprécie aussi l'expérience utilisateur avec moins de démarrages à froid, comparé à des warehouses suspendus de manière agressive.
  2. Trois dashboards par nœud. Le quatrième démarre un nouveau nœud.
  3. Le plus petit nœud coûte environ 0,11 crédit par heure, 2,64 par jour, soit environ 238 $ par mois à 3 $ le crédit. Oui, le plus petit nœud peut héberger vos dashboards sans problème. La taille des données n'a pas d'importance ; les requêtes s'exécutent toujours sur des virtual warehouses.
  4. Ne comptez pas sur l'auto-suspension à trois jours. Suspendez le pool via une tâche planifiée.
  5. Après une suspension, seuls les dashboards ouverts sont à nouveau facturés. Vous payez ce qui est utilisé, pas ce qui est déployé.
  6. Prévoyez un démarrage à froid de 45 secondes et prévenez vos utilisateurs.
  7. Au-delà de quelques dizaines d'utilisateurs, la facturation par nœud bat la facturation par licence.

Si vous souhaitez de l'aide pour dimensionner une configuration Streamlit ou comprendre où partent vos crédits Snowflake, nous serions ravis d'échanger avec vous. Contactez-nous !