Einrichten der von einer App verwalteten Container und Dienste¶
Unter diesem Thema wird beschrieben, wie Sie die Container und Dienste für eine Snowflake Native App with Snowpark Container Services einrichten.
Image-Repository erstellen¶
Um Container mit einer Snowflake Native App zu verwalten, müssen Anbieter ein Image-Repository im Anbieterkonto erstellen, um die von der App benötigten Images zu speichern.
Das Image-Repository muss in einer Datenbank und einem Schema vorhanden sein. Das folgende Beispiel zeigt, wie Sie mit dem CREATE IMAGE REPOSITORY-Befehl ein Image-Repository erstellen.
CREATE DATABASE provider_db;
CREATE SCHEMA provider_schema;
CREATE IMAGE REPOSITORY provider_repo;
Bemerkung
Snowflake empfiehlt Anbietern, das Image-Repository außerhalb des Anwendungspakets zu erstellen.
Wenn das Anwendungspaket an ein Freigabeangebot angehängt ist und das Angebot für die Verwendung der Cloud-übergreifenden automatischen Ausführung konfiguriert ist, würde ein Image-Repository innerhalb des Anwendungspakets repliziert werden und zusätzliche Kosten verursachen.
Die in dieses Repository hochgeladenen Images sind für das Anwendungspaket zugänglich, wenn eine Versionsdefinition hinzugefügt wird. Die App kann nur auf die Images in diesem Repository zugreifen, die in der Manifest-Datei des Anwendungspakets angegeben sind.
Die folgenden Aspekte gelten für Image-Repositorys im Zusammenhang mit einer App mit Containern:
Externe Image-Repositorys werden nicht unterstützt. Image-Repositorys, die sich außerhalb von Snowflake befinden, können von keinem Dienst innerhalb des Containers referenziert werden. Dies gilt für Dienste, die innerhalb oder außerhalb der App existieren.
Anbieter können ein Image-Repository nicht direkt für eine App freigeben. Anbieter können zum Beispiel nicht den Befehl GRANT TO SHARE IN APPLICATION PACKAGE verwenden.
Anbieter können mehrere Container-Images in einem Image-Repository speichern. Jedoch sind Container-Images, die nicht explizit in der Manifest-Datei aufgeführt sind, für die App im Verbraucherkonto nicht zugänglich.
Wenn ein Anbieter eine Versionsdefinition zu einem Anwendungspaket hinzufügt, können die in dieser Version enthaltenen Container-Images nicht geändert werden. Die Images für diese Version sind unveränderlich und bleiben während des gesamten Lebenszyklus der Version erhalten. Um die Container innerhalb einer App zu ändern, müssen Anbieter eine neue Version verwenden.
Container-Images in das Image-Repository hochladen¶
Nach dem Erstellen eines Image-Repositorys verwenden Anbieter Docker-Befehle, um die von der App benötigten Container-Images in das Image-Repository hochzuladen. Welche Befehle im Einzelnen erforderlich sind, hängt von der Umgebung des Anbieters ab. Der allgemeine Workflow ist wie folgt:
docker login
docker build
docker tag
docker push
Im Folgenden sehen Sie ein typisches Beispiel für die Verwendung dieser Befehle:
$ docker login org-provider-account.registry.snowflakecomputing.com
$ docker build --rm --platform linux/amd64 -t service:1.0 .
$ docker tag service:1.0 org-provider-account.registry.snowflakecomputing.com/provider_db/provider_schema/provider_repo/service:1.0
$ docker push org-provider-account.registry.snowflakecomputing.comprovider_db/provider_schema/provider_repo/service:1.0
Dienstspezifikationsdatei erstellen¶
Die Dienstspezifikation ist eine YAML-Datei, die Snowpark Container Services zur Konfiguration und Ausführung eines Dienstes verwendet. Weitere allgemeine Informationen zur Syntax dieser Datei finden Sie unter Referenz der Dienstspezifikation.
Das folgende Beispiel zeigt die Felder in der Dienstspezifikationsdatei, die von einer App mit Containern benötigt werden.
spec:
containers:
- image: /provider_db/provider_schema/provider_repo/server:prod
name: server
...
- image: /provider_db/provider_schema/provider_repo/web:1.0
name: web
...
endpoints:
- name: invoke
port: 8000
- name: ui
port: 5000
public: true
Bemerkung
Die Dienstspezifikationsdatei referenziert Container-Images unter Verwendung der ursprünglichen Namen für Datenbank, Schema und Image-Repository. Während der Installation oder eines Upgrades wird ein Dienst aus der Dienstspezifikationsdatei erstellt.
Explizite Registry-URLs, wie zum Beispiel org-provider.registry.snowflakecomputing.com/db/schema/repo/img:123
, werden nicht unterstützt und führen zu einem Fehler. Der Speicherort des Images muss immer ein vollqualifizierter Name im Anbieterkonto sein.
Verwenden Sie eine Spezifikationsvorlage¶
Anbieter können auch eine Spezifikationsvorlage innerhalb der Dienstpezifikationsdateien verwenden, wie im folgenden Beispiel gezeigt:
spec:
containers:
- image: /provider_db/provider_schema/provider_repo/server:prod
name: {{ container_name }}
endpoints:
- name: invoke
port: {{ invoke_port_value }}
- name: ui
port: 5000
public: true