Verwalten von Snowpark Container Services mit Python¶
Sie können Python verwenden, um Snowpark Container Services zu verwalten, einen vollständig verwalteten Containerdienst, über den Sie containerisierte Anwendungen bereitstellen, verwalten und skalieren können. Eine Übersicht zu Snowpark Container Services finden Sie unter Allgemeine Informationen zu Snowpark Container Services.
Mit der Snowflake-Python-API können Sie Computepools, Image-Repositorys und Dienste verwalten.
Die Beispiele unter diesem Thema gehen davon aus, dass Sie Code hinzugefügt haben, um eine Verbindung zu Snowflake herzustellen und ein Root
-Objekt zu erstellen, von dem aus Sie die Snowflake-Python-API verwenden können. Weitere Informationen dazu finden Sie unter Verbinden mit Snowflake über die Snowflake-Python-API.
Der Code im folgenden Beispiel verwendet die in einer Konfigurationsdatei definierten Verbindungsparameter, um eine Verbindung zu Snowflake herzustellen. Unter Verwendung des resultierenden Session
-Objekts erstellt der Code ein Root
-Objekt, das die Typen und Methoden der API verwendet.
from snowflake.core import Root
from snowflake.snowpark import Session
session = Session.builder.config("connection_name", "myconnection").create()
root = Root(session)
Verwalten von Computepools¶
Sie können Computepools verwalten, bei denen es sich um Sammlungen von VM-Knoten (virtuelle Maschinen) handelt, auf denen Snowflake Ihre Snowpark Container Services-Jobs und -Dienste ausführt.
Die Snowflake-Python-API repräsentiert Computepools mit zwei verschiedenen Typen:
ComputePool
: Zeigt die Eigenschaften eines Computepools an, z. B. sein Warehouse, die maximale und minimale Anzahl von Knoten sowie die Einstellungen für das automatische Anhalten und Fortsetzen.ComputePoolResource
: Stellt Methoden für das Ausführen von Aktionen auf Computepools zur Verfügung, wie z. B. das Abrufen eines entsprechendenComputePool
-Objekts und das Anhalten, Fortsetzen und Beenden von Pools.
Weitere Informationen zu Computepools finden Sie unter Snowpark Container Services: Verwenden von Computepools.
Erstellen von Computepools¶
Sie können einen Computepool erstellen, indem Sie die Methode ComputePoolCollection.create
aufrufen und ein ComputePool
-Objekt übergeben, das den zu erstellenden Computepool repräsentiert.
Um einen Computepool aus einer in einem Stagingbereich gespeicherten Spezifikationsdatei zu erstellen, erstellen Sie zunächst ein ComputePool
-Objekt, das Pool-Eigenschaften wie die folgenden angibt:
Name des Computepools
Maximale und minimale Anzahl von Knoten, aus denen der Pool besteht
Name der Instanz-Familie, die den Maschinentyp angibt, der für die Knoten im Pool bereitgestellt werden soll
Ob der Pool automatisch fortgesetzt werden soll, wenn ein Dienst oder Job an ihn übermittelt wird
Der Code im folgenden Beispiel erstellt ein ComputePool
-Objekt, das einen Pool namens my_compute_pool
repräsentiert. Der Code erstellt dann den Computepool, indem das ComputePool
-Objekt an die Methode ComputePoolCollection.create
übergeben und so der Pool erstellt wird.
from snowflake.core import Root
from snowflake.core.compute_pool import ComputePool
compute_pool = ComputePool("my_compute_pool", min_node=1, max_node=2, instance_family="STANDARD_1", auto_resume=False)
root.compute_pools.create(compute_pool)
Abrufen von Details zum Computepool¶
Sie können Informationen zu einem Computepool erhalten, indem Sie die Methode ComputePoolResource.fetch
aufrufen, die ein ComputePool
-Objekt zurückgibt.
Der Code im folgenden Beispiel ruft Informationen zu einem Computepool namens my_compute_pool
ab.
from snowflake.core import Root
from snowflake.core.compute_pool import ComputePool
compute_pool = root.compute_pools["my_compute_pool"].fetch()
Erstellen und Aktualisieren von Computepools¶
Sie können die Merkmale eines vorhandenen Computepools aktualisieren, indem Sie die Eigenschaften eines ComputePool
-Objekts festlegen, das einen vorhandenen Pool repräsentiert, und dann das aktualisierte Objekt mit der Methode create_or_update
, die ein ComputePoolResource
-Objekt zurückgibt, an Snowflake übergeben.
Sie können auch ein ComputePool
-Objekt übergeben, das einen neuen Pool beschreibt, wenn Sie den Pool erstellen möchten.
Der Code im folgenden Beispiel legt die maximal zulässige Anzahl von Knoten des Computepools my_compute_pool
fest und aktualisiert dann den Pool in Snowflake.
from snowflake.core import Root
from snowflake.core.compute_pool import ComputePool
compute_pool = root.compute_pools["my_compute_pool"].fetch()
compute_pool.max_node = 3
compute_pool_res = root.compute_pools.create_or_update(compute_pool)
Auflisten von Computepools¶
Sie können Computepools mit der Methode iter
auflisten. Diese Methode gibt einen PagedIter
-Iterator zurück.
Der Code im folgenden Beispiel listet alle Computepools auf, deren Name mit „abc“ beginnen, und gibt den Namen jedes einzelnen Pools aus.
from snowflake.core import Root
compute_pools = root.compute_pools.iter(like="abc%")
for compute_pool in compute_pools:
print(compute_pool.name)
Ausführen von Computepool-Operationen¶
Mit einem ComputePoolResource
-Objekt können Sie allgemeine Computepool-Operationen wie das Anhalten, Fortsetzen und Beenden von Pools ausführen. Sie können ein ComputePoolResource
-Objekt mit der Methode ComputePool.fetch
erhalten.
Der Code im folgenden Beispiel hält den Computepool my_compute_pool
an, setzt ihn fort und beendet ihn. Mit der Methode Root.compute_pools
wird ein Objekt ComputePool
erstellt, das den Computepool repräsentiert. Über das ComputePool
-Objekt wird ein ComputePoolResource
-Objekt abgerufen, mit dem Computepool-Operationen ausgeführt werden können.
from snowflake.core import Root
from snowflake.core.compute_pool import ComputePool
compute_pool = root.compute_pools["my_compute_pool"]
compute_pool_res = compute_pool.fetch()
compute_pool_res.suspend()
compute_pool_res.resume()
compute_pool_res.stop_all_services()
Verwalten von Image-Repositorys¶
Sie können Image-Repositorys verwalten, in denen Images für Anwendungen gespeichert werden, die Sie in Containerdiensten ausführen.
Ein Image-Repository ist ein Objekt auf Schemaebene. Wenn Sie eine Tabelle erstellen oder auf diese verweisen, tun Sie dies im Kontext des zugehörigen Schemas.
Die Snowflake-Python-API repräsentiert Image-Repositorys mit zwei verschiedenen Typen:
ImageRepository
: Zeigt die Eigenschaften eines Image-Repository wie Datenbank- und Schemanamen, Repository-URL und Eigentümer an.ImageRepositoryResource
: Stellt Methoden zur Verfügung, mit denen Sie ein entsprechendesImageRepository
-Objekt abrufen und die Image-Repository-Ressource löschen können.
Weitere Informationen zu Image-Repositorys finden Sie unter Snowpark Container Services: Verwenden von Image-Registry und Image-Repository.
Erstellen von Image-Repositorys¶
Um ein Image-Repository aus einer in einem Stagingbereich gespeicherten Spezifikationsdatei zu erstellen, erstellen Sie zunächst ein ImageRepository
-Objekt, das Repository-Eigenschaften wie die folgenden angibt:
Der Code im folgenden Beispiel erstellt ein ImageRepository
-Objekt, das ein Repository namens my_repo
repräsentiert. Der Code erstellt dann das Image-Repository, indem das ImageRepository
-Objekt an die Methode ImageRepositoryCollection.create
übergeben und so das Image-Repository in der Datenbank my_db
und dem Schema my_schema
erstellt wird.
from snowflake.core import Root
from snowflake.core.image_repository import ImageRepository
my_repo = ImageRepository("my_repo")
root.databases["my_db"].schemas["my_schema"].image_repositories.create(my_repo)
Abrufen von Details zu Image-Repositorys¶
Sie können Informationen zu einem Image-Repository abrufen, indem Sie die Methode ImageRepositoryResource.fetch
aufrufen, die ein ImageRepository
-Objekt zurückgibt.
Der Code im folgenden Beispiel ruft ein ImageRepository
-Objekt ab, das das Image-Repository my_repo
repräsentiert, und gibt dann den Namen des Eigentümers des Repositorys aus.
from snowflake.core import Root
from snowflake.core.image_repository import ImageRepository
my_repo_res = root.databases["my_db"].schemas["my_schema"].image_repositories["my_repo"]
my_repo = my_repo_res.fetch()
print(my_repo.owner)
Auflisten von Image-Repositorys¶
Sie können die Image-Repositorys in einem bestimmten Schema mit der Methode iter
auflisten. Die Methode gibt einen PagedIter
-Iterator für ImageRepository
-Objekte zurück.
Der Code im folgenden Beispiel listet die Repositorys in der Datenbank my_db
und im Schema my_schema
auf und gibt den Namen jedes Repositorys aus.
from snowflake.core import Root
repo_list = root.databases["my_db"].schemas["my_schema"].image_repositories.iter()
for repo_obj in repo_list:
print(repo_obj.name)
Löschen von Image-Repositorys¶
Sie können ein Image-Repository mit der Methode ImageRepositoryResource.delete
löschen.
Der Code im folgenden Beispiel löscht das Repository my_repo
.
from snowflake.core import Root
from snowflake.core.image_repository import ImageRepository
my_repo_res = root.databases["my_db"].schemas["my_schema"].image_repositories["my_repo"]
my_repo_res.delete()
Verwalten von Diensten¶
Sie können Dienste verwalten, die Anwendungscontainer ausführen, bis Sie sie stoppen. Snowflake startet einen Dienst automatisch neu, wenn der Dienstcontainer stoppt. Auf diese Weise wird der Dienst praktisch ohne Unterbrechung ausgeführt.
Ein Dienst ist ein Objekt auf Schemaebene. Wenn Sie einen Dienst erstellen oder auf ihn verweisen, tun Sie dies im Kontext des zugehörigen Schemas.
Die Snowflake-Python-API repräsentiert Dienste mit zwei verschiedenen Typen:
Service
: Zeigt die Eigenschaften eines Dienstes an, wie z. B. seine Spezifikation, die minimale und maximale Anzahl an Instanzen sowie die Namen von Datenbank und Schema.ServiceResource
: Stellt Methoden zur Verfügung, mit denen Sie ein entsprechendesService
-Objekt abrufen, den Dienst anhalten und fortsetzen sowie seinen Status abrufen können.
Weitere Informationen zu Diensten finden Sie unter Snowpark Container Services: Verwenden von Diensten.
Erstellen von Diensten¶
Um einen Dienst zu erstellen, führen Sie die Methode services.create
aus und übergeben ein Service
-Objekt, das den zu erstellenden Dienst repräsentiert.
Sie erstellen einen Dienst aus einer Dienstspezifikationsdatei .yaml
, die in einen Stagingbereich hochgeladen wurde. Weitere Informationen zum Erstellen einer Dienstspezifikation finden Sie unter Referenz der Dienstspezifikation.
Hochladen der Spezifikation¶
Wenn Sie einen Dienst aus einer Spezifikation erstellen, die noch nicht in einen Stagingbereich hochgeladen wurde, können Sie die Spezifikation mit einem Snowpark-FileOperation-Objekt hochladen.
Der Code im folgenden Beispiel verwendet die Methode FileOperation.put
, um eine Spezifikation als Datei hochzuladen.
session.file.put("/local_location/my_service_spec.yaml", "@my_stage")
Der Code im folgenden Beispiel verwendet die Methode FileOperation.put_stream
, um eine Spezifikation als Zeichenfolge (String) hochzuladen.
service_spec_string = """
// Specification as a string.
"""
session.file.put_stream(StringIO(sepc_in_string), "@my_stage/my_service_spec.yaml")
Erstellen des Dienstes¶
Um einen Dienst aus einer in einem Stagingbereich gespeicherten Spezifikationsdatei zu erstellen, erstellen Sie zunächst ein Service
-Objekt, das Diensteigenschaften wie die folgenden angibt:
Name des Dienstes
Maximale und minimale Anzahl von Dienstinstanzen, die Snowflake erstellen kann
Computepool, zu dem der Dienst hinzugefügt werden soll
Speicherort des Stagingbereichs und Name der Spezifikation
Der Code im folgenden Beispiel erstellt ein Service
-Objekt, das einen Dienst namens my_service
aus einer Spezifikation in @my_stage/my_service_spec.yaml
repräsentiert. Der Code erstellt dann den Dienst, indem das Service
-Objekt an die Methode ServiceCollection.create
übergeben und so der Dienst in der Datenbank my_db
und dem Schema my_schema
erstellt wird.
from snowflake.core import Root
from snowflake.core.service import Service
my_service = Service("my_service", min_instances=1, max_instances=2,compute_pool="my_compute_pool", from_stage="@my_stage", spec="my_service_spec.yaml")
root.databases["my_db"].schemas["my_schema"].services.create(my_service)
Abrufen von Details zum Dienst¶
Sie können Informationen zu einem Snowflake-Dienst erhalten, indem Sie die Methode ServiceResource.fetch
aufrufen, die ein Service
-Objekt zurückgibt.
Der Code im folgenden Beispiel ruft Informationen zu einem Dienst namens my_service
ab.
from snowflake.core import Root
from snowflake.core.service import Service
my_service = root.databases["my_db"].schemas["my_schema"].services["my_service"].fetch()
Auflisten von Diensten¶
Sie können die Dienste eines bestimmten Schemas mit der Methode iter
auflisten. Die Methode gibt einen PagedIter
-Iterator für Service
-Objekte zurück.
Der Code im folgenden Beispiel listet alle Dienste auf, deren Name mit „abc“ beginnen, und gibt den Namen jedes einzelnen Dienstes aus.
from snowflake.core import Root
services = root.databases["my_db"].schemas["my_schema"].services.iter(like="abc%")
for service_obj in services:
print(service_obj.name)
Ausführen von Dienstoperationen¶
Mit einem ServiceResource
-Objekt können Sie allgemeine Dienstoperationen wie Anhalten, Fortsetzen und Abrufen des Dienststatus ausführen.
Der Code im folgenden Beispiel hält den Dienst my_service
an und setzt ihn dann fort. Er ruft außerdem den Status des Dienstes ab.
from snowflake.core import Root
from snowflake.core.service import Service
my_service_res = root.databases["my_db"].schemas["my_schema"].services["my_service"]
my_service_res.suspend()
my_service_res.resume()
status = my_service_res.get_service_status(10)