Bereitstellen und Verwalten von DCM Projects¶
Unter diesem Thema wird beschrieben, wie Sie DCM Projects zum Verwalten von Snowflake-Umgebungen erstellen und bereitstellen, auch als Konten.
Das Verwalten eines DCM project umfasst die folgenden Schritte:
Vorbereiten Ihres Snowflake-Kontos für ein DCM project.
Definieren von Projektkonfiguration und Objekten in Projektdateien.
Erstellen eines DCM Projects-Objekts.
Planen, um vorgeschlagene Änderungen vor der Bereitstellung in der Vorschau anzuzeigen.
Bereitstellen des Projekts.
Verwalten des Projekts, indem Sie den Prozess überwachen, aktualisieren und bei Bedarf wiederholen.
Sie können kontinuierlich inkrementelle Änderungen an Ihrem Projekt sowie umfangreiche Änderungen der Kontoinfrastruktur vornehmen.
Es wird empfohlen, kontinuierlich inkrementelle Änderungen und Ergänzungen für Ihr Projekt bereitzustellen, anstatt von 0 auf 100 umfangreiche Änderungen der Kontoinfrastruktur in einer einzigen Bereitstellung zu ändern.
Vorbereitungen für ein DCM project¶
Zum Start eines DCM Projects benötigt Ihr Snowflake-Konto die folgenden Voraussetzungen:
Eine Datenbank und ein Schema, in denen Sie Ihr DCM Projects-Objekt erstellen können
Eine Rolle mit Berechtigungen zum Erstellen eines DCM Projects-Objekts und mit Zugriff, um Abfragen auf einem Warehouse auszuführen
Für Snowflake CLI eine Rolle mit Berechtigungen zum Erstellen eines temporären Stagingbereichs
In diesem Abschnitt werden die Aufgaben beschrieben, die Sie zur Vorbereitung für DCM Projects erledigen müssen:
Installieren Sie die Schnittstellen zur Verwendung mit DCM-Projekten, wenn Sie Snowflake CLI oder die CortexCLI verwenden möchten.
Konfigurieren Sie die Git-Integration (empfohlen, aber nicht obligatorisch)
Bemerkung
Das `snowflake-labs DCM-Repository<https://github.com/Snowflake-Labs/snowflake_dcm_projects>`_ _ wird ständig mit Ressourcen aktualisiert, um Ihnen den Einstieg zu erleichtern.
Quickstarts und Demo-Projekte: Ein Repository, das Sie in einen Snowflake-Arbeitsbereich oder einen lokalen Ordner klonen können, um DCM Projects-Befehle auszuprobieren und DCM Projects-Fähigkeiten zu erkunden.
Beispiel-GitHub-Aktionen und -Workflows: CI/CD-Pipeline-Vorlagen mit Snowflake CLI zum Testen und Bereitstellen von DCM-Projekten.
Benutzeroberflächen-Tools¶
Sie haben die folgenden Optionen für die Weboberfläche von DCM Projects.
Benutzeroberflächen-Tool |
Am besten geeignet für |
|---|---|
Snowsight Ein Arbeitsbereich in Snowsight ist eine native Snowflake-Cloud-IDE in Ihrem Konto. |
|
Lokale IDE mit Snowflake CLI Die vertrauteste und personalisierte Benutzeroberfläche für Software-Ingenieure. |
|
Cortex Code Ein Agenten-AI-Tool für Snowflake. Weitere Informationen dazu finden Sie unter Cortex Code für DCM Projects. |
|
SQL-Befehle |
|
Cortex Code für DCM Projects¶
Cortex Code ist ein Agenten-AI-Tool für Snowflake. Mit der DCM-Fähigkeit kann Cortex Code DCM Projects autonom erstellen, migrieren, debuggen und bereitstellen. Es kann auch Schritt für Schritt nebenher arbeiten.
Bemerkung
Cortex Code mit der DCM-Fähigkeit ist derzeit nur über die Cortex Code CLI verfügbar. Sie ist nicht in Snowsight-Arbeitsbereichen verfügbar.
Die Cortex Code DCM-Fähigkeit ermöglicht Folgendes:
Neues DCM project von Grund auf erstellen, einschließlich der Manifest-Datei, der Ordnerstruktur und der Definitionsdateien.
DEFINE-Anweisungen, Jinja-Vorlagen und Makros verfassen und bearbeiten.
Befehle PLAN, DEPLOY, REFRESH, TEST und PREVIEW ausführen.
Planausgabe interpretieren, Fehler diagnostizieren und Korrekturen vorschlagen.
Bereitstellungsartefakte herunterladen und prüfen.
Ein bestehendes DCM project navigieren und erklären.
Um mit der Cortex Code DCM-Fähigkeit zu beginnen, führen Sie die folgenden Schritte aus:
Installieren Sie die Cortex Code CLI wie unter Installieren von Cortex Code beschrieben.
Starten Sie Cortex Code in Ihrem Terminal.
Verwenden Sie die
$dcm-Fähigkeitsreferenz oder verwenden Sie den BegriffDCMin Ihrer Eingabeaufforderung in natürlicher Sprache, um mit Ihrem DCM Projects per Chat zu interagieren.
Beispiel:
„Erstell ein neues DCM-Projekt für unsere Analysepipeline“
„Plane mein Projekt für das PROD-Ziel
„Warum ist mein letzter Plan fehlgeschlagen?“
„Füge eine neue dynamische Tabellendefinition für Kundenausgaben hinzu“
Snowflake CLI für DCM Projects¶
Snowflake CLI ist eine Befehlszeilenschnittstelle für Snowflake. Es ist ein Tool, mit dem Sie mit Ihrem Snowflake-Konto von Ihrem lokalen IDE aus interagieren können.
DCM-Projekte erfordern Snowflake CLI Version 3.16 oder höher. Installieren oder aktualisieren Sie die Snowflake CLI wie unter Installieren von Snowflake CLI beschrieben.
Konfigurieren Sie die Verbindung zu Ihrem Snowflake-Konto wie unter Konfigurieren der Snowflake CLI und Verbinden mit Snowflake beschrieben. Prüfen Sie, ob die Verbindung funktioniert:
Navigieren Sie zum lokalen Verzeichnis Ihres Git-Repository-Klons. Beispiel:
Snowflake CLI DCM-Befehle anzeigen, die Ihnen zur Verfügung stehen:
Git-Integration¶
Stellen Sie eine Verbindung zum Git-Repository her, in dem Ihre DCM project-Definitionsdateien gespeichert sind.
Erstellen Sie einen neuen Arbeitsbereich aus einem Git-Repository.
Erstellen oder wählen Sie einen Git-Zweig für Ihre geplanten Änderungen aus.
Snowflake klont Dateien aus diesem Zweig in Ihren Arbeitsbereichseditor.
Navigieren Sie zu dem Ordner, in dem Sie Ihre DCM project-Definitionsdateien haben oder diese erstellen möchten.
Installieren Sie die Snowflake CLI.
Die `Snowflake-Erweiterung<https://docs.snowflake.com/en/user-guide/vscode-ext>`_ für VSCode wird hier nicht benötigt, kann aber hilfreich sein.
Stellen Sie eine Verbindung zu Ihrem Git-Repository her.
Verbinden Sie Ihre lokale IDE mit Ihrem Remote-Git-Repository.
Erstellen oder wählen Sie einen Zweig für Ihre geplanten Änderungen aus.
Klonen Sie diesen Zweig auf Ihre lokale Festplatte.
Navigieren Sie zu dem Ordner, in dem Sie Ihre DCM Projects-Definitionsdateien haben oder diese erstellen möchten.
Erstellen Sie eine DCM project, wenn:¶
Erforderliche Rollen und Berechtigungen¶
Die Rolle des Benutzers, der ein DCM project-Objekt erstellt, muss die folgenden Rollen und Berechtigungen haben:
CREATE DCM PROJECT ON SCHEMA-Berechtigung:
Erstellen Sie eine DCM project, wenn:¶
Erstellen Sie ein DCM project-Objekt mithilfe einer der folgenden Optionen:
Um ein Projekt für ein nicht standardmäßiges Ziel zu erstellen, verwenden Sie einen der folgenden Befehle:
Wählen Sie im Navigationsmenü die Option Projects » Workspaces aus.
Wählen Sie auf der Seite Workspaces „+ Neu hinzufügen“ -> „DCM-Projekt“, um einen neuen DCM project-Ordner zu erstellen.
Wählen Sie „Standard-Zielumgebung definieren“, um ein DCM project-Objekt für das Standardziel im Manifest auszuwählen oder neu zu erstellen.
Beim Ausführen von DCM PLAN für ein Ziel, das ein DCM project-Objekt hat, welches im Manifest definiert ist, aber noch nicht existiert, fordert die UI Sie auf, die Erstellung dieses DCM project-Objekts basierend auf dem definierten Namen und der Eigentümerrolle zu bestätigen, bevor der Plan ausgeführt wird.
Target gibt an, ob das angegebene DCM project-Objekt bereits existiert und verwendet werden kann oder nicht.
Grün: Das DCM project-Objekt existiert und kann zur Ausführung von PLAN oder DEPLOY verwendet werden.
Rot: Das DCM project-Objekt existiert nicht und muss zuerst erstellt werden.
Zugriffssteuerung und Rollenberechtigungen¶
Sie können eine rollenbasierte Zugriffskontrolle (RBAC) des DCM project-Objekts der Schema-Ebene mit READ, MONITOR oder OWNERSHIP-Berechtigungen festlegen.
Diese Berechtigungen sind unabhängig von der Zugriffssteuerung für Definitionsdateien, die in einem Arbeitsbereich, Stagingbereich oder Repository gespeichert sind.
Berechtigung |
Beschreibung |
Zulässige Operationen |
|---|---|---|
READ |
|
|
MONITOR |
|
|
OWNERSHIP |
|
|
Bemerkung
Wie andere Snowflake-Befehle auch respektiert EXECUTE DCM PROJECT, wenn Berechtigungen aus Sekundärrollen für den Benutzer, der den Befehl ausführt, aktiviert sind. Führen Sie USE SECONDARY ROLES NONE; aus, so dass Sie keine Berechtigungen von anderen Rollen als der Rolle des Projekteigentümers nutzen. Dadurch wird sichergestellt, dass die Bereitstellung in verschiedenen Umgebungen konsistent ist, wenn sie von verschiedenen Service-Benutzern mit derselben Primärrolle ausgeführt wird.
Eigentümerschaft an DCM-verwalteten Objekten¶
Die Rolle, mit der ein DCM project bereitgestellt wird, hat standardmäßig die OWNERSHIP-Berechtigung für alle bereitgestellten Objekte.
Die Projektdefinitionen können GRANT OWNERSHIP-Anweisungen für andere Rollen enthalten. Snowflake empfiehlt, dass die DCM project-Eigentümerrolle die Eigentümerschaft für DCM-verwaltete Objekte nur an eine andere untergeordnete Rolle, die sie ebenfalls innehat, gewährt. Dann kann das Projekt dieses Objekt weiterhin verwalten, da die Projekteigentümerrolle die Berechtigungen der neuen Objekteigentümerrolle „erbt“.
Wenn die DCM project-Eigentümerrolle die Eigentümerschaft für DCM-verwaltete Objekte auf eine andere Rolle überträgt, die es nicht selbst besitzt, kann das Projekt dieses bereitgestellte Objekt nicht mehr verwalten, da die Eigentümerrolle des Projekts nicht mehr die Eigentümerschaft hat. Nachfolgende Bereitstellungen werden fehlschlagen. Die Objektdefinition muss aus dem Projekt entfernt werden oder die Eigentümerschaft muss wieder an die Rolle des Projektbesitzers zurückgegeben werden.
Wenn Sie vorhandene Objekte migrieren möchten, damit sie von einem DCM project verwaltet werden sollen, muss die Eigentümerrolle des DCM project-Objekts außerdem über Eigentümerrechte (direkt oder geerbt durch andere Rollen) für das Objekt verfügen, das vom DCM project verwaltet werden soll.
Bemerkung
Wenn es sich um ein migriertes Objekt handelt, empfehlen wir das Hinzufügen der entsprechenden GRANT OWNERSHIP-Anweisung auch für die Projektdefinitionen, um sicherzustellen, dass der aktuelle Status und DCM project-Definitionen synchronisiert sind.
DCM project definieren¶
Ein DCM project basiert auf einer Manifest-Datei und einem oder mehreren SQL-Objektdefinitionsdateien. Diese Dateien werden normalerweise in einem Git-Repository oder Ihrem lokalen Arbeitsbereich gespeichert und verwaltet.
Manifest-Datei
Gibt eine oder mehrere Zielumgebungen mit entsprechenden Kontobezeichnern, DCM project-Objekte, Eigentümerrollen für diese Objekte und optionale Vorlagenkonfigurationen an.
Gibt optional die Standardwerte für Vorlagen und eine oder mehrere Konfigurationen mit Werten für Vorlagenvariablen an.
Objektdefinitionsdateien
Definieren Sie eine Gruppe von Snowflake-Objekten, Berechtigungen und Erwartungen, die Sie in diesem DCM project gemeinsam verwalten möchten.
Informationen zum Einrichten eines DCM project-Ordners und der Definitionsdateien und zur Verwendung von Vorlagen zur Definition Ihres DCM project finden Sie unter Erstellen eines DCM project-Ordners zum Speichern Ihrer Definitionsdateien.
DCM project planen¶
Beim Planen eines DCM project wird ein Probelauf durchgeführt, um die Änderungen vor der Bereitstellung in der Vorschau anzuzeigen. Snowflake vergleicht Ihre Projektdefinitionsdateien mit vorhandenen Objekten und zeigt an, welche Objekte erstellt, geändert oder gelöscht werden. An Ihrem Konto werden keine Änderungen vorgenommen.
Verwenden Sie die Planung, um Änderungen vor der Bereitstellung eines DCM-Projekts zu überprüfen und zu validieren. Sie können Optionen wie Konfigurationen oder ein Ausgabepfad für Planergebnisse angeben.
Der PLAN imitiert die DEPLOY-Befehl so weit wie möglich, außer dass tatsächlich keine DDL-Anweisungen ausgeführt werden.
Wichtig
Führen Sie vor der Bereitstellung immer den Befehl PLAN für Ihre Projekte aus, um sicherzustellen, dass keine Fehler bei Syntax, Vorlagen, Objektabhängigkeiten, Zugriffsrechte usw. auftreten. Überprüfen Sie die Planausgabe, um Fehler zu debuggen, eine Vorschau des gerenderten Jinja mit den bereitgestellten Variablen sowie eine Vorschau der Änderungen anzuzeigen, die nach der Bereitstellung vorgenommen werden.
Der Plan führt die folgenden Schritte aus:
Rendert alle Jinja-Vorlagen mit dem ausgewählten Konfigurationsprofil oder den Werten, die zur Laufzeit bereitgestellt wurden.
Vergleicht alle Definitionen mit dem aktuellen Status von Entitäten, die im Rahmen der letzten Bereitstellung definiert wurden.
Konvertiert alle definierten Anweisungen in CREATE-, ALTER-, DROP-, GRANT- und REVOKE-Anweisungen.
Sortiert alle Anweisungen basierend auf ihren Abhängigkeiten.
Kompiliert alle Anweisungen.
Bemerkung
Obwohl PLAN fast alle möglichen Fehler abfängt, die während der Bereitstellung auftreten können, garantiert dies keine erfolgreiche Bereitstellung.
Führen Sie den Befehl PLAN aus¶
Der Befehl PLAN benötigt die folgenden Informationen als Eingabe:
Der Pfad zur Manifest-Datei
Die CLI liest das Ziel aus dem Manifest (
default_targetoder--target-Flag). Für SQL-Befehle müssen der Pfad zur Manifest-Datei und der Projektname angegeben werden.Definierte Werte für Jinja-Variablen (optional).
templating_configdes Ziels wählt automatisch das Konfigurationsprofil aus. Für SQL-Befehle verwenden Sie die USING CONFIGURATION-Klausel, um das Profil anzugeben.Ein oder mehrere Werte des Konfigurationsprofils, die überschrieben werden sollen (optional).
Im Folgenden finden Sie Beispiele für die Ausführung des PLAN-Befehls.
Führen Sie den Befehl snow dcm plan in Ihrem lokalen IDE-Terminal oder als Teil eines Git-Workflows aus.
Beispiel für einen CLI-Befehl, um ein DCM-Projekt aus einem lokalen Verzeichnis zu planen:
Beispiel für einen CLI-Befehl, um ein DCM-Projekt aus einem Snowflake-Stagingbereich oder Git-Repository-Klon zu planen:
Beispiel für einen CLI-Befehl, um ein DCM-Projekt mit optionalen Argumenten zu planen:
Variablen in doppelten Anführungszeichen mit zusätzlichen einfachen Anführungszeichen sind für Zeichenfolgenwerte erforderlich. Wertelisten erfordern eckige Klammern.
Gehen Sie im DCM-Bedienfeld oben wie folgt vor:
Wählen Sie den Projektordner in Ihrem aktuellen Arbeitsbereich aus.
Wählen Sie Ihr Ziel aus (wenn Sie mehrere Ziele haben).
(Optional) Überschreiben Sie bestimmte Parameter.
Klicken Sie auf Plan.
Die Snowsight-UI verwendet automatisch das DCM project-Objekt, das im Manifest-Ziel definiert ist. Wenn das Projektobjekt noch nicht vorhanden ist, können Sie es über die UI erstellen.
Sobald der PLAN abgeschlossen ist, wird die Ausgabe auf einer neuen Registerkarte geöffnet. Wenn Sie dies nicht sehen, klicken Sie erneut auf Plan, um die Registerkarte zu öffnen.
Wenn bereits ein Plan vorhanden ist, können Sie neu planen, falls Sie Ihre Definitionen geändert haben.
Die Planausgabe wird immer automatisch im Unterordner out/ für das Projekt generiert.
Sie können einen DCM PLAN in SQL von jedem Ort aus ausführen, an dem Sie SQL-Befehle ausführen können, innerhalb von Snowflake oder in Verbindung mit Snowflake. Verwenden Sie den Befehl EXECUTE DCM PROJECT mit dem PLAN-Modus.
Beispiel für einen SQL-Befehl, um ein DCM-Projekt von einem Arbeitsbereichspfad aus zu planen:
Beispiel für einen SQL-Befehl, um ein DCM-Projekt zu planen, wenn Sie Jinja mit Konfigurationsprofilen verwenden, aber wh_size und teams überschreiben:
Beispiel für einen SQL-Befehl, um ein DCM project bei Verwendung von Jinja-Vorlagen ohne Konfigurationsprofile zu planen:
Pfad zur Definitionsdatei¶
Sie haben die folgenden Optionen, um auf den Speicherort der Manifest- und Definitionsdateien zu verweisen.
Von einem Arbeitsbereichspfad
Die Snowsight-Benutzeroberfläche listet automatisch alle DCM project-Definitionen innerhalb des aktuellen Arbeitsbereichs auf. Sie können einen dieser Pfade auswählen, und die Arbeitsbereiche werden ihn für die Ausführung von DCM-Befehlen verwenden.
Wenn Sie SQL-Befehle in Arbeitsbereichen manuell ausführen möchten, können Sie auch in jedem Ihrer Arbeitsbereiche auf diesen Pfad verweisen.
Tipp: Über das 3-Punkt-Menü hinter jeder Datei in Ihrem Arbeitsbereich können Sie den vollständigen Pfad zu dieser Datei in Ihren SQL-Code kopieren.
Beispiel für einen SQL-Befehl, um ein DCM-Projekt von einem Arbeitsbereichspfad aus zu planen:
Von einem lokalen Git-Repository-Klon auf Ihrer Festplatte
Wählen Sie das Verzeichnis aus, das Ihre
manifest.yml-Datei enthält, bevor Sie den CLI-Befehl in Ihrer lokalen IDE ausführen. Alternativ können Sie auch ein anderes lokales Verzeichnis angeben, welches das Manifest und die Definitionen enthält, die Sie verwenden möchten.Beispiel für einen CLI-Befehl, um ein DCM project aus dem aktuellen Verzeichnis eines lokalen Git-Repositorys zu planen:
Beispiel für einen CLI-Befehl, um ein DCM project aus einem anderen Verzeichnis in einem lokalen Git-Repository-Klon zu planen:
Von Ihrem Remote-Repository in einem Workflow
Dieselbe CLI-Syntax kann verwendet werden, wenn die DCM-Befehle in einem CI/CD-Workflow ausgeführt werden.
Beispiel für einen CI/CD-Workflow, um ein DCM project von einem lokalen Git-Repository-Klon zu planen:
Von einem Stagingbereich oder Git-Repository-Klon in Snowflake
Für den Fall, dass Sie eine Prozedur oder Aufgabe innerhalb von Snowflake ausführen möchten, die DCM-Befehle ausführt, kann dieser SQL-Befehl auf einen absoluten Pfad zu einem Snowflake-Stagingbereich oder einem Git-Repository-Klon innerhalb des Kontos verweisen.
Bei Git-Repository-Klone sollten Sie möglichst zuerst ALTER GIT REPOSITORY FETCH ausführen, um die neueste Version zu haben.
'@...'-Pfade können nur bei der Ausführung von DCM SQL-Befehlen verwendet werden.Beispiel für einen SQL-Befehl, um ein DCM-Projekt aus einem Stagingbereich oder Git-Repository-Klon in Snowflake zu planen:
Planausgabe¶
Bemerkung
Während der Vorschauphase kann sich das genaue Ausgabeformat ändern.
Die Standardausgabe des Plans enthält die folgenden Informationen zur Ausführung des Plans im JSON-Format:
Eigenschaft |
Beschreibung |
|---|---|
|
Schemaversion des Ausgabeformats. Version 2 ist die neueste und einzige unterstützte Version. |
|
Kontextinformationen zur Ausführung. |
|
ISO 8601-Zeitstempel, wann der Befehl ausgeführt wurde. |
|
Eindeutiger Bezeichner der Abfrage, die diesen Plan erzeugt hat. |
|
Vollqualifizierter Name des DCM-Projektobjekts. |
|
Name des Benutzers, der den Befehl ausgeführt hat. |
|
Aktive Rolle, die zur Ausführung des Befehls verwendet wird. |
|
Der ausgeführte Befehl: |
|
Ein Array von Änderungseinträgen. Jeder Eintrag steht für ein Objekt, das erstellt, geändert oder gelöscht werden würde oder wurde. Ein leeres Array bedeutet, dass die Projektdefinitionen bereits mit dem Konto synchronisiert sind. |
|
Die geplante Aktion für das Objekt. Mögliche Werte: |
|
Identifiziert das Zielobjekt. |
|
Der Snowflake-Objekttyp. |
|
Name des Objekts. |
|
Vollqualifizierter Name des Objekts. |
|
Datenbank, die das Objekt enthält. Wird bei Objekten auf Kontoebene weggelassen. |
|
Schema, welches das Objekt enthält. Wird bei Objekten auf Datenbank- und Kontoebene weggelassen. |
|
Ein Array von Änderungsdeskriptoren, die die spezifischen Attributänderungen genau angeben. |
|
Der Typ der Änderung. Mögliche Werte: |
|
Name des Attributs, das festgelegt oder geändert wird. Vorhanden, wenn |
|
Der neue Wert für das Attribut. Vorhanden, wenn |
|
Der vorherige Wert des Attributs vor der Änderung. Nur vorhanden, wenn |
|
Name der Sammlung, die geändert wird (zum Beispiel |
|
Label, das zur Identifizierung von Elementen innerhalb der Sammlung verwendet wird (z. B.``name``). Nur für bestimmte Sammlungen vorhanden. |
|
Ein verschachteltes Array von Deskriptoren für Sammlungselemente. Nur vorhanden, wenn |
|
Der Typ der Änderung des Sammlungselements. Mögliche Werte: |
|
Identifiziert das Element innerhalb der Sammlung. Kann je nach Sammlungstyp eine Zeichenfolge oder ein Objekt sein. |
|
Ein Array weiterer Änderungsdeskriptoren für dieses Element. Vorhanden für |
Ein Beispiel für eine Planausgabe:
DCM project bereitstellen¶
Wenn Sie ein DCM project bereitstellen, werden die folgenden Aktionen ausgeführt:
Objekte, die definiert sind, aber noch nicht existieren, werden erstellt.
Objekte, die bereits existieren, sich aber von der aktuellen Definition unterscheiden, werden geändert.
Objekte, die bereits wie definiert existieren, werden übersprungen.
Objekte, die bereits existieren, aber nicht mehr definiert sind, werden gelöscht.
Das gleiche Verhalten gilt für Zuweisungen und damit verbundene Datenqualitätserwartungen, die im Projekt definiert sind.
Wichtig
Um einen unbeabsichtigten Datenverlust zu vermeiden, sollten Sie immer PLAN ausführen und die Ausgabe überprüfen, bevor Sie DEPLOY ausführen.
Für jedes DCM project kann immer nur eine Instanz bereitgestellt werden. Es können nicht mehrere Konfigurationsprofile nebeneinander existieren. Wenn Sie Konfiguration B mit demselben DCM project bereitstellen, werden alle Objekte aus anderen früheren Konfigurationen gelöscht, die nicht in B definiert sind.
Erstellen Sie ein DCM project für jede Zielumgebung. Das DCM project für jede Umgebung kann dann auf die gleichen Definitionsdateien verweisen, wird aber unabhängig mit unterschiedlichen Werten für jede Variable bereitgestellt, wie suffix => 'DEV_JS', sodass sie unabhängig voneinander im selben Snowflake-Konto existieren können.
Sie können die Werte für ausgewählte Variablen zur Laufzeit überschreiben, wenn Sie ein vordefiniertes Profil mit einer geringfügigen Abweichung verwenden möchten.
Beispiel:
Jeder Bereitstellungsversuch (erfolgreich, fehlgeschlagen oder abgebrochen) hat eine Bereitstellungsnummer, zum Beispiel DEPLOYMENT$1. Optional können Sie eine eindeutige Zeichenfolge als Alias für die Bereitstellung angeben, um einzelne Bereitstellungen zu benennen, für bessere Beobachtbarkeit im Bereitstellungsverlauf. Betrachten Sie den Bereitstellungs-Alias wie eine Commit-Meldung für Ihre Codeänderung.
Jeder DEPLOY-Befehl führt zuerst einen internen PRE-PLAN als Teil der Bereitstellung aus. Wenn der PRE-PLAN erfolgreich ist, wird DEPLOY direkt danach ausgeführt. Es gibt keine Option, um diesen internen Planschritt abzufangen oder zu überprüfen. PRE-PLAN wird ausgeführt, um das Risiko eines Fehlers während der Bereitstellung weiter zu verringern. Wenn ein DEPLOY fehlschlägt, können Sie in der Fehlermeldung sehen, ob es während PRE-PLAN oder im Schritt DEPLOY fehlgeschlagen ist. Fehler während des Schritts PRE-PLAN sind ähnlich wie bei PLAN – es wird keine DDL-Änderung ausgeführt.
Wichtig
Fehler während des Schritts DEPLOY können zu einer teilweisen Ausführung der definierten Änderungen führen. Dies kann möglicherweise dazu führen, dass sich einige der verwalteten Objekte in einem undefinierten Zustand befinden. In den meisten Fällen wird der definierte Zielzustand wieder hergestellt, wenn Sie die Ursache beheben und DEPLOY erneut ausführen.
Der Zielpfad für die DEPLOY-Ausgabedatei kann nicht angepasst werden. Bereitstellungsartefakte werden immer im DCM project gespeichert.
Führen Sie den Befehl DEPLOY aus¶
Um den DEPLOY-Befehl auszuführen, stellen Sie die folgenden Eingaben bereit:
Der Pfad zur Manifest-Datei.
Ein Konfigurationsprofil muss benannt werden, wenn im Manifest Konfigurationsprofile definiert sind.
Optional können Werte für das Konfigurationsprofil die Standardwerte überschreiben.
Optional ein Bereitstellungs-Alias.
Im Folgenden finden Sie Beispiele für die Ausführung des DEPLOY-Befehls.
Beispiel für einen SQL-Befehl, um ein DCM project bereitzustellen, wenn Sie Jinja mit Konfigurationsprofilen verwenden, aber wh_size und teams überschreiben:
Sie können snow dcm deploy entweder in Ihrem lokalen IDE-Terminal oder als Teil eines Git-Workflows ausführen.
Beispiel für einen CLI-Befehl, um ein DCM project aus einem lokalen Verzeichnis bereitzustellen:
Beispiel für einen CLI-Befehl, um ein DCM project bereitzustellen, das auf eine nicht standardmäßige Umgebung abzielt:
Beispiel für einen CLI-Befehl, um ein DCM project mit optionalen Argumenten bereitzustellen:
Wählen Sie im Navigationsmenü die Option Projects » Workspaces aus.
Wählen Sie Ihren Projektordner im aktuellen Arbeitsbereich aus.
Wählen Sie Ihr Ziel aus (wenn Sie mehrere Ziele haben).
Klicken Sie auf Plan.
Die UI verwendet automatisch das DCM project-Objekt, das im Manifest-Ziel definiert ist. Wenn das Projektobjekt noch nicht vorhanden ist, können Sie es über die UI erstellen.
Sobald der PLAN abgeschlossen ist, wird die Ausgabe auf einer neuen Registerkarte geöffnet. Wenn Sie dies nicht sehen, klicken Sie erneut auf Plan, um die Registerkarte zu öffnen.
Wenn bereits ein Plan vorhanden ist, können Sie neu planen, falls Sie Ihre Definitionen geändert haben.
Überprüfen Sie Ihre PLAN-Ausgabe, um sicherzustellen, dass sie keine unbeabsichtigten Änderungen enthält.
Klicken Sie auf Deploy, um die Bereitstellung mit demselben Ziel und denselben Werten wie PLAN auszuführen.
Unter Planausgabe finden Sie die Standardausgabestruktur des Plans.
DCM project verwalten¶
Anzeigen aller von einem DCM project verwalteten Objekte¶
Mit dem Befehl SHOW ENTITIES IN DCM PROJECT können Sie eine Liste aller Snowflake-Objekte anzeigen, die derzeit von einem bestimmten DCM project verwaltet werden. Dies bietet eine Liste mit vollqualifizierten Namen für alle Objekte. Um die Ergebnisse zu sehen, benötigen Sie die READ-Berechtigung für das DCM project und Anzeigeberechtigungen für das verwaltete Objekt selbst.
Bemerkung
Das Ergebnis stimmt nicht unbedingt mit den Objekten der letzten Bereitstellung überein. Objekte, die manuell gelöscht oder vom Projekt getrennt wurden, werden im Ergebnis nicht aufgelistet.
Sie können LIKE verwenden, um nach Namen zu suchen, oder verwenden Sie einen Flow-Operator, um das Resultset weiter zu verarbeiten oder zu filtern.
Ebenso können Sie SHOW GRANTS und SHOW FUTURE GRANTS anzeigen, die definiert sind und mit diesem Projekt bereitgestellt werden.
Beispiele, um alle Objekte anzuzeigen, die derzeit von einem DCM project verwaltet werden:
Wählen Sie im Navigationsmenü die Option Catalog » Database Explorer aus.
Navigieren Sie zu dem Schema, das das DCM project-Objekt enthält.
Wählen Sie das DCM project-Objekt aus, um seine Details anzuzeigen.
Wählen Sie die Registerkarte Objects aus, um eine Liste aller Snowflake-Objekte anzuzeigen, die derzeit von diesem Projektobjekt verwaltet werden.
Klicken Sie auf den Namen eines Objekts, um die Detailseite dieses Objekts in einer neuen Registerkarte zu öffnen.
Objekte von einem DCM project trennen¶
Verwenden Sie den Befehl ALTER <Objekt> mit der Klausel UNSET DCM PROJECT, um ein Objekt zu trennen, das bereitgestellt wurde und nun von einem DCM project verwaltet wird. Der Befehl entfernt die Zuordnung zwischen dem Objekt und dem DCM project, ohne das Objekt zu löschen. Sie können diesen Befehl verwenden, wenn Sie die Verwaltung eines Objekts durch ein anderes DCM project starten möchten.
Stellen Sie sicher, dass Sie die zugehörige DEFINE-Anweisung aus Ihren Projektdefinitionsdateien entfernen, bevor Sie sie erneut bereitstellen. Andernfalls wird das Objekt wieder in das DCM project integriert.
Beispiel für einen SQL-Befehl zum Trennen eines Objekts von einem DCM project:
Sie können gewährte Berechtigungen oder Erwartungen nicht von einem DCM-Projekt trennen.
DCM project löschen¶
Wenn ein DCM project-Objekt gelöscht wird, bleiben alle verwalteten Entitäten, Berechtigungen und Erwartungen als „nicht verwaltet“ bestehen.
Wichtig
Löschen oder Ersetzen eines DCM project-Objekts führt dazu, dass Sie alle Artefakte des Bereitstellungsverlaufs verlieren, die das Objekt enthält.
Wählen Sie im Navigationsmenü die Option Catalog » Database Explorer aus.
Navigieren Sie zu dem Schema, das das DCM project enthält.
Wählen Sie das DCM project aus, um seine Detailseite anzuzeigen.
Klicken Sie oben rechts auf das 3-Punkt-Menü, und wählen Sie Drop aus.
DCM project-Bereitstellung automatisieren¶
Best Practices für CI/CD¶
Befolgen Sie diese Vorgehensweisen, wenn Sie Bereitstellungen mit CI/CD-Pipelines automatisieren:
Ein DCM project, das auf eine nicht produktive Umgebung abzielt, sollte einer anderen Rolle gehören als ihr Gegenstück in der Produktion, um versehentliche Bereitstellungen in der Produktion zu vermeiden.
Ein DCM project, das auf eine Produktionsumgebung abzielt, sollte einer speziellen Rolle für Produktionsbereitstellungen mit speziell zugeschnittenen Zugriffsrechten gehören, die gerade ausreichen, um alle Objekte im Projekt bereitzustellen.
Vermeiden Sie die Verwendung allgemeiner Administratorrollen für DCM project-Eigentümerschaft. Weisen Sie solche Rollen nur Service-Benutzern zu, nicht einzelnen Entwicklern.
Weisen Sie die dedizierte Rolle für die Produktionsbereitstellung nur Service-Benutzern zu, nicht einzelnen Entwicklern.
Beschränken Sie die Eigentümerschaft auf die Bereitstellungsrolle für die Produktion, um die Unveränderlichkeit der kritischen Infrastruktur oder der Datenprodukte sicherzustellen.
Wenn die dedizierte Rolle für die Bereitstellung der Produktion anderen Rollen die Eigentümerschaft an Produktionsobjekten gewährt, können Benutzer, denen diese Rollen zugewiesen wurden, die Produktionsobjekte weiterhin ändern oder löschen.
Beispiele für GitHub-Aktionen¶
Dieser Abschnitt enthält Beispiele für GitHub-Aktions-Workflows, die typische CI/CD-Muster für DCM Projects veranschaulichen. Die gleichen Konzepte gelten auch für andere Git-basierte Plattformen wie Azure DevOps, GitLab CI/CD oder Bitbucket-Pipelines – nur die Workflow-Syntax unterscheidet sich.
Jedes Beispiel enthält Bausteine, die Sie auf der Grundlage Ihrer Pipeline-Einrichtung, der Umgebungstopologie und der Anforderungen der Organisation anpassen und kombinieren können.
Die Beispiel-Workflows demonstrieren die folgenden Muster, die auf jedes DCM CI/CD-Setup anwendbar sind:
Manifest-gesteuerte Konfiguration Jeder Workflow liest
account_identifier,project_ownerundproject_nameaus den Manifest-Zielen. Dadurch bleibt die Umgebungskonfiguration an einem Ort gespeichert und es wird vermieden, dass sie über GitHub-Geheimnisse hinweg dupliziert wird.Schutz vor Datenlöschung Der Bereitstellungs-Workflow analysiert
plan_result.jsonauf destruktive DROP-Operationen für Objekte, die Daten enthalten, wie Datenbanken, Schemas, Tabellen und Stagingbereiche, und blockiert die Bereitstellung, wenn welche gefunden werden.Sequenzielle Heraufstufung vom Stagingbereich zur Produktion Die Bereitstellung der Produktion beginnt erst, nachdem die Bereitstellung des Stagingbereichs erfolgreich war, die dynamischen Tabellen aktualisiert wurden und die Datenqualitätstest bestanden wurden.
Parsen der strukturierten Planausgabe Workflows verwenden
jq, um die Anzahl der Operationen und Objektdomänen ausplan_result.jsonzu extrahieren, was das Erstellen kundenspezifischer Zusammenfassungen und Prüfungen vereinfacht.AI-gestützte Zusammenfassungen
snow cortex completegeneriert Zusammenfassungen der Ergebnisse des Post-Hook-Skripts und die Aktualisierungsausgabe der dynamischen Tabelle für die GitHub-Aktions-Jobzusammenfassung in natürlicher Sprache.
Bevor Sie diese Beispiel-Workflows ausführen, müssen die folgenden Voraussetzungen erfüllt sein:
Speichern Sie die DCM project-Dateien in einem Git-Repository.
Erteilen Sie Benutzerberechtigungen zum Erstellen und Ausführen von GitHub-Aktionen.
Konfigurieren Sie GitHub-Geheimnisse für die Anmeldeinformationen des Snowflake Service-Benutzers (
SNOWFLAKE_USER,SNOWFLAKE_PASSWORDoder ein persönliches Zugriffstoken).Konfigurieren Sie GitHub-Variablen für den Pfad zum DCM project-Ordner (
DCM_PROJECT_PATH).Konfigurieren Sie GitHub-Umgebungen für jedes Manifest-Ziel (z. B.
DCM_STAGE,DCM_PROD_US).
Hinweise zum Einrichten einer Snowflake-Verbindung in GitHub-Aktionen finden Sie in der ersten Hälfte des Blogeintrags: `Ein praktischer Leitfaden zu GitHub-Aktionen CI/CD<https://medium.com/@uche.nkadi/automate-your-dbt-project-on-snowflake-a-practical-guide-to-github-actions-ci-cd-a366b6e061e5>`_.
Im `snowflake-labs DCM -Repository<https://github.com/Snowflake-Labs/snowflake_dcm_projects/GitHub_workflows>`_ finden Sie einige GitHub-Aktions-Workflows, die den gesamten CI/CD-Lebenszyklus für DCM Projects abdecken.
Alle Beispiel-Workflows lesen die Snowflake account_identifier- und``project_owner``-Rolle direkt aus den Manifest-Zielen mit yq, sodass die umgebungsspezifische Konfiguration in der versionskontrollierten manifest.yml und nicht in duplizierten GitHub-Geheimnissen existiert. Nur die Anmeldeinformationen des Service-Benutzers werden als Geheimnisse gespeichert.
Beispiel-Workflow: Verbindungen und Berechtigungen überprüfen¶
Workflow-Konfigurationsdatei: DCM_0_Test_Connections.yml
Trigger: Manuell mit dem Ereignis
workflow_dispatch
Dieser Workflow überprüft, ob sich der GitHub Aktions-Service-Benutzer mit jeder im Manifest definierten Zielumgebung verbinden kann. Verwenden Sie dies, wenn Sie ein neues Repository einrichten, ein neues Konto einrichten oder Authentifizierungsprobleme debuggen. Der Workflow führt die folgenden Schritte aus:
Analysiert dynamisch alle Zielnamen aus
manifest.yml.Verwendet eine GitHub-Aktionsmatrix-Strategie, um jedes Ziel parallel zu testen.
Überprüft für jedes Ziel die Snowflake-Verbindung, meldet das verbundene Konto, den Benutzer und die Rolle und prüft, ob die verbundene Rolle mit dem DCM project-Eigentümer übereinstimmt.
Berichtet, ob das DCM project-Objekt bereits existiert und ob der Dienstbenutzer über Bereitstellungsberechtigungen verfügt.
Beispiel-Workflow: Vorschau von Änderungen bei Pull-Anfrage¶
Workflow-Konfigurationsdatei: DCM_1_Test_PR_to_main.yml
Trigger: Pull-Anfrage für
main-Zweig geöffnet, synchronisiert oder wieder geöffnet
Dieser Workflow führt einen PLAN sowohl für das Staging- als auch für das Produktionsziel als Integrationstest für jede Pull-Anfrage aus. Er liefert den Prüfern eine Zusammenfassung der geplanten Änderungen direkt auf der Pull-Anfrage. Der Workflow führt die folgenden Schritte aus:
Führt
snow dcm planfür die STAGE- und PROD-Ziele parallel aus.Analysiert
plan_result.json, um CREATE-, ALTER- und DROP-Operationen zusammenzufassen, gruppiert nach Objektdomäne.Lädt Planartefakte zur späteren Überprüfung hoch.
Postet einen konsolidierten Kommentar an die Pull-Anfrage mit der Planzusammenfassung für beide Umgebungen.
Die Prüfung schlägt fehl, wenn ein PLAN fehlschlägt und die Zusammenführung blockiert.
Beispiel-Workflow: Änderungen in Staging und Produktion bereitstellen¶
Workflow-Konfigurationsdatei: DCM_2_Deploy_to_Stage_and_Prod.yml
Trigger: Push an den
main-Zweig (normalerweise eine zusammengeführte Pull-Anfrage)
Dieser Workflow implementiert eine sequenzielle Heraufstufungs-Pipeline. Änderungen werden zuerst im Stagingbereich bereitgestellt, durchgängig validiert und erst dann in die Produktion übernommen. Wenn ein Stage fehlschlägt, wird die Pipeline angehalten, ohne dass die Produktion beeinflusst wird.
Sequenz der Staging-Bereitstellung:
Plan: Führt
snow dcm planaus und fasst das Changeset zusammen.Erkennung von Datenlöschungen: Analysiert die Planausgabe und blockiert die Pipeline, wenn sie DROP-Operationen für Datenbanken, Schemas, Tabellen oder Stagingbereiche enthält.
Bereitstellung: Führt
snow dcm deployaus.Post-Skripte: Führt optional SQL Post-Hook-Skripte mit Jinja-Variableneinschleusung unter Verwendung von
snow sqlaus.Dynamische Tabellen aktualisieren: Führt
snow dcm refreshaus, um eine neue Transformationslogik anzuwenden.Testerwartungen: Führt
snow dcm testaus, um die Erwartungen an die Datenqualität zu überprüfen.
Sequenz der Bereitstellung in der Produktion:
Die gleichen sechs Schritte werden für das Produktionsziel wiederholt, aber erst, wenn alle Staging-Jobs bestanden wurden.
Nachdem alle Jobs abgeschlossen sind, veröffentlicht der Workflow eine endgültige Statuszusammenfassung für die ursprüngliche Pull-Anfrage.
Bemerkung
Der Bereitstellungs-Workflow verwendet snow cortex complete, um von Menschen lesbare Zusammenfassungen für Post-Hook-Skriptergebnisse und die Aktualisierungsausgabe von dynamischen Tabellen in GitHub-Aktions-Jobzusammenfassungen zu generieren.
Beispiel-Workflow: Testen der Erwartungen im Stagingbereich¶
Workflow-Konfigurationsdatei: DCM_3_Test_STAGE_Expectations.yml
Trigger: Manuell mit dem Ereignis
workflow_dispatch
Dieser Workflow bietet eine bedarfsgesteuerte Möglichkeit, die Datenqualität in der Stagingumgebung zu überprüfen, ohne eine vollständige Bereitstellung auszulösen. Verwenden Sie ihn, um die Erwartungen nach manuellen Datenänderungen oder vorgelagerten Datenaktualisierungen zu überprüfen, oder als regelmäßige Qualitätsprüfung. Der Workflow führt die folgenden Schritte aus:
Aktualisiert alle dynamischen Tabellen, die vom Staging-DCM project verwaltet werden.
Führt alle Datenqualitätserwartungstests aus, die mit Tabellen, dynamischen Tabellen und Ansichten im Projekt verbunden sind.
Berichtet, wer den Status bestanden oder nicht bestanden hat, mit Details zu den nicht erfüllten Erwartungen.
Häufig gestellte Fragen (FAQ)¶
- Wie kann ich ein vorhandenes Objekt umbenennen?
Führen Sie einen ALTER-Befehl außerhalb des DCM-Projekts aus.
Ändern Sie die Definition.
Führen Sie einen PLAN aus, um zu überprüfen, ob die neue Definition mit dem neuen Status übereinstimmt (keine Änderung in PLAN).
Führen Sie DEPLOY aus, um den neuen Status zu speichern.
- Wie stelle ich Objekte bereit, die noch nicht von DEFINE-Anweisungen unterstützt werden?
Sie können CREATE IF NOT EXISTS oder CREATE OR REPLACE-Anweisungen in einem separaten SQL-Skript nach der Ausführung Ihres DCM-Projektplans oder der Bereitstellung ausführen.
Beide Optionen unterstützen Jinja2-Vorlagen und Testläufe (Testlauf rendert die Jinja-Vorlage, überprüft aber nicht eine erfolgreiche SQL-Kompilierung).
Beispiel: