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

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.

CREATE OR ALTER TABLE vacation_spots (
  city VARCHAR,
  airport VARCHAR,
  avg_temperature_air_f FLOAT,
  avg_relative_humidity_pct FLOAT,
  avg_cloud_cover_pct FLOAT,
  precipitation_probability_pct FLOAT
) data_retention_time_in_days = 1;

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:

snow dcm plan --target PROD

Oder mit SQL:

EXECUTE DCM PROJECT my_db.my_schema.my_project
  PLAN
  USING CONFIGURATION PROD
FROM
  '@my_stage/my_project/';

Ü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

snow dcm plan

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

snow dcm deploy

Wendet die geplanten Änderungen auf die Zielumgebung an. Wird normalerweise ausgeführt, nachdem ein PR mit dem Hauptzweig zusammengeführt wurde.

Dynamische Tabellen aktualisieren

snow dcm refresh

Löst nach der Bereitstellung eine Aktualisierung der dynamischen Tabellen aus, um sicherzustellen, dass die nachgelagerten Daten auf dem neuesten Stand sind.

Erwartungen testen

snow dcm test

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:

CREATE USER github_deployer
  TYPE = SERVICE
  DEFAULT_ROLE = deployer_role
  WORKLOAD_IDENTITY = (
    TYPE = OIDC
    ISSUER = 'https://token.actions.githubusercontent.com'
    SUBJECT = 'repo:<owner>/<repo>:environment:<environment_name>'
  );

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:

name: Deploy DCM project to production

on:
  push:
    branches:
      - main

permissions:
  id-token: write
  contents: read

jobs:
  deploy:
    runs-on: ubuntu-latest
    environment: production

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          persist-credentials: false

      - name: Set up Snowflake CLI
        uses: snowflakedb/snowflake-cli-action@v2
        with:
          use-oidc: true
          cli-version: "3.11"

      - name: Plan DCM project
        env:
          SNOWFLAKE_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }}
        run: snow dcm plan --target PROD --save-output -x

      - name: Deploy DCM project
        env:
          SNOWFLAKE_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }}
        run: snow dcm deploy --target PROD -x

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.

targets:
  DEV:
    account_identifier: MYORG-MYACCOUNT_DEV
    project_name: MY_DB.MY_SCHEMA.MY_PROJECT_DEV
    project_owner: DEV_DEPLOYER
    templating_config: DEV

  PROD:
    account_identifier: MYORG-MYACCOUNT_PROD
    project_name: MY_DB.MY_SCHEMA.MY_PROJECT_PROD
    project_owner: PROD_DEPLOYER
    templating_config: PROD

templating:
  configurations:
    DEV:
      wh_size: "X-SMALL"
    PROD:
      wh_size: "LARGE"

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:

CREATE OR ALTER TASK {{ environment }}.my_schema.my_task
  WAREHOUSE = my_warehouse
  SCHEDULE = '60 minute'
  AS select pi();

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.