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.
- Mettre à niveau l’application vers Streamlit 1.50+
Assurez-vous que votre application et toutes les dépendances sont compatibles avec Streamlit 1.50+.
- 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.
- 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.
Gestion des dépendances¶
- Remplacer
environment.ymlparpyproject.tomlourequirements.txt Si vous devez verrouiller des versions de dépendances ou spécifier des dépendances supplémentaires, vous devez ajouter un fichier
pyproject.tomlourequirements.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.- 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.
Modifications du code¶
- Remplacer
get_active_session()parst.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 utiliserst.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_resourceoust.cache_datapour 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
_snowflakepar des équivalents Python natifs _snowflakeest 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.tomletconfig.toml.
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.
Connectez-vous à Snowsight.
Dans le menu de navigation, sélectionnez Projects » Streamlit, puis sélectionnez votre application.
Dans le coin supérieur droit, sélectionnez le menu vertical indiqué par une ellipse
, puis sélectionnez App settings.Pour les Python environment, sélectionnez Run on container.
Dans le menu déroulant Compute pool, sélectionnez votre pool de calcul.
Dans le menu déroulant Query warehouse, sélectionnez votre entrepôt de requêtes.
Pour enregistrer vos modifications et fermer la boîte de dialogue, sélectionnez Save.
ALTER STREAMLIT my_app COMPUTE_POOL = my_compute_pool QUERY_WAREHOUSE = my_warehouse RUNTIME_NAME = SYSTEM$ST_CONTAINER_RUNTIME_PY3_11;
Votre application prendra quelques minutes pour redémarrer et construire son nouveau conteneur.
Voir : Environnements d’exécution pour les applications Streamlit