DevOps mit Snowflake¶
Snowflake bietet Tools und Praktiken, um Ihre Snowflake-Umgebungen als Code zu verwalten, Änderungen zu validieren, bevor sie die Produktion erreichen, und Bereitstellungen über CI/CD-Pipelines zu automatisieren.
Was ist DevOps mit Snowflake?¶
DevOps mit Snowflake bringt Best Practices aus dem Software-Engineering in das Management von Dateninfrastrukturen. Die wichtigsten Prinzipien sind:
Als Code definieren. Deklarieren Sie den gewünschten Status Ihrer Snowflake-Objekte in versionskontrollierten Dateien. Snowflake bestimmt die erforderlichen Änderungen (Erstellen, Ändern oder Löschen) und wendet diese an, um diesen Zustand zu erreichen.
Vor der Bereitstellung validieren. Zeigen Sie eine Vorschau der vorgeschlagenen Änderungen in einem Planschritt an, bevor Sie sie auf Ihr Konto anwenden. Überprüfen Sie Erstellungen, Änderungen und Löschungen, und stellen Sie sie dann bereit, wenn Sie sicher sind, dass die Änderungen korrekt sind.
Automatisieren mitCI/CD. Integrieren Sie Snowflake in Ihre bestehenden CI/CD-Pipelines, sodass Bereitstellungen durch Pull-Anforderungen, Zusammenführungen oder geplante Ausführungen ausgelöst werden und nicht durch manuelle Schritte.
Die empfohlene Methode ist die Verwendung von:doc:DCM-Projekten </user-guide/dcm-projects/dcm-projects-overview> (Database Change Management-Projekte), die deklarative Objektverwaltung, eine Erst-Planen-dann-Bereitstellen-Validierung, die Ausrichtung auf mehrere Umgebungen und die CI/CD-Automatisierung in einem einzigen Workflow vereinen.
Ihre Snowflake-Objekte als Code definieren¶
DCM-Projekte (empfohlen)¶
DCM-Projekte (Database Change Management-Projekte) bieten einen deklarativen Infrastruktur-as-Code-Ansatz für die Verwaltung Ihrer Snowflake-Umgebung. Anstatt imperative Skripte zu schreiben, die jeden Schritt spezifizieren, definieren Sie den gewünschten Zielzustand Ihrer Objekte. Snowflake vergleicht diese Definitionen mit dem aktuellen Stand und ermittelt die erforderlichen Änderungen.
EinDCM-Projekt besteht aus:
Einer Manifest-Datei (
manifest.yml), die Bereitstellungsziele, Eigentümerrollen und Konfigurationsvorlagen für jede Umgebung angibt.Definitionsdateien (SQL-Dateien unter``sources/definitions/``), die DEFINE-Anweisungen für Ihre Snowflake-Objekte, GRANT-Anweisungen für die Zugriffssteuerung undATTACH-Anweisungen für Datenqualitätserwartungen enthalten.
Das folgende Beispiel zeigt eine Definitionsdatei, die mithilfe von Jinja2-Vorlagen die Infrastruktur für mehrere Teams erstellt:
Eine vollständige Dokumentation zu DCM-Projekten, einschließlich Einrichten Ihrer Projektdateien, Verwalten mehrerer Umgebungen und Automatisieren von Bereitstellungen, siehe Snowflake DCM Projects.
dbt-Projekte in Snowflake¶
Mit dbt-Projekten in Snowflake können Sie `dbt-Core-<https://www.getdbt.com/>`__-Projekte als native Snowflake-Objekte bereitstellen und ausführen. Sie definierenSQL-Transformationen in dbt-Modellen, stellen diese als versioniertes DBTPROJECT-Objekt bereit und führen sie mit Snowflake-SQL oder der Snowflake-CLI aus. Sie können Ausführungen mit Snowflake-Aufgaben planen und die Bereitstellung in CI/CD-Pipelines integrieren.
Weitere Informationen dazu finden Sie unter dbt-Projekte in Snowflake.
Alternative: CREATE OR ALTER mit versionierten Skripten¶
Für einzelne Objektänderungen außerhalb eines DCM-Projekts können Sie den CREATE OR ALTER <objekt>-Befehl verwenden, der das Objekt erstellt oder es so verändert, dass es mit der vom Befehl angegebenen Definition übereinstimmt. Wenn Sie diesen Befehl von einer versionierten Datei in einem Remote-Repository aus verwenden, können Sie Änderungen auf eine frühere Version zurücksetzen, indem Sie eine frühere Version der Datei ausführen.
Bemerkung
Sie können zum Verwalten von Snowflake-Ressourcen auch die Snowflake-Python-APIs oder Snowflake CLI verwenden. Wenn Sie es vorziehen, Ihre Data-Engineering-Arbeiten in Python zu erledigen, können Sie mit der erstklassigem Python-API von Snowflake dieselbe Ressourcenverwaltung in der Sprache durchführen, in der Sie am produktivsten sind.
Änderungen validieren und in der Vorschau anzeigen¶
Bevor Sie Änderungen an Ihrem Snowflake-Konto vornehmen, können Sie eine Vorschau der vorgeschlagenen Änderungen anzeigen, um zu überprüfen, ob sie Ihren Absichten entsprechen.
Mit DCM-Projekten planen¶
DCM-Projekte verwenden ein Erst-Planen-dann-Bereitstellen-Modell. Der PLAN-Befehl vergleicht Ihre Definitionsdateien mit dem aktuellen Status Ihres Kontos und erstellt eine Liste der vorgeschlagenen Änderungen, ohne etwas zu ändern.
Sie können einen Plan mithilfe der Snowflake-CLI ausführen:
Oder mit SQL:
Überprüfen Sie die Ausgabe, um die erwarteten Erstellungen, Änderungen und Löschungen zu bestätigen, bevor Sie mit der Bereitstellung fortfahren.
Die Bereitstellung mit CI/CD automatisieren¶
Sie können Snowflake in Ihre CI/CD-Pipelines integrieren, sodass Bereitstellungen automatisch durch Ereignisse wie Zusammenführungen von Pull-Anforderungen, Zweig-Push-Vorgänge oder geplante Ausführungen ausgelöst werden.
Die folgende Tabelle ordnet allgemeine CI/CD-Pipeline-Jobs zu den entsprechenden Snowflake-CLI-Befehlen zu:
Pipeline-Job |
Befehl CLI |
Beschreibung |
|---|---|---|
Planen von Pull-Anforderungen |
|
Generiert einen Plan, der eine Vorschau der Änderungen anzeigt, die auf die Zielumgebung angewendet werden würden. Sie können die Planausgabe als PR-Kommentar zur Überprüfung veröffentlichen. |
Bei Zusammenführung bereitstellen |
|
Wendet die geplanten Änderungen auf die Zielumgebung an. Wird normalerweise ausgeführt, nachdem ein PR mit dem Hauptzweig zusammengeführt wurde. |
Dynamische Tabellen aktualisieren |
|
Löst nach der Bereitstellung eine Aktualisierung der dynamischen Tabellen aus, um sicherzustellen, dass die nachgelagerten Daten auf dem neuesten Stand sind. |
Erwartungen testen |
|
Führt Erwartungsprüfungen aus, die in Ihrem DCM-Projekt definiert sind, um zu überprüfen, ob die Bereitstellung die erwarteten Ergebnisse gezeigt hat. |
GitHub Actions¶
Sie können GitHub-Aktionen verwenden, um die Jobs zu automatisieren, die eine CI/CD-Pipeline bilden.
Um sich sicher zu authentifizieren, empfiehlt Snowflake die Verwendung der Workload Identity Federation (WIF) mit OpenID Connect (OIDC) anstelle von statischen Anmeldeinformationen wie Kennwörtern oder private Schlüssel. Mit WIFOIDC fordern GitHub-Aktionen ein kurzlebiges Token vom OIDC-Anbieter von GitHub an und Snowflake überprüft das Token direkt. In Ihrem Repository werden keine langlebigen Geheimnisse gespeichert.
Um WIFOIDC einzurichten, erstellen Sie einen Snowflake-Dienstbenutzer, der dem OIDC-Anbieter von GitHub vertraut:
Weitere Informationen zum Konfigurieren des Subjektanspruchs und von WIF im Allgemeinen siehe:doc:/user-guide/workload-identity-federation.
Das folgende Beispiel zeigt einen Workflow, der WIF OIDC- undDCM-Projekte zur Planung und Bereitstellung von Änderungen an Push an den``main``-Zweig verwendet:
Weitere Informationen zum Einrichten vonCI/CD mit der Snowflake-CLI, einschließlich alternativer Authentifizierungsmethoden, siehe Integration von CI/CD mit Snowflake CLI.
Umgebungen verwalten¶
Durch die Beibehaltung getrennter Umgebungen für Entwicklung, Test und Produktion können Ihre Teams die Entwicklungsaktivitäten von der Produktionsumgebung isolieren, was die Wahrscheinlichkeit unbeabsichtigter Folgen und Datenbeschädigungen verringert.
Verbindungsprofile für Umgebungs-Targeting¶
Mit DCM-Projekten können Sie in Ihrer manifest.yml-Datei mehrere Bereitstellungsziele definieren. Jedes Ziel ist einem bestimmten Snowflake-Konto (oder einer Datenbank), einem Projektobjekt, einer Eigentümerrolle und einer Vorlagenkonfiguration zugeordnet. Dieselben Definitionsdateien können in allen Umgebungen bereitgestellt werden, wobei umgebungsspezifische Einstellungen über Konfigurationsprofile angewendet werden.
Für Enterprise-Muster wie z. B. Multi-Projekt-Setups und Teamzusammenarbeit siehe:doc:/user-guide/dcm-projects/dcm-projects-enterprise.
Erweitert: Jinja-Parallelisierung für benutzerdefinierte Skripte¶
DCM-Projekte unterstützen nativ Jinja2-Vorlagen in Definitionsdateien. Sie können Vorlagenvariablen, Schleifen, Bedingungen, Makros und Wörterbücher verwenden, um Ihre Definitionen in verschiedenen Umgebungen wiederverwenden zu können. Die Variablenwerte stammen aus Konfigurationsprofilen in der manifest.yml oder von Laufzeitüberschreibungen.
Weitere Informationen zu DCM-Vorlagen finden Sie unter DCM Projects-Dateien und -Vorlagen.
Sie können auch eigenständige SQL-Skripte (außerhalb von DCM-Projekten) unter Verwendung von Jinja2 mit EXECUTE IMMEDIATE FROM parametrisieren. Sie können auch mit der Snowflake-CLI Umgebungsvariablen an Python-Skripte übergeben.
Wenn Sie z. B. ein Bereitstellungsziel ändern möchten, ersetzen Sie den Namen der Zieldatenbank durch eine Jinja-Variable wie {{ environment }} in SQL-Skripten oder eine Umgebungsvariable in Python-Skripten. Diese Technik wird in den folgenden SQL- und Python-Codebeispielen gezeigt:
Erste Schritte¶
Für den Einstieg in DCM-Projekte finden Sie unter Snowflake DCM Projects einen vollständigen Überblick über das Feature, einschließlich Anleitungen für das Einrichten Ihrer Projektdateien, das Konfigurieren von Umgebungen und das Bereitstellen von Änderungen.
Beispielprojekte, CI/CD-Vorlagen und Schnellstart-Anleitungen finden Sie im `snowflake-labsDCM-Repository<https://github.com/Snowflake-Labs/snowflake_dcm_projects>`_.
Um einer Schritt-für-Schritt-Anleitung zu folgen, probieren Sie die Schnellstart-Anleitung` Erste Schritte mit SnowflakeDCM-Projekten<https://www.snowflake.com/en/developers/guides/get-started-snowflake-dcm-projects/>`_ aus.