Tutorial 3: Upgrade einer App mit Containern

Einführung

Das Snowflake Native App Framework ermöglicht es Anbietern, eine App innerhalb der Snowflake Data Cloud zu erstellen, zu verkaufen und zu vertreiben. Anbieter können Apps erstellen, die die Kernfunktionen von Snowflake nutzen, um Daten und Anwendungslogik mit Verbrauchern zu teilen. Apps können auch Snowpark Container Services implementieren, die die Bereitstellung, Verwaltung und Skalierung von containerisierten Apps innerhalb des Snowflake-Ökosystems vereinfachen.

Die Snowflake Native App Framework ermöglicht es Anbietern, eine App zu aktualisieren und eine neue Version oder einen Patch für Verbraucher zu veröffentlichen. In diesem Tutorial wird beschrieben, wie Sie die folgenden Aufgaben durchführen:

  • Einer App einen Versionsinitialisierer hinzufügen.

  • Versionen und Patches für Änderungen an der App erstellen.

  • App im Konto des Verbrauchers aktualisieren.

Vorausgesetzte Tutorials

In diesem Tutorial wird davon ausgegangen, dass Sie wissen, wie man eine grundlegende Snowflake Native App entwickelt und eine Snowflake Native App with Snowpark Container Services erstellen kann. Dieses Tutorial baut auf den Kenntnissen auf, die Sie in den folgenden Tutorials erworben haben:

Bevor Sie diesem Tutorial folgen, um eine App mit Containern zu aktualisieren, stellen Sie sicher, dass Sie diese beiden Tutorials abgeschlossen haben.

Vorsicht

Dieses Tutorial baut auf der App auf, die Sie in Tutorial 2: Eine App mit Containern erstellen erstellt haben. Wenn Sie die Anwendungsdateien und Snowflake-Objekte nicht in Ihrem Konto haben, müssen Sie das Tutorial erneut durcharbeiten, bevor Sie mit diesem Tutorial beginnen. Weitere Informationen dazu finden Sie unter Überprüfen Sie, ob die App aus dem vorherigen Tutorial in Ihrem Konto vorhanden ist.

Was Sie in diesem Tutorial lernen

In diesem Tutorial wird die App um Container erweitert, die Sie in Tutorial 2: Eine App mit Containern erstellen erstellt haben. In diesem Tutorial lernen Sie Folgendes:

  • Callback-Funktion des Versionsinitialisierers verwenden, um Dienstaktualisierungen und -ausfälle zu behandeln

  • Versionsdefinitionen für eine App erstellen

  • App aktualisieren

  • Upgrade-Fehler für eine App. simulieren

  • Patch für die App erstellen, um den Fehler zu beheben.

Überprüfen Sie, ob die App aus dem vorherigen Tutorial in Ihrem Konto vorhanden ist

Um zu überprüfen, ob die App mit den Containern, die Sie im Tutorial 2: Eine App mit Containern erstellen erstellt haben, noch in Ihrem Konto verfügbar ist, führen Sie die folgenden Aufgaben aus:

Vorsicht

Wenn eine der folgenden Aufgaben nicht erfolgreich abgeschlossen wird, müssen Sie Tutorial 2: Eine App mit Containern erstellen erneut durcharbeiten.

  1. Um zu überprüfen, ob Snow CLI richtig konfiguriert ist, führen Sie den folgenden Befehl aus:

    snow connection test -c tut-connection
    
    Copy

    Die Ausgabe dieses Befehls sollte ungefähr wie folgt aussehen:

    +----------------------------------------------------------------------------------+
    | key             | value                                                          |
    |-----------------+----------------------------------------------------------------|
    | Connection name | tut-connection                                                 |
    | Status          | OK                                                             |
    | Host            | USER_ACCOUNT.snowflakecomputing.com                            |
    | Account         | USER_ACCOUNT                                                   |
    | User            | tutorial_user                                                  |
    | Role            | TUTORIAL_ROLE                                                  |
    | Database        | TUTORIAL_IMAGE_DATABASE                                        |
    | Warehouse       | TUTORIAL_WAREHOUSE                                             |
    +----------------------------------------------------------------------------------+
    
    Copy

    Dieser Befehl prüft die folgenden Anforderungen:

    • Die Verbindung zu Snow CLI funktioniert.

    • Die TUTORIAL_ROLE ist vorhanden.

    • Die TUTORIAL_WAREHOUSE ist vorhanden.

  2. Um zu überprüfen, ob die anderen erforderlichen Snowflake-Objekte vorhanden sind, führen Sie die folgenden Befehle in einem Arbeitsblatt aus:

    USE ROLE tutorial_role;
    
    Copy
    SHOW DATABASES LIKE 'tutorial_image_database';
    
    Copy
    SHOW SCHEMAS LIKE 'tutorial_image_schema';
    
    Copy
    SHOW IMAGE REPOSITORIES LIKE 'tutorial_image_repo';
    
    Copy

    Jeder dieser Befehle sollte den Namen des jeweiligen Snowflake-Objekts zurückgeben.

  3. Um zu überprüfen, ob der Dienst noch ausgeführt wird, führen Sie den folgenden Befehl über ein Arbeitsblatt aus:

    CALL na_spcs_tutorial_app.app_public.service_status();
    
    Copy
  4. Stellen Sie sicher, dass Ihre lokale Verzeichnisstruktur wie im folgenden Beispiel aussieht:

    ├── app
        └── manifest.yml
        └── README.md
        └── setup_script.sql
    ├── README.md
    ├── service
        └── echo_service.py
        ├── echo_spec.yaml
        ├── Dockerfile
        └── templates
            └── basic_ui.html
    ├── snowflake.yml
    
    Copy

    Möglicherweise sehen Sie auch einen Ordner namens output, der die vom Befehl snow app run erzeugten Anwendungsdateien enthält.

Löschen des Anwendungsobjekts

Wenn die Anwendung, die Sie beim Durcharbeiten von Tutorial 2: Eine App mit Containern erstellen erstellt haben, noch in Ihrem Konto vorhanden ist, müssen Sie das Anwendungsobjekt löschen, bevor Sie mit diesem Tutorial fortfahren.

Bemerkung

Sie müssen die vorhandene App löschen, da eine App, die im Entwicklungsmodus direkt aus Stagingdateien erstellt wurde, nicht aktualisiert werden kann.

  1. Um festzustellen, ob die App aus dem vorherigen Tutorial (na_spcs_tutorial_app) in Ihrem Konto vorhanden ist, führen Sie den folgenden Befehl in einem Arbeitsblatt aus:

    SHOW APPLICATIONS LIKE 'na_spcs_tutorial_app';
    
    Copy
  2. Wenn die App na_spcs_tutorial_app in der Ausgabe dieses Befehls angezeigt wird, löschen Sie die App, indem Sie die folgenden Befehle in einem Arbeitsblatt ausführen:

    USE ROLE tutorial_role;
    DROP APPLICATION IF EXISTS na_spcs_tutorial_app CASCADE;
    
    Copy

In diesem Abschnitt haben Sie folgende Aufgaben abgeschlossen

In diesem Abschnitt haben Sie sich vergewissert, dass die Anwendungsdateien und Snowflake-Objekte aus dem vorherigen Tutorial in Ihrem Konto noch funktionieren.

Im nächsten Abschnitt erfahren Sie mehr über Versionen und Upgrades in der Snowflake Native App Framework.

Versionen, Patches und Upgrades verstehen

In diesem Abschnitt machen Sie sich mit den Konzepten vertraut, die in diesem Tutorial behandelt werden, darunter:

  • Versionen und Patches

  • Upgrades

  • Versionsinitialisierer

Allgemeine Informationen zu Versionen und Patches

Die Versionen in der Snowflake Native App Framework sind Kombinationen aus Versions- und Patchnummern. Diese sind im Anwendungspaket definiert.

. rst-class:: bulleted-definition-list

Version

Enthält im Allgemeinen größere Aktualisierungen für eine Snowflake Native App. Versionen werden in einem Anwendungspaket definiert.

Patch

Enthält im Allgemeinen kleinere Aktualisierungen für eine Snowflake Native App. Wie Versionen werden auch Patches im Anwendungspaket definiert.

Bemerkung

Ein Anwendungspaket kann nur zwei aktive Versionen gleichzeitig haben. Eine einzige Version einer App kann bis zu 130 Patches enthalten.

Allgemeine Informationen zu Upgrades

Im Kontext des Snowflake Native App Framework sind Upgrades Aktualisierungen einer Version oder eines Patches einer Snowflake Native App, die im Verbraucherkonto installiert ist. Das Snowflake Native App Framework unterstützt zwei Typen von Upgrades:

Automatisierte Upgrades

Automatisierte Upgrades sind Upgrades, die vom Anbieter initiiert werden. Wenn eine neue Version oder ein neuer Patch verfügbar ist, ändert der Anbieter die Release-Richtlinie des Anwendungspakets. Dies löst ein automatisches Upgrade aller installierten Instanzen der Anwendung aus, die in der Release-Richtlinie angegeben ist.

Manuelle Upgrades

Manuelle Upgrades sind Upgrades, die vom Verbraucher als Reaktion auf eine Mitteilung vom Anbieter initiiert werden. Manuelle Upgrades sind nützlich, wenn ein Anbieter schnell eine Aktualisierung, z. B. eine Fehlerbehebung, für einen Kunden freigeben muss.

Bemerkung

In diesem Tutorial wird beschrieben, wie Sie ein manuelles Upgrade für eine App mit Containern durchführen.

Wenn eine neue Version oder ein neuer Patch verfügbar ist, ändert der Anbieter die Release-Richtlinie des Anwendungspakets und benachrichtigt dann den Verbraucher, dass eine neue Version verfügbar ist.

Der Verbraucher führt dann das Upgrade durch Ausführen des Befehls ALTER APPLICATION in seinem Kontor durch. Im Allgemeinen können Verbraucher mit manuellen Upgrades ihre installierten Apps schneller aktualisieren als mit automatischen Upgrades.

Über den Versionsinitialisierer

Ein Versionsinitialisierer wird verwendet, um Dienste oder andere verwandte Prozesse zu starten oder zu aktualisieren. Der Versionsinitialisierer ist eine gespeicherte Callback-Prozedur, die in der Manifestdatei definiert und im Setup-Skript implementiert ist. Die Callback-Funktion des Versionsinitialisierers wird in den folgenden Kontexten aufgerufen:

  • Während der Installation wird der Versionsinitialisierer aufgerufen, sobald das Setup-Skript der App ohne Fehler abgeschlossen wurde.

  • Beim Upgrade gibt es zwei mögliche Szenarios, in denen der Versionsinitialisierer aufgerufen wird:

    • Wenn das Setup-Skript der neuen Version erfolgreich ist, wird die neue Version des Versionsinitialisierers aufgerufen.

    • Wenn das Setup-Skript oder der Versionsinitialisierer der neuen Version fehlschlägt, wird der Versionsinitialisierer der vorherigen Version aufgerufen. Dies ermöglicht es dem Versionsinitialisierer der vorherigen Version, den ALTER SERVICE-Befehl zu verwenden, um die Dienste auf die vorherige Version zurückzusetzen.

Einer App einen Versionsinitialisierer hinzufügen

Im vorherigen Tutorial haben Sie eine grundlegende App mit Containern erstellt. In diesem Abschnitt aktualisieren Sie diese App, um einen Versionsinitialisierer zur App hinzuzufügen. Außerdem fügen dem Anwendungspaket eine Version hinzu.

Versionsinitialisierer zur Manifestdatei hinzufügen

Der Versionsinitialisierer wird in der Manifestdatei der App definiert. Um den Versionsinitialisierer zu definieren, fügen Sie am Ende der Datei manifest.yml den folgenden Code hinzu:

lifecycle_callbacks:
  version_initializer: app_public.version_init
Copy

Dies gibt das Schema und den Namen der gespeicherten Prozedur an, die als Versionsinitialisierer verwendet wird. Im nächsten Abschnitt implementieren Sie die gespeicherte Prozedur version_init.

Versionsinitialisierer als gespeicherte Prozedur in das Setup-Skript einfügen

Im vorherigen Abschnitt haben Sie der Manifestdatei den Namen des Versionsinitialisierers hinzugefügt. In diesem Abschnitt fügen Sie den Code für die gespeicherte Prozedur in das Setup-Skript ein.

  1. Fügen Sie am Ende der Datei setup_script.sql den folgenden Code hinzu:

CREATE OR REPLACE PROCEDURE app_public.version_init()
RETURNS STRING
LANGUAGE SQL
AS
$$
DECLARE
can_create_compute_pool BOOLEAN;  -- Flag to check if 'CREATE COMPUTE POOL' privilege is held
BEGIN
-- Check if the account holds the 'CREATE COMPUTE POOL' privilege
   SELECT SYSTEM$HOLD_PRIVILEGE_ON_ACCOUNT('CREATE COMPUTE POOL')
      INTO can_create_compute_pool;

   ALTER SERVICE IF EXISTS core.echo_service
      FROM SPECIFICATION_FILE = 'service/echo_spec.yaml';
   IF (can_create_compute_pool) THEN
      -- When installing app, the app has no 'CREATE COMPUTE POOL' privilege at that time,
      -- so it will not execute the code below

      -- Since the ALTER SERVICE is an async process, wait for the service to be ready
      SELECT SYSTEM$WAIT_FOR_SERVICES(120, 'core.echo_service');
   END IF;
   RETURN 'DONE';
END;
$$;
Copy

Geänderten Dateien hochladen und eine Version erstellen

Nachdem Sie das Setup-Skript geändert haben, laden Sie die geänderten Dateien in den Stagingbereich hoch und erstellen eine Version, indem Sie die folgende Prozedur durchführen:

  1. Führen Sie den folgenden Befehl aus, um die Dateien hochzuladen und eine Version zu erstellen:

    snow app version create v1 -c tut-connection
    
    Copy

Mit dem Befehl snow app version werden die aktualisierten Dateien in den Stagingbereich hochgeladen. Wenn das Anwendungspaket und die Dateien bereits existieren, lädt dieser Befehl nur die geänderten Dateien hoch.

Dieser Befehl erstellt eine neue Version der App mit dem Namen v1, wobei der Standard-Patch auf 0 eingestellt ist.

Standard-Release-Richtlinie für die App festlegen

Im vorherigen Abschnitt haben Sie die geänderten Dateien hochgeladen und die Version v1 der App erstellt. In diesem Abschnitt legen Sie fest, dass die Standard-Release-Richtlinie die Version v1 verwenden soll.

Um die Standard-Release-Richtlinie zu aktualisieren, führen Sie den folgenden Befehl in einem Arbeitsblatt aus:

ALTER APPLICATION PACKAGE na_spcs_tutorial_pkg
  SET DEFAULT RELEASE DIRECTIVE VERSION=v1 PATCH=0;
Copy

Wenn Sie die Standard-Release-Richtlinie für eine App festlegen, installieren Verbraucher automatisch diese Version, wenn sie die App in ihrem Konto installieren. Im nächsten Abschnitt erstellen Sie die App in Ihrem lokalen Konto auf der Grundlage der Release-Richtlinie.

App erstellen und testen

Nachdem Sie nun eine Version hinzugefügt und die Standard-Release-Richtlinie festgelegt haben, können Sie die App erstellen und die erforderlichen Berechtigungen erteilen:

  1. Erstellen Sie die App aus der Release-Richtlinie, indem Sie den folgenden Befehl ausführen:

    snow app run --from-release-directive -c tut-connection
    
    Copy

    Mit diesem Befehl wird die App unter Verwendung der im vorigen Abschnitt definierten Release-Richtlinie erstellt.

  2. Nachdem Sie die App erstellt haben, erteilen Sie ihr die erforderlichen Berechtigungen, um sie ausführen zu können, indem Sie die folgenden Befehle in einem Arbeitsblatt ausführen.

    GRANT CREATE COMPUTE POOL ON ACCOUNT TO APPLICATION na_spcs_tutorial_app;
    GRANT BIND SERVICE ENDPOINT ON ACCOUNT TO APPLICATION na_spcs_tutorial_app;
    
    Copy
  3. Rufen Sie die Prozedur app_public.start_app auf, die Sie in der Datei setup_script.sql definiert haben: indem Sie den folgenden Befehl in einem Arbeitsblatt ausführen:

    CALL na_spcs_tutorial_app.app_public.start_app();
    
    Copy
  4. Bestätigen Sie, dass die Funktion erstellt wurde, indem Sie den folgenden Befehl in einem Arbeitsblatt ausführen:

    SHOW FUNCTIONS LIKE '%my_echo_udf%' IN APPLICATION na_spcs_tutorial_app;
    
    Copy
  5. Um zu überprüfen, ob der Dienst erstellt wurde und funktioniert, führen Sie den folgenden Befehl in einem Arbeitsblatt aus:

    CALL na_spcs_tutorial_app.app_public.service_status();
    
    Copy
  6. Um die Dienstfunktion aufzurufen, um eine Anfrage an den Dienst zu senden und die Antwort zu überprüfen, führen Sie den folgenden Befehl von einem Arbeitsblatt aus:

    SELECT na_spcs_tutorial_app.core.my_echo_udf('hello');
    
    Copy
  7. Um Informationen über die App anzuzeigen, führen Sie den folgenden Befehl in einem Arbeitsblatt aus:

    DESC APPLICATION na_spcs_tutorial_app;
    
    Copy

Zusammenfassung

In diesem Abschnitt haben Sie die folgenden Aufgaben erledigt:

  • Sie haben den Versionsinitialisierer kennengelernt und erfahren, wie Sie ihn in die Manifestdatei und das Setup-Skript einfügen können.

  • Sie haben die Grundlagen von Versionen und Patches in der Snowflake Native App Framework gelernt.

  • Legen Sie die Standard-Release-Richtlinie so fest, dass sie auf eine bestimmte Version einer Anwendung verweist.

  • Installieren Sie die App gemäß der Release-Richtlinie.

  • Testen Sie die Anwendung, indem Sie eine gespeicherte Prozedur aufrufen und den Befehl DESCRIBE APPLICATION verwenden, um den Status der Anwendung anzuzeigen.

Bemerkung

In diesem Tutorial haben Sie das Anwendungsobjekt in Ihrem lokalen Konto erstellt und den Befehl DESCRIBE APPLICATION verwendet. Dadurch wird das Verhalten der App im Konto des Verbrauchers imitiert.

App aktualisieren und Sie ein Upgrade auf eine neue Version durchführen

Im vorherigen Abschnitt haben Sie die ursprüngliche App geändert, indem Sie den Versionsinitialisierer als gespeicherte Prozedur hinzugefügt haben. Sie haben auch eine neue Version der App erstellt – Version v1, basierend auf der Standard-Release-Richtlinie.

In diesem Abschnitt nehmen Sie eine weitere Änderung an der App vor, erstellen die Version v2, aktualisieren die Standard-Release-Richtlinie und aktualisieren die installierte App von Version v1 auf Version v2.

Neue Tabelle zur App hinzufügen

Um das Hinzufügen eines neuen Features zu Ihrer Anwendung zu simulieren, fügen Sie dem Setup-Skript eine neue Tabelle hinzu.

  1. Fügen Sie die folgenden Befehle am Ende der Datei setup_script.yml hinzu.

    CREATE TABLE IF NOT EXISTS core.setup_script_run(run_at TIMESTAMP);
    GRANT SELECT ON TABLE core.setup_script_run to APPLICATION ROLE app_user;
    INSERT INTO core.setup_script_run(run_at) values(current_timestamp());
    
    Copy

Eine Version der App erstellen

So laden Sie das geänderte Setup-Skript in den Stagingbereich hoch und erstellen Version v2 der App:

  1. Führen Sie den folgenden Befehl im Ordner na-spcs-tutorial aus:

snow app version create v2 -c tut-connection
Copy

Dieser Befehl erstellt eine neue Version der App mit dem Namen v2, wobei der Standard-Patch auf 0 gesetzt ist.

Mit dem Befehl snow app version werden die aktualisierten Dateien in den Stagingbereich hochgeladen. Wenn das Anwendungspaket und die Dateien bereits existieren, lädt dieser Befehl nur die geänderten Dateien hoch.

Standard-Release-Richtlinie für die App festlegen

Nachdem Sie die Version v2 der Anwendung erstellt haben, legen Sie die Release-Richtlinie für das Anwendungspaket fest, indem Sie den folgenden Befehl über ein Arbeitsblatt ausführen:

ALTER APPLICATION PACKAGE na_spcs_tutorial_pkg
  SET DEFAULT RELEASE DIRECTIVE VERSION=v2 PATCH=0;
Copy

Dieser Befehl stellt die Release-Richtlinie auf Version v2 und Patch 0 ein.

App von v1 auf v2 aktualisieren

Nachdem Sie die Release-Richtlinie aktualisiert haben, um auf die neue Version zu verweisen, aktualisieren Sie die App, indem Sie den folgenden Befehl in einem Arbeitsblatt ausführen:

snow app run --from-release-directive -c tut-connection
Copy

Aktualisierte App testen

Nachdem Sie die App aktualisiert haben, testen Sie die App, indem Sie den folgenden Befehl über ein Arbeitsblatt ausführen:

SELECT na_spcs_tutorial_app.core.my_echo_udf('hello');
Copy

Zusammenfassung

Herzlichen Glückwunsch! Sie haben die App erfolgreich von Version v1 auf Version v2 aktualisiert.

In diesem Abschnitt haben Sie die folgenden Aufgaben erledigt:

  • Die App wurde aktualisiert und enthält nun eine Tabelle.

  • Ich habe eine neue Version für die App erstellt, die auf diesem Update basiert.

  • Die Standard-Release-Richtlinie wurde aktualisiert, um auf die neue Version zu verweisen.

  • App manuell aktualisieren

Im nächsten Abschnitt aktualisieren Sie den Dienst der App und simulieren einen Fehler im Upgrade-Prozess, indem Sie absichtlich einen Fehler in das Setup-Skript einfügen.

Upgrade-Fehler simulieren

Im vorherigen Abschnitt haben Sie eine neue Tabelle zur App hinzugefügt, eine neue Version erstellt und die App aktualisiert.

In diesem Abschnitt aktualisieren Sie die Dienstspezifikation, um eine Aktualisierung des Dienstes zu simulieren. Sie fügen auch absichtlich einen Fehler in das Setup-Skript ein, um ein fehlgeschlagenes Upgrade zu simulieren. Dies veranschaulicht, wie der Versionsinitialisierer mit Service-Upgrades umgeht, wenn das Upgrade fehlschlägt.

Dienstspezifikationsdatei aktualisieren

In diesem Abschnitt aktualisieren Sie die Dienstspezifikation der App, um eine Änderung des Dienstes zu simulieren.

  1. Ändern Sie in der Datei service/echo_spec.yaml den Wert von CHARACTER_NAME von Bob auf Tom.

    Diese Änderung führt dazu, dass der Dienst die folgende Meldung ausgibt:

    `Tom said hello.`
    
    Copy

Der Zweck dieser Änderung besteht darin, dass Sie in den folgenden Abschnitten sehen können, welche Version des Dienstes läuft, nachdem Sie ein Upgrade versucht haben.

Aktualisieren Sie das Setup-Skript, um einen absichtlichen Fehler einzubauen

Um einen Fehler während des Upgrade-Prozesses zu simulieren, fügen Sie absichtlich einen Fehler in das Setup-Skript ein, indem Sie eine SELECT-Anweisung für eine Tabelle hinzufügen, die nicht existiert.

Fügen Sie die folgende Anweisung am Ende der Prozedur app_public.version_init() in der setup_script.sql hinzu.

SELECT * FROM table_does_not_exist;
Copy

Diese Anweisung ist syntaktisch korrekt, bezieht sich aber auf eine Tabelle, die nicht existiert. Dies verursacht einen Fehler, wenn das Setup-Skript während des Upgrades ausgeführt wird.

Nachdem Sie diese Änderung vorgenommen haben, sollte die Funktion app_public.version_init() wie im folgenden Beispiel aussehen:

GRANT USAGE ON PROCEDURE app_public.service_status() TO APPLICATION ROLE app_user;

CREATE OR REPLACE PROCEDURE app_public.version_init()
RETURNS STRING
LANGUAGE SQL
AS
$$
DECLARE
  -- Flag to check if 'CREATE COMPUTE POOL' privilege is held
  can_create_compute_pool BOOLEAN;
BEGIN
   -- Check if the account holds the 'CREATE COMPUTE POOL' privilege
   SELECT SYSTEM$HOLD_PRIVILEGE_ON_ACCOUNT('CREATE COMPUTE POOL')
     INTO can_create_compute_pool;

   ALTER SERVICE IF EXISTS core.echo_service
     FROM SPECIFICATION_FILE = 'service/echo_spec.yaml';
   IF (can_create_compute_pool) THEN
     -- When installing app, the app has no 'CREATE COMPUTE POOL' privilege at that time,
     -- so it will not execute the code below

     -- Since the ALTER SERVICE is an async process, wait for the service to be ready
     SELECT SYSTEM$WAIT_FOR_SERVICES(120, 'core.echo_service');
   END IF;

   -- trigger an error. The upgrade fails
   SELECT * FROM non_exist_table;

   RETURN 'DONE';
END;
$$;
Copy

Überarbeiteten Dateien hochladen und einen neuen Patch erstellen

In den vorherigen Abschnitten haben Sie die Dienstspezifikation und das Setup-Skript der App aktualisiert.

Um die Dateien hochzuladen und einen neuen Patch für die App zu erstellen, führen Sie die folgenden Aufgaben aus:

  1. Führen Sie den folgenden Befehl aus, um dem Anwendungspaket einen Patch hinzuzufügen.

snow app version create v2 --patch 1 -c tut-connection
Copy
  1. Wenn Sie dazu aufgefordert werden, geben Sie y ein, um einen neuen Patch zum Anwendungspaket hinzuzufügen.

Standard-Release-Richtlinie für die App festlegen

Im vorherigen Abschnitt haben Sie die Dateien hochgeladen und einen Patch für die Updates erstellt. Um die Standard-Release-Richtlinie für den Patch festzulegen, führen Sie den folgenden Befehl über ein Arbeitsblatt aus:

ALTER APPLICATION PACKAGE na_spcs_tutorial_pkg
  SET DEFAULT RELEASE DIRECTIVE VERSION=v2 PATCH=1;
Copy

Mit diesem Befehl wird der Patch für die App auf Patch 1 eingestellt.

App aktualisieren

In den vorherigen Abschnitten haben Sie die App aktualisiert und einen neuen Patch erstellt. In diesem Abschnitt aktualisieren Sie die App in der Erwartung, dass der Vorgang aufgrund des Fehlers, den Sie in den vorherigen Abschnitten eingeführt haben, fehlschlägt.

Um die App zu aktualisieren, führen Sie den folgenden Befehl aus:

snow app run --from-release-directive -c tut-connection
Copy

Um den Upgrade-Status der App anzuzeigen, führen Sie den folgenden Befehl über ein Arbeitsblatt aus:

DESC APPLICATION na_spcs_tutorial_app;
Copy

Dieser Befehl zeigt Informationen über die App an, darunter den Upgrade-Status, die Anzahl der Upgrade-Versuche und den Grund für ein fehlgeschlagenes Upgrade.

Nachdem das Upgrade fehlgeschlagen ist, gibt Snowflake CLI die folgende Meldung aus:

Object 'TABLE_DOES_NOT_EXIST' does not exist or not authorized.'
Copy

Nachdem das Upgrade fehlgeschlagen ist, zeigt der Befehl DESC APPLICATION außerdem die folgenden Eigenschaften in Bezug auf Upgrades an:

Eigenschaft

Wert

upgrade_state

FAILED

upgrade_failure_reason

upgrade_failure_reason[ErrorCode 2003] Uncaught exception of type ‚STATEMENT_ERROR‘ on line 89 at position 0 : Uncaught exception of type ‚STATEMENT_ERROR‘ on line 19 at position 3 : SQL compilation error: Object ‚TABLE_DOES_NOT_EXIST‘ does not exist or not authorized.

App-Dienst ausführen, um zu sehen, welche Version des Dienstes läuft

Im vorherigen Abschnitt haben Sie einen Fehler beim Upgrade von Version v2, Patch 0 auf Version v2, Patch 1 simuliert.

Um festzustellen, welche Version des Dienstes gerade ausgeführt wird, führen Sie den folgenden Befehl in einem Arbeitsblatt aus.

SELECT na_spcs_tutorial_app.core.my_echo_udf('hello');
Copy

Dieser Befehl gibt die folgende Zeichenfolge zurück:

Bob said hello
Copy

Hier sehen Sie, dass die App weiterhin den Dienst von v2, Patch 0 ausführt, da das Upgrade fehlgeschlagen ist.

Wenn Sie jedoch keinen Versionsinitialisierer in die App aufgenommen haben, hätte der Upgrade-Prozess den Dienst auf v2, Patch 1 aktualisiert, obwohl das App-Upgrade fehlgeschlagen ist. Wenn ein App-Upgrade fehlschlägt, sorgt der Versionsinitialisierer dafür, dass die Version des Dienstes nicht aktualisiert wird und weiterhin mit der App synchronisiert ist.

Zusammenfassung

In diesem Abschnitt haben Sie die folgenden Aufgaben erledigt:

  • Es wurde ein Fehler in das Setup-Skript eingebaut, um einen Fehler im Upgrade-Prozess zu simulieren.

  • Die Version der App und des Dienstes nach dem Fehler wurde überprüft.

  • Sie haben gelernt, wie der Versionsinitialisierer sicherstellt, dass die Version eines Dienstes mit der Version der App übereinstimmt, wenn ein Upgrade fehlschlägt.

Patch erstellen, um den Upgrade-Fehler zu beheben

Im vorherigen Abschnitt haben Sie einen Fehler in das Setup-Skript der App eingebaut. Nach der Aktualisierung der konnten Sie überprüfen, dass sowohl die App als auch der Dienst weiterhin mit der Version v2 Patch 0 ausgeführt werden.

In diesem Abschnitt ändern Sie das Setup-Skript der App, um den Fehler zu korrigieren, erstellen einen Patch für das Update und aktualisieren die App.

Setup-Skript ändern

Um den absichtlichen Fehler zu korrigieren, den Sie in einem früheren Abschnitt eingebaut haben, entfernen Sie die folgende Anweisung aus der Datei setup_script.yaml:

SELECT * FROM table_does_not_exist;
Copy

Aktualisierte Dateien hochladen und einen neuen Patch erstellen

Um das geänderte Setup-Skript in einen Stagingbereich hochzuladen und einen neuen Patch zu erstellen, führen Sie die folgenden Aufgaben aus:

  1. Führen Sie den folgenden Befehl aus, um einen neuen Patch für die App zu erstellen:

  2. Wenn Sie dazu aufgefordert werden, geben Sie y ein, um einen neuen Patch zum Anwendungspaket hinzuzufügen.

Standard-Release-Richtlinie aktualisieren

Im vorherigen Abschnitt haben Sie den Patch 2 für die App erstellt. Um die Standard-Release-Richtlinie für den Patch festzulegen, führen Sie den folgenden Befehl über ein Arbeitsblatt aus:

ALTER APPLICATION PACKAGE na_spcs_tutorial_pkg
  SET DEFAULT RELEASE DIRECTIVE VERSION=v2 PATCH=2;
Copy

App aktualisieren und die Version des Dienstes überprüfen

Nachdem Sie eine neue Version erstellt und die Standard-Release-Richtlinie festgelegt haben, aktualisieren Sie die App und testen den Dienst, indem Sie die folgenden Aufgaben ausführen:

  1. Führen Sie den folgenden Befehl aus, um die App von Version v2 Patch 0 auf Version v2 Patch 2 zu aktualisieren:

    snow app run --from-release-directive -c tut-connection
    
    Copy
  2. Um zu überprüfen, welche Version des Dienstes gerade ausgeführt wird, führen Sie den folgenden Befehl in einem Arbeitsblatt aus.

    SELECT na_spcs_tutorial_app.core.my_echo_udf('hello');
    
    Copy
  3. Um den Status der App, einschließlich der aktuell installierten Version, anzuzeigen, führen Sie den folgenden Befehl aus:

    DESC APPLICATION na_spcs_tutorial_app;
    
    Copy

    In der Ausgabe lautet die Eigenschaft version v2 und die Patch-Eigenschaft 2.

Zusammenfassung

Herzlichen Glückwunsch! Sie haben die App nach dem fehlgeschlagenen Upgrade erfolgreich aktualisiert.

In diesem Abschnitt haben Sie die folgenden Aufgaben erledigt:

  • Der Fehler im Setup-Skript wurde behoben.

  • Ich habe einen neuen Patch erstellt, p2, um die App zu aktualisieren.

  • Die App wurde auf den neuen Patch aktualisiert.

Im Tutorial erstellt App und Objekte beseitigen

Da die App einen Computepool verwendet, werden Credits von Ihrem Konto genutzt, sodass die Ausführung Geld kostet. Um die Anwendung daran zu hindern, Ressourcen zu verbrauchen, müssen Sie sowohl das Anwendungsobjekt als auch alle von ihm erstellten Objekte auf Kontoebene, z. B. den Computepool, löschen.

  1. Um zu überprüfen, ob der Computepool derzeit ausgeführt wird, führen Sie den folgenden Befehl aus:

    snow object list compute-pool -l "na_spcs_tutorial_app_%"
    
    Copy

    Wenn der Computepool ausgeführt wird, wird eine Zeile mit einem ACTIVE Computepool angezeigt, der von dem Anwendungsobjekt erstellt wurde.

  2. Führen Sie den folgenden Snowflake CLI-Befehl aus, um die App zu beseitigen:

    snow app teardown --cascade --force -c tut-connection
    
    Copy

    Mit diesem Befehl werden alle von der App erstellten Snowflake-Objekte entfernt. Ohne die Option --force löscht dieser Befehl das Anwendungspaket nicht, da es Versionen enthält.

  3. Um zu überprüfen, ob der Computepool gelöscht wurde, führen Sie den folgenden Befehl aus:

    snow object list compute-pool -l "na_spcs_tutorial_app_%"
    
    Copy

    Dieser Befehl gibt no data zurück, wenn der Computepool erfolgreich gelöscht wurde.

Bemerkung

Der Befehl snow app teardown löscht sowohl das Anwendungspaket als auch das Anwendungsobjekt. Daher gehen alle zustandsabhängigen Daten verloren.

Mehr erfahren

Herzlichen Glückwunsch! In diesem Tutorial haben Sie gelernt, wie Sie eine App mit Containern manuell aktualisieren können.

Zusammenfassung

In diesem Tutorial haben Sie die folgenden Aufgaben erledigt:

  • Eine gespeicherte Prozedur zur Versionsinitialisierung hinzugefügt, um Dienste während Upgrades und Fehlern zu behandeln.

  • Sie haben eine neue Versionsdefinition der App im Anwendungspaket erstellt. Versionsdefinitionen geben die Versionsnummer und den Patch der App an.

  • Sie haben die Standard-Release-Richtlinie für eine App festgelegt. Release-Richtlinien bestimmen, welche Version und welcher Patch installiert wird, wenn ein Verbraucher eine App installiert oder aktualisiert.

  • Sie haben eine App aktualisiert und überprüft, was bei einem fehlgeschlagenen Upgrade passiert.