Migration entre des environnements d’exécution

Vous pouvez migrer une application Streamlit entre les environnements d’exécution d’entrepôt et de conteneur en mettant à jour les propriétés RUNTIME_NAME et COMPUTE_POOL de l’application. Cependant, certaines fonctionnalités ne sont prises en charge que dans un seul type d’environnement d’exécution, de sorte qu’il existe certaines considérations à prendre en compte lors de la migration d’une application entre des environnements d’exécution.

Cette page fournit une liste de contrôle pour migrer entre un environnement d’exécution d’entrepôt et de conteneur. Chaque élément fournit un bref résumé et un lien vers des informations détaillées si nécessaire.

Conditions préalables

Avant de commencer, mettez en place votre application d’exécution d’entrepôt pour préparer la migration.

En option : sauvegardez le code de votre application

Si le code source de votre application n’est pas déjà stocké dans un système de contrôle de version, un dépôt externe ou un répertoire local, sauvegardez-le pour éviter toute perte potentielle de données pendant la migration.

Veiller à ce que l’application n’a pas été créée avec ROOT_LOCATION

Les applications créées avec le paramètre ROOT_LOCATION peuvent uniquement utiliser les environnements d’exécution d’entrepôt. Si votre application a été créée avec ROOT_LOCATION, mettez-la à niveau pour utiliser le paramètre FROM.

Voir : Comprendre les différents types d’objets Streamlit

Mettre à niveau l’application vers Streamlit 1.50+

Assurez-vous que votre application et toutes les dépendances sont compatibles avec Streamlit 1.50+.

Voir : Gérer les dépendances de votre application Streamlit

Mettre à jour l’application uniquement avec Python 3.11

Les environnements d’exécution de conteneur prennent uniquement en charge Python 3.11, tandis que les environnements d’exécution d’entrepôt prennent en charge Python 3.9, 3.10 et 3.11. Assurez-vous que votre application et toutes les dépendances sont compatibles avec Python 3.11.

Voir : Gérer les dépendances de votre application Streamlit

En option : installez la CLI Snowflake 3.14.0+ en local

Si vous déployez des applications à l’aide de la CLI Snowflake, vous avez besoin de la version 3.14.0 ou ultérieure pour prendre en charge la syntaxe de déploiement de l’environnement d’exécution de conteneur. Vérifier la version avec snow --version. Vous pouvez également utiliser les versions 3.12.0 - 3.13.1 si vous utilisez l’indicateur --experimental.

Voir : Créer et déployer des applications Streamlit à l’aide de Snowflake CLI

Ressources et autorisations

Votre application peut continuer à utiliser son entrepôt de requêtes existant, mais vous devez configurer un pool de calcul pour l’environnement d’exécution de conteneur.

Créer et accorder l’accès à un pool de calcul

Le propriétaire de l’application a besoin des privilèges USAGE sur le pool de calcul dans lequel se trouvera l’environnement d’exécution de conteneur. Les visualiseurs de l’application n’ont pas besoin d’autorisations de pool de calcul.

Voir : Privilèges requis pour créer et utiliser une application Streamlit

Créer et accorder l’accès à une intégration d’accès externe

Les environnements d’exécution des conteneurs sont livrés avec un ensemble minimal de paquets préinstallés. Si votre application nécessite des paquets supplémentaires ou des versions différentes des paquets préinstallés, vous devez utiliser un index de paquets externe comme PyPI. Pour permettre à votre application d’accéder à un index externe de paquets, vous devez créer une intégration d’accès externe (EAI) et accorder les privilèges USAGE sur l’EAI au propriétaire de l’application.

Voir : Accès au réseau externe dans Streamlit in Snowflake

Gestion des dépendances

Remplacer environment.yml par pyproject.toml ou requirements.txt

Si vous devez verrouiller des versions de dépendances ou spécifier des dépendances supplémentaires, vous devez ajouter un fichier pyproject.toml ou requirements.txt à la racine de votre répertoire de projet. Les paquets peuvent avoir des noms différents entre Conda et PyPI, par conséquent, utilisez les noms de paquets corrects pour votre dépôt d’artefacts.

Voir : Gérer les dépendances de votre application Streamlit

Modifier l’application pour définir ses intégrations d’accès externes

Si vos dépendances incluent des spécificateurs de version, ou si vous installez des paquets supplémentaires, vous devez attribuer une intégration d’accès externe à votre application. Cela afin qu’elle puisse accéder à l’index des paquets spécifié dans votre fichier de dépendances. PyPI est l’index des paquets par défaut.

Voir : Gérer les dépendances de votre application Streamlit

Modifications du code

Remplacer get_active_session() par st.connection("snowflake").session()

Lorsque vous utilisez un environnement d’exécution de conteneur, le serveur Streamlit gère plusieurs visualiseurs simultanément. get_active_session() n’est pas « thread-safe », vous devez donc utiliser st.connection("snowflake") pour gérer votre connexion à la place.

Voir : Gérer les secrets et configurer votre application Streamlit

Vérifier le code et appliquer la mise en cache

Étant donné que les environnements d’exécution des conteneurs partagent les ressources de disque, de calcul et de mémoire entre les sessions des visualiseurs, vous devez utiliser st.cache_resource ou st.cache_data pour mettre en cache des calculs ou des données coûteux qui ne changent pas fréquemment.

Consultez : Comprendre l’architecture client-serveur de Streamlit et Vue d’ensemble de la mise en cache dans la documentation Streamlit.

Garantir la thread-safety

Lorsque vous utilisez un environnement d’exécution de conteneur, le code de votre application doit être « thread-safe » pour gérer plusieurs visualiseurs simultanément. Bien que chaque visualiseur obtienne une instance unique du script de l’application, vous devez examiner tout code importé pour l’état partagé ou les variables globales qui pourraient conduire à des conditions de course entre les visualiseurs ou à un comportement incohérent. Si vous introduisez de nouveaux threads dans une application Streamlit, examinez l’architecture de Streamlit et n’utilisez pas les commandes Streamlit dans vos threads personnalisés.

Consultez : Multithread dans Streamlit dans la documentation Streamlit.

Remplacer l’utilisation de _snowflake par des équivalents Python natifs

_snowflake est un module privé qui n’est disponible que dans les fonctions définies par l’utilisateur (UDFs) et les procédures stockées. Les environnements d’exécution d’entrepôt héritent de l’accès à _snowflake, mais pas les environnements d’exécution de conteneur. Si votre application utilise _snowflake, remplacez-le par des équivalents Python natifs, tels que le connecteur Python de Snowflake. Si nécessaire, utilisez des procédures stockées pour accéder aux secrets.

Voir : Gérer les secrets et configurer votre application Streamlit

Mettre à jour les chemins d’accès aux fichiers et l’organisation

La racine de votre emplacement source est le répertoire de travail de votre application. Pour la plupart des bibliothèques Python, votre application devra utiliser des chemins relatifs à partir de la racine de votre emplacement source. Cependant, certaines commandes Streamlit nécessitent des chemins relatifs vers le fichier de point d’entrée. Si votre fichier de point d’entrée se trouve dans un sous-répertoire, vérifiez les chemins de votre code en conséquence.

Vérifiez les emplacements de secrets.toml et config.toml.

Voir : Organiser les fichiers d’application Streamlit

Modifications de la configuration de l’application

Modifier l’application pour définir son pool de calcul, son entrepôt de requêtes et son environnement d’exécution

Lorsque vous êtes prêt à changer le type de l’environnement d’exécution de votre application, vous pouvez utiliser Snowsight ou SQL.

  1. Connectez-vous à Snowsight.

  2. Dans le menu de navigation, sélectionnez Projects » Streamlit, puis sélectionnez votre application.

  3. Dans le coin supérieur droit, sélectionnez le menu vertical indiqué par une ellipse Plus d'actions pour la feuille de calcul, puis sélectionnez App settings.

  4. Pour les Python environment, sélectionnez Run on container.

  5. Dans le menu déroulant Compute pool, sélectionnez votre pool de calcul.

  6. Dans le menu déroulant Query warehouse, sélectionnez votre entrepôt de requêtes.

  7. Pour enregistrer vos modifications et fermer la boîte de dialogue, sélectionnez Save.

Votre application prendra quelques minutes pour redémarrer et construire son nouveau conteneur.

Voir : Environnements d’exécution pour les applications Streamlit