Computepool zu einer App mit Containern hinzufügen

Unter diesem Thema wird beschrieben, wie Sie Computepools in Snowflake Native Apps with Snowpark Container Services verwenden.

Allgemeine Informationen zu Computepools in Apps mit Containern

Ein Computepool ist eine Sammlung von einem oder mehreren virtuellen VM-Knoten (virtuelle Maschinen), auf denen Snowflake Snowpark Container Services ausführt. Apps mit Containern verwenden einen Computepool im Verbraucherkonto, um die von der App benötigten Container-Images zu verwalten.

Eine App kann mehrere Computepools erstellen und jeder Computepool ist exklusiv für die App. Von der App verwendete Computepools können nicht für andere Zwecke verwendet werden.

Container innerhalb einer App können direkt aufeinander zugreifen, auch wenn sie sich in verschiedenen Computepools befinden.

Die Verwendung verschiedener Computepools ermöglicht es Anbietern jedoch, die verschiedenen Typen von Diensten zu trennen. So kann ein Anbieter beispielsweise seine Frontend-Dienste von den Backend-Diensten trennen.

Computepools sind Objekte auf Kontoebene, d. h. der Name jedes Computepools muss innerhalb des Verbraucherkontos eindeutig sein.

Bewährte Verfahren für die Verwendung von Computepools in einer App mit Containern

Anbieter müssen beim Erstellen von Computepools im Verbraucherkonto die folgenden Best Practices beachten:

  • Computepools haben Auswirkungen auf die Kosten. Es ist wichtig, dass Sie die Werte für die Eigenschaften min_nodes, max_nodes und instance_family so einstellen, dass die richtige Menge an Ressourcen verbraucht wird. Anbieter sollten auch die Eigenschaft AUTO_SUSPEND_SECS so einstellen, dass inaktive Computepools automatisch angehalten werden.

    Weitere Informationen dazu finden Sie unter CREATE COMPUTE POOL.

  • Computepools sind Objekte auf Kontoebene, daher müssen die Namen der Computepools innerhalb des Verbraucherkontos eindeutig sein. Erwägen Sie die Verwendung des Anwendungsnamens als Präfix für den Namen des Computepools, um die Eindeutigkeit zu gewährleisten.

  • Wenn Sie einer App mit Containern, die bei verschiedenen Anbietern von Clouddienstanbietern installiert ist, einen Computepool hinzufügen, muss der Code, der zur Erstellung des Computepools verwendet wird, die Unterschiede in den Instanzfamilien der verschiedenen Clouddienstanbieter berücksichtigen. Die HIGHMEM_X64_L-Instanzfamilie hat zum Beispiel für jeden Clouddienstanbieter eine andere Konfiguration.

    Weitere Informationen zu den verfügbaren Instanzfamilien finden Sie unter CREATE COMPUTE POOL. Unter Für jeden Anbieter unterschiedliche Instanzfamilien wählen finden Sie ein Beispiel dafür, wie Sie die Instanzfamilie für verschiedene Clouddienstanbieter festlegen.

  • Legen Sie die Eigenschaft uses_gpu nur dann auf TRUE fest, wenn die App mit Containern eine GPU als Instanzfamilie des Computepools verwendet. Weitere Informationen dazu finden Sie unter Festlegen der Eigenschaft uses_gpu in der Manifestdatei.

Computepool für eine App erstellen

Es gibt zwei Möglichkeiten, einen Computepool für eine App mit Containern zu erstellen:

  • Die App erstellt während der Installation die erforderlichen Computepools. Dies setzt voraus, dass der Verbraucher der App die Berechtigung CREATE COMPUTE POOL für den Computepool erteilt. Ein Anbieter kann die App so konfigurieren, dass sie diese Berechtigungen über Snowsight anfordert.

    Weitere Informationen dazu finden Sie unter App für das Anfordern der Berechtigung CREATE COMPUTE POOL konfigurieren.

  • Der Verbraucher erstellt die von der App benötigten Computepools manuell. Der Verbraucher muss CREATE COMPUTE POOL ausführen, um den Computepool zu erstellen, und dann der App manuell die Berechtigung CREATE COMPUTE POOL für den Computepool erteilen.

Festlegen der Eigenschaft uses_gpu in der Manifestdatei

Wenn eine App mit Containern eine GPU als Instanzfamilie für den Computepool angibt, müssen Anbieter das uses_gpu-Flag im Manifest auf true einstellen. Im folgenden Beispiel wird gezeigt, wie Sie dieses Flag im Block artifacts einstellen:

artifacts:
  readme: readme.md
  setup_script: scripts/setup.sql
  container_services:
    uses_gpu: true|false
    images:
    - /provider_db/provider_schema/provider_repo/server:prod
    - /provider_db/provider_schema/provider_repo/web:1.0
Copy

Der automatisierte Sicherheitsscan verwendet dieses Flag Sicherheitsscan-Framework, um die Verhaltensweise während des Scanvorgangs der App-Version zu überprüfen.

Vorsicht

Um eine App mit Containern auf dem Snowflake Marketplace zu veröffentlichen, muss die App während der Installation die erforderlichen Computepools erstellen. Siehe Erzwungene Anforderungen für die Veröffentlichungsanforderungen des Snowflake Marketplace.

App für das Anfordern der Berechtigung CREATE COMPUTE POOL konfigurieren

Anbieter können eine App so konfigurieren, dass sie die Berechtigung CREATE COMPUTE POOL anfordert. Computepools können auch über das Setup-Skript erstellt werden, das bei Installation oder Aktualisierung der App ausgeführt wird.

Bemerkung

Eine App kann maximal fünf Computepools in einem Verbraucherkonto erstellen. Wenden Sie sich an den Snowflake-Support, wenn Ihre App zusätzliche Computepools erstellen muss.

Berechtigung CREATE COMPUTE POOL anfordern

Eine App kann die Berechtigungen CREATE COMPUTE POOL von einem Verbraucher anfordern. Diese Berechtigung ermöglicht es der App, einen Computepool im Verbraucherkonto zu erstellen. Unter Globale Berechtigungen von Verbrauchern anfordern finden Sie allgemeine Informationen zum Anfordern von globalen Berechtigungen beim Verbraucher.

Um die Berechtigung CREATE COMPUTE POOL von einem Verbraucher anzufordern, fügen Sie die Berechtigung CREATE COMPUTE POOL zur Datei manifest.yml hinzu, wie im folgenden Beispiel gezeigt:

...
privileges:
 - CREATE COMPUTE POOL
   description: "Enable application to create one to five compute pools"
 ...
Copy

Weitere Informationen zum Erstellen der Datei manifest.yml für eine App mit Containern finden Sie unter Manifest-Datei für eine App mit Containern erstellen.

Bemerkung

Das Verhalten für die Anforderung der Berechtigung CREATE COMPUTE POOL innerhalb einer Container-App unterscheidet sich von anderen Berechtigungsanforderungen. Wenn Sie diese Berechtigung zur Datei manifest.yml hinzufügen, zeigt Snowsight eine Schnittstelle an, über die ein Verbraucher die erforderlichen Berechtigungen zuweisen kann.

Befehl CREATE COMPUTE POOL in das Setup-Skript einfügen

Um einen Computepool im Verbraucherkonto zu erstellen, fügen Sie den Befehl CREATE COMPUTE POOL zum Setup-Skript der App hinzu.

Das folgende Beispiel zeigt, wie Sie einen Computepool innerhalb einer gespeicherten Prozedur im Setup-Skript erstellen:

CREATE COMPUTE POOL IF NOT EXISTS app_compute_pool
  MIN_NODES = 1
  MAX_NODES = 1
  INSTANCE_FAMILY = standard_1
  AUTO_RESUME = true;
Copy

Bemerkung

Wenn Sie einen Computepool innerhalb der App erstellen, sollten Anbieter überprüfen, ob der Anbieter die Berechtigung CREATE COMPUTE POOL erteilt hat, bevor sie den Computepool erstellen.

Eigentümer der von einer App erstellten Computepools ist ausschließlich diese App. Sie können nicht von anderen Anwendungen oder vom Verbraucher direkt verwendet werden.

Im Allgemeinen können Benutzer im Verbraucherkonto die von der App erstellten Computepools nur in den folgenden Situationen sehen:

  • Dem Benutzer wurde die Berechtigung MANAGE GRANTS erteilt.

  • Die App gewährt Zugriff auf den Computepool über Anwendungsrollen.

Anwendungsentwickler können Benutzern mit aktiven Rollen bestimmte Berechtigungen für Anwendungen gewähren, deren Eigentümer Computepools sind. Darüber hinaus können Administratoren mit der ACCOUNTADMIN-Rolle sich selbst die Berechtigungen erteilen, die für die Kontrolle der Anwendungen erforderlich sind, die Besitz von Computepools sind. Weitere Informationen zu den Zugriffsanforderungen für Computepools finden Sie unter ALTER COMPUTE POOL.

Präfix für den Computepool im Setup-Skript

Da es sich bei Computepools um Objekte auf Kontoebene handelt, müssen die Namen der Computepools innerhalb des Verbraucherkontos eindeutig sein. Das folgende Beispiel zeigt, wie Sie den Anwendungsnamen als Präfix für den Namen des Computepools verwenden:

LET POOL_NAME := (select current_database()) || '_app_pool';
CREATE COMPUTE POOL IF NOT EXISTS identifier(:pool_name)
  MIN_NODES = 1
  MAX_NODES = 1
  INSTANCE_FAMILY = STANDARD_2;
Copy

Für jeden Anbieter unterschiedliche Instanzfamilien wählen

Wenn Sie einen Computepool für eine Anwendung erstellen, die bei mehreren Cloudanbietern veröffentlicht wird, muss der Code, mit dem das Setup-Skript erstellt wird, so geschrieben werden, dass er die Unterschiede bei der Konfiguration von Instanzfamilien berücksichtigt.

Das folgende Beispiel zeigt, wie Sie eine gespeicherte Prozedur schreiben, um einen Computepool auf der Basis des Clouddienstanbieter zu erstellen, bei dem die App installiert wird:

 CREATE OR REPLACE PROCEDURE public.create_cp()
 RETURNS VARCHAR
 LANGUAGE SQL
 EXECUTE AS OWNER
 AS $$
  BEGIN
      LET POOL_NAME := (select current_database()) || '_app_pool';
      LET INSTANCE_FAMILY := IFF( CONTAINS(current_region(), 'AZURE') , 'GPU_NV_XS' , 'GPU_NV_S' );
      CREATE COMPUTE POOL IF NOT EXISTS identifier(:pool_name)
          MIN_NODES = 1
          MAX_NODES = 1
          INSTANCE_FAMILY = :instance_family;
      RETURN 'Compute Pool Created';
  END;
$$;
Copy