Benutzer-Frontend mit Streamlit zu einer App hinzufügen¶
Unter diesem Thema wird beschrieben, wie Sie eine Streamlit-App in eine Snowflake Native App einbinden.
Allgemeine Informationen zu Streamlit und das Snowflake Native App Framework¶
Streamlit ist eine Open-Source-Python-Bibliothek, mit der sich kundenspezifische Webanwendungen für maschinelles Lernen und Data Science leicht erstellen und freigeben lassen. Mit Streamlit können Sie schnell leistungsstarke Datenanwendungen erstellen und einsetzen.
Informationen zur Open-Source-Bibliothek finden Sie in der Streamlit Library-Dokumentation.
Innerhalb des Snowflake Native App Framework können Sie mit Streamlit Folgendes tun:
Erstellen einer Frontend-Webanwendung, mit der Verbraucher die von Ihrer Snowflake Native App bereitgestellten Daten visualisieren können.
Erstellen einer Benutzeroberfläche, über die Verbraucher innerhalb ihres Kontos Berechtigungen erteilen und Referenzen auf Objekte erstellen können, die von der Snowflake Native App verwendet werden.
Weitere Informationen dazu finden Sie unter Zugriff auf Objekte in einem Verbraucherkonto anfordern.
Bemerkung
Weitere Informationen zu den unterstützten Streamlit-Features finden Sie unter Nicht unterstützte Streamlit-Features.
Unterstützte Versionen der Streamlit-Bibliothek¶
Das Snowflake Native App Framework unterstützt v1.22.0 der Streamlit-Bibliothek. Unterstützung für spätere Versionen der Streamlit-Bibliothek wird nach und nach hinzugefügt.
Unterstützte externe Pakete¶
Standardmäßig enthält eine Streamlit-App, die in einer Snowflake Native App eingebunden ist, die Pakete python
, streamlit
und snowflake-snowpark-python
, die in der Verbraucherumgebung vorinstalliert sind. Die Verbraucherumgebung hat auch Zugriff auf die von diesen Paketen benötigten Abhängigkeiten.
Nicht unterstützte Streamlit-Features¶
Die folgenden Streamlit-Features werden derzeit nicht unterstützt, wenn Streamlit in einer Snowflake Native App verwendet wird:
Kundenspezifische Komponenten werden nicht unterstützt.
Die Verwendung von AWS PrivateLink oder Azure PrivateLink für den Zugriff auf eine Streamlit-App wird nicht unterstützt.
-
Die Eigenschaften
page_title
undpage_icon
des Befehls st.set_page_config werden nicht unterstützt. Kundenspezifische Komponenten, einschließlich:
Die folgenden experimentellen Features:
Unsicheres HTML mit
unsafe_allow_html=True
wird in st.markdown nicht unterstützt.Netzwerkzugriff über das Internet
Anker-Links
Workflow zum Erstellen und Testen einer Streamlit-App¶
Der folgende Workflow beschreibt einen typischen Workflow für das Einbinden einer Streamlit-App in ein Anwendungspaket. Je nach den Anforderungen Ihrer App kann dies ein iterativer Prozess sein.
Entwickeln Sie Ihre native App.
Dazu gehört das Hinzufügen der Dateninhalte, auf die die Verbraucher über Streamlit zugreifen sollen. Weitere Informationen dazu finden Sie unter Snowflake Native App Framework-Workflow.
Lesen Sie die folgenden Abschnitte, um sich über die unterstützten Versionen der Streamlit-Bibliothek und nicht unterstützte Features zu informieren:
Entwickeln Sie eine Streamlit-App.
Informationen zur Streamlit-Open-Source-Bibliothek finden Sie in der Streamlit Library-Dokumentation.
Erstellen Sie eine lokale Verzeichnisstruktur für die Streamlit-App.
Empfehlungen dafür, wie Sie Ihre Streamlit-Dateien innerhalb der Struktur Ihrer App organisieren können, finden Sie unter Beispiel einer Verzeichnisstruktur für eine Streamlit-App.
Fügen Sie der Datei
manifest.yml
einen Eintrag für die Streamlit-App hinzu.Um eine Streamlit-App einzubinden, müssen Sie der
manifest.yml
-Datei den Namen der Standard-Streamlit-Datei hinzufügen. Weitere Informationen dazu finden Sie unter Hinzufügen einer Streamlit-App zur Manifest-Datei.Fügen Sie eine CREATE STREAMLIT-Anweisung in das Setup-Skript ein.
Wenn Sie den Befehl CREATE APPLICATION ausführen, führt das Setup-Skript die Anweisung CREATE STREAMLIT aus, um ein Streamlit-Objekt zu erstellen. Dieses Objekt enthält das Schema und die Python-Dateien, die von der Streamlit-App benötigt werden.
Konfigurieren Sie die Datei
environment.yml
, um zusätzliche Bibliotheken in Ihre Streamlit-App einzubinden.Weitere Informationen dazu finden Sie unter Zusätzliche Pakete zu einer Streamlit-App hinzufügen.
Laden Sie die Streamlit-Dateien, die
environment.yml
-Datei, das Setup-Skript und diemanifest.yml
-Dateien in einen benannten Stagingbereich hoch. Um Streamlit-Codedateien in ein Anwendungspaket einzubinden, müssen die Dateien in einen benannten Stagingbereich hochgeladen werden.Testen Sie das Anwendungspaket.
Nachdem Sie die für das Anwendungspaket und die Streamlit-App erforderlichen Dateien erstellt haben, erstellen Sie ein Anwendungsobjekt, um das Setup-Skript und die Datei
manifest.yml
zu testen.Weitere Informationen dazu finden Sie unter Anwendungspaket testen, das die Streamlit-App enthält.
Zeigen Sie die Streamlit-App in Snowsight an.
Um die Streamlit-App zu testen, zeigen Sie die App in Snowsight an. Siehe Streamlit-App in Snowsight testen.
Beispiel einer Verzeichnisstruktur für eine Streamlit-App¶
Wie bei anderen Python-Modulen müssen Sie, um eine Streamlit-App zu einem Anwendungspaket hinzuzufügen, Ihre Streamlit-Codedateien in einen benannten Stagingbereich hochladen. Weitere Informationen zum Hochladen von Dateien in einen Stagingbereich finden Sie unter PUT.
Um mehrere Versionen einer Snowflake Native App zu integrieren, müssen Sie Ihre Streamlit-Apps und zugehörige Anwendungsdateien mithilfe einer Verzeichnisstruktur wie der folgenden verwalten:
@test.schema1.stage1:
└── /
├── manifest.yml
├── readme.md
├── scripts/setup_script.sql
└── code_artifacts/
└── streamlit/
└── environment.yml
└── streamlit_app.py
Beachten Sie, dass die von Ihnen erstellte Verzeichnisstruktur von den Anforderungen Ihrer App und der Entwicklungsumgebung abhängt.
Bemerkung
Die Datei environment.yml
muss sich auf derselben Ebene befinden wie die Hauptdatei Ihrer Streamlit-App.
Weitere Informationen zu relativen Pfadangaben finden Sie unter Externen Codedateien referenzieren.
Hinzufügen einer Streamlit-App zur Manifest-Datei¶
Um eine Streamlit-Datei in ein Anwendungspaket einzubinden, fügen Sie der manifest.yml
-Datei folgende Einträge hinzu:
artifacts:
...
extension_code: true
default_streamlit: app_schema.streamlit_app_na
...
Der Eintrag extension_code: true
ist erforderlich, um beliebigen Erweiterungscode in Ihrer App zu aktivieren.
Der Eintrag default_streamlit: app_schema.streamlit_app_na
gibt den Speicherort des Schemas an, das Ihre Streamlit-App enthält.
Streamlit-Objekt im Setup-Skript erstellen¶
Das folgende Beispiel zeigt, wie CREATE STREAMLIT innerhalb des Setup-Skripts einer App verwendet wird.
CREATE OR REPLACE STREAMLIT app_schema.my_test_app_na
FROM '/code_artifacts/streamlit'
MAIN_FILE = '/streamlit_app.py';
GRANT USAGE ON SCHEMA APP_SCHEMA TO APPLICATION ROLE app_public;
GRANT USAGE ON STREAMLIT APP_SCHEMA.MY_TEST_APP_NA TO APPLICATION ROLE app_public;
In diesem Beispiel wird ein Streamlit-Objekt innerhalb eines Schemas namens app_schema
erstellt. Der Befehl CREATE STREAMLIT verwendet die in der MAIN_FILE-Klausel angegebene Streamlit-App. Der Speicherort des Verzeichnisses wird durch den Wert der FROM-Klausel angegeben.
Informationen zum Erstellen der Verzeichnisstruktur für eine Streamlit-App innerhalb eines Anwendungspakets finden Sie unter Beispiel einer Verzeichnisstruktur für eine Streamlit-App.
In diesem Beispiel werden einer Anwendungsrolle auch die erforderlichen Berechtigungen für das Schema und das Streamlit-Objekt erteilt.
Zusätzliche Pakete zu einer Streamlit-App hinzufügen¶
Verwenden Sie die Datei environment.yml
, um zusätzliche Python-Pakete zu einer Streamlit-App hinzuzufügen. Um beispielsweise die Bibliothek scikit-learn
zu einer Streamlit-App hinzuzufügen, fügen Sie der environment.yml
-Datei Folgendes hinzu:
name: sf_env
channels:
- snowflake
dependencies:
- scikit-learn
Die Eigenschaften name
und channels
sind beide erforderlich.
Außerdem wird der Schlüssel - snowflake
unter der Eigenschaft channels
benötigt. Dies gibt den Snowflake-Anaconda-Kanal an.
Bemerkung
Sie können nur Pakete installieren, die im Snowflake Anaconda-Kanal aufgeführt sind. Snowflake unterstützt keine externen Anaconda-Kanäle in Streamlit.
Anwendungspaket testen, das die Streamlit-App enthält¶
Um das Anwendungspaket, das die Streamlit-App enthält, zu testen, erstellen Sie ein Anwendungsobjekt, das die Dateien in einem benannten Stagingbereich verwendet, indem Sie den Befehl CREATE APPLICATION wie im folgenden Beispiel ausführen:
CREATE APPLICATION hello_snowflake_app FROM APPLICATION PACKAGE hello_snowflake_package USING '@hello_snowflake_code.core.hello_snowflake_stage';
Je nachdem, was Sie testen möchten, können Sie das Anwendungsobjekt mit anderen Formen von CREATE APPLICATION erstellen. Beispielsweise können Sie die Streamlit-App im Rahmen einer Version oder eines Upgrades testen. Siehe Anwendungsobjekt erstellen.
Streamlit-App in Snowsight testen¶
Um die Streamlit-App zu testen, zeigen Sie die App wie folgt in Snowsight an:
Melden Sie sich bei Snowsight an.
Klicken Sie in der linken Navigationsleiste auf Streamlit.
Wählen Sie die Streamlit-App aus, die Sie anzeigen möchten.
Die primäre Streamlit-App wird in Snowsight geöffnet.
Optional: Wenn Sie eine mehrseitige Streamlit-App anzeigen, wählen Sie eine Registerkarte, um weitere Seiten anzuzeigen.
Problembehandlung bei einer Streamlit-App im Snowflake Native App Framework¶
Wenn die App einen unbekannten Fehler anzeigt, müssen Sie sicherstellen, dass Sie die in den folgenden Abschnitten beschriebenen Lösungen getestet haben.
Nutzungsbedingungen anerkennen¶
Bevor Sie Streamlit und die von Anaconda bereitgestellten Pakete in Snowflake verwenden können, müssen Sie die Bedingungen für externe Angebote anerkennen. Weitere Informationen dazu finden Sie unter Verwenden von Drittanbieterpaketen aus Anaconda.
Firewall-Zulassungsliste¶
Jede Streamlit-Anwendung verwendet eine eigene Subdomäne. Wenn Sie strenge Firewalls verwenden, fügen Sie *.snowflake.app zu Ihrer Firewall-Zulassungsliste hinzu. Wenn Sie diesen Eintrag zu Ihrer Zulassungsliste hinzufügen, können Ihre Apps ohne Einschränkungen mit Snowflake-Servern kommunizieren.