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.
Voraussetzungen¶
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.
Beispielsweise verwendet der folgende Code Verbindungsparameter, die in einer Konfigurationsdatei definiert sind, um eine Verbindung zu Snowflake zu erstellen:
from snowflake.core import Root
from snowflake.snowpark import Session
session = Session.builder.config("connection_name", "myconnection").create()
root = Root(session)
Unter Verwendung des resultierenden Session
-Objekts erstellt der Code ein Root
-Objekt, das die Typen und Methoden der API verwendet. Weitere Informationen dazu finden Sie unter Verbindung zu Snowflake über Snowflake-Python-API herstellen.
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 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, die der Pool enthalten soll
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:
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="CPU_X64_XS", auto_resume=False)
root.compute_pools.create(compute_pool)
Der Code erstellt dann den Computepool, indem das ComputePool
-Objekt an die Methode ComputePoolCollection.create
übergeben wird.
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¶
Zum Auflisten der Computepools können Sie die Methode iter
verwenden, die einen PagedIter
-Iterator zurückgibt.
Der Code im folgenden Beispiel listet Computepools auf, deren Namen mit abc beginnen:
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, das Sie mit der ComputePool.fetch
-Methode abrufen, können Sie allgemeine Computepool-Operationen wie das Anhalten, Fortsetzen und Beenden von Pools ausführen.
Der Code im folgenden Beispiel hält den Computepool my_compute_pool
an, setzt ihn fort und beendet ihn:
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()
Der Code verwendet die Methode Root.compute_pools
, um ein Objekt ComputePool
zu erstellen, das den Computepool repräsentiert. Über das ComputePool
-Objekt wird ein ComputePoolResource
-Objekt abgerufen, mit dem Computepool-Operationen ausgeführt werden können.
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 zu erstellen, erstellen Sie zunächst ein ImageRepository
-Objekt, das den Repository-Namen angibt.
Der Code im folgenden Beispiel erstellt ein ImageRepository
-Objekt, das ein Repository namens my_repo
repräsentiert.
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)
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.
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 einen Iterator PagedIter
für ImageRepository
-Objekte zurückgibt.
Der Code im folgenden Beispiel listet Repository-Namen in der Datenbank my_db
und dem Schema my_schema
auf:
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:
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)
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.
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 in einem bestimmten Schema mit der Methode iter
auflisten, die einen Iterator PagedIter
für Service
-Objekte zurückgibt.
Der Code im folgenden Beispiel listet Dienste auf, deren Namen mit abc beginnen:
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 und 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)