Snowflake DevOps¶
Snowflake DevOps ermöglicht es Entwicklern, den Lebenszyklus der Softwareentwicklung für ihre Snowflake-Umgebungen zu optimieren und zu automatisieren. Mit dem Schwerpunkt auf Best Practices in den Bereichen CI/CD, Bereitstellungsautomatisierung und Infrastrukturmanagement sorgen die Tools und Praktiken von Snowflake DevOps für eine reibungslose Integration zwischen Entwicklung und operativen Aufgaben.
Dieser Leitfaden bietet Einblicke in die Nutzung der Snowflake-Funktionen zur Verbesserung der Zusammenarbeit, zur Aufrechterhaltung der Qualität und zur effizienten Softwarebereitstellung in Ihren Snowflake-Projekten.
Was ist Snowflake DevOps?¶
Snowflake bietet einen integrierten Ansatz zur Beschleunigung von Entwicklungszyklen und zur Verbesserung der Gesamtproduktivität von Datenteams. Dieser Ansatz führt die Git-Versionskontrolle, Python-APIs, die deklarative Objektverwaltung und die nahtlose CI/CD-Automatisierung zusammen.
Git-Repository für alle Ihre Quellen |
Indem Sie Ihre Datenbestände, Ihren Code und Ihre Konfigurationen zentral verwalten und Versionen zentral kontrollieren, können Sie Konsistenz sicherstellen, die Zusammenarbeit vereinfachen und Rollbacks bei Bedarf rationalisieren. Wenn Sie Ihr Git-Repository über Snowflake verwenden, können Sie all dies innerhalb des sicheren Bereichs von Snowflake tun, was für produktionsbereite Umgebungen entscheidend ist. |
Deklarative Syntax |
Durch einen deklarativen Ansatz für das Änderungsmanagement von Datenbankänderungen – Definieren und Verwalten von Snowflake-Objekten mit Python oder SQL – können Sie auf komplexe Skripte verzichten und gleichzeitig die Lesbarkeit verbessern. |
CI/CD-Automatisierung |
Sie können Ihre bestehenden CI/CD-Tools oder Snowflake CLI integrieren, um Befehle automatisch auszuführen und Ihre gesamte Pipeline für effiziente und zuverlässige Bereitstellungen zu orchestrieren. |
Was sind die Bausteine von Snowflake DevOps?¶
Snowflake bietet mehrere integrierte Features, die DevOps einfacher und sicherer machen.
Mit dem Befehl CREATE OR ALTER können Sie Aktualisierungen auf Ihre Snowflake-Objekte anwenden und Ihr Konto mit der Infrastruktur als Code in Git synchronisieren. Weitere Informationen dazu finden Sie unter Änderungen mit deklarativem Code und Versionierung verwalten. |
|
Mit dem Snowflake-Befehl EXECUTE IMMEDIATE FROM können Sie SQL aus einem Git-Repository in Snowflake ausführen. Das SQL-Skript kann eine Jinja2-Vorlage sein. Weitere Informationen dazu finden Sie unter Skripte mit Jinja-Vorlagen parametrisieren. |
|
In Skripten zur Steuerung Ihrer CI/CD-Pipeline können Sie Snowflake CLI-Befehle ausführen, um Bereitstellungen zu automatisieren, mit der Versionskontrolle zusammenzuarbeiten und andere CI/CD-Tools zu integrieren. Weitere Informationen dazu finden Sie unter CI/CD-Jobs mit GitHub Actions automatisieren. |
|
Mit den Snowflake-Python-APIs können Sie Snowflake-Ressourcen, einschließlich Datenbanken, Schemas, Tabellen und Aufgaben, verwalten. Weitere Informationen dazu finden Sie unter Snowflake Python APIs: Verwalten von Snowflake-Objekten mit Python. |
|
Sie können die Projektkonfiguration und Datenpipelines (Schema, Tabellen, Skripte) aus einem Git Repo abrufen, um den Bereitstellungsworkflow zu triggern. Weitere Informationen dazu finden Sie unter Workflows durch Aufbewahren der Assets in einem mit Snowflake verbundenen Git-Repository optimieren. |
Verwenden von Snowflake-Features in DevOps-Workflows¶
Wenn Sie Snowflake mit Ihren vorhandenen Tools verwenden, können Sie die folgenden DevOps-Ziele erreichen:
Optimieren von Workflows, indem Assets in einem mit Snowflake verbundenen Git-Repository aufbewahrt werden.
Sie können die Vorteile Ihrer bestehenden Git-Investitionen nutzen, indem Sie das Repository mit Ihrem Snowflake-Konto verbinden. Sobald diese Verbindung hergestellt ist und das Repository lokal in Snowflake selbst geklont wurde, können Sie den Code direkt in Snowflake durchsuchen und ausführen.
Minimieren von Risiken, indem getrennte Umgebungen für Entwicklung, Test und Produktion unterhalten werden.
Durch die Verwendung separater Snowflake-Datenbanken für jede Umgebung minimieren Sie das Risiko, dass sich unerwünschte Änderungen auf Live-Systeme auswirken. Um Bereitstellungen einfacher zu verwalten, verwenden Sie Skripte, die den Bereitstellungsprozess parametrisieren.
Verwalten von Datenbankänderungen auf kontrollierte und wiederholbare Weise für Entwicklung, Test und Produktion durch Verwendung von Skripten und deklarativem Code.
Automatisieren von CI/CD-Jobs, einschließlich der Bereitstellung von Code und Daten unter Verwendung von GitHub Actions.
Bemerkung
Mit Snowflake Extension for Visual Studio Code können Sie Snowflake SQL-Anweisungen direkt in VS-Code schreiben und ausführen. Indem Sie VS-Code mit demselben extern verbinden, das Sie mit Snowflake verbunden haben, können Sie Code lokal in VS-Code entwickeln, Ihre Arbeit in Ihrem Git-Repository aufbewahren und dann von Snowflake aus auf Ihren Code zugreifen.
Workflows durch Aufbewahren der Assets in einem mit Snowflake verbundenen Git-Repository optimieren¶
Sie können Konsistenz sicherstellen, die Zusammenarbeit vereinfachen und bei Bedarf Rollbacks durchführen, indem Sie Ihre Datenassets, Ihren Code und Ihre Konfigurationen zentral in einem Git-Repository verwalten und Versionen zentral kontrollieren und dann das Repository über Snowflake verwenden.
Sie können Ihr Snowflake-Konto mit Ihrem Git-Repository verbinden, damit Snowflake den Code ausführen kann, der sich in den aus dem Repository geklonten Dateien befindet. Das Ergebnis ist ein Git-Repository-Stagingbereich, der einen vollständigen Klon Ihres Repositorys darstellt. Von Snowflake aus können Sie auf versionskontrollierte Dateien in einem bestimmten Commit, Branch oder Tag zugreifen.
Mit dem Stagingbereich können Sie eine Snowpark-Funktion oder -Prozedur aus einer versionskontrollierten Datei erstellen und versionierte SQL-Skripte direkt mit EXECUTE IMMEDIATE FROM ausführen oder die Snowflake-CLI zur Ausführung von Python-Skripten verwenden. Auf diese Weise können Sie Datenbankobjekte deklarativ mit SQL oder Python definieren und diese Objekte dann mit einer robusten und einfach einzurichtenden CI/CD-Pipeline einsetzen.

Separate Umgebungen für Entwicklung, Test und Produktion verwalten¶
Durch die Beibehaltung getrennter Umgebungen für Entwicklung, Test und Produktion können Ihre Teams die Entwicklungsaktivitäten von der Produktionsumgebung isolieren und so die Wahrscheinlichkeit unbeabsichtigter Folgen und Datenbeschädigungen verringern.
Wenn Sie Workflows in mehrere Umgebungen aufteilen, erhält jede ihre eigene Snowflake-Datenbank – in der Regel eine identische Kopie.
Skripte mit Jinja-Vorlagen parametrisieren¶
Um die Bereitstellung und Ausführung von Code in Entwicklungs- und Produktionsumgebungen auf im Wesentlichen identische Weise zu unterstützen, können Sie Verweise auf Umgebungsspezifika parametrisieren – z. B. welche Datenbank während der Bereitstellung verwendet werden soll. Auf diese Weise können Sie eine CI/CD-Pipeline aktivieren, um das für die Umgebung geeignete Bereitstellungsziel zu wählen.
Zur Parametrisierung von Skripten können Sie Jinja2 verwenden, eine beliebte Templating-Sprache mit Features, die von einfacher Skriptparametrisierung bis hin zu umfangreichem und modularem Scripting in einer Python-ähnlichen Sprache reichen. Snowflake unterstützt die Ausführung von SQL-Skriptvorlagen mit EXECUTE IMMEDIATE FROM. Alternativ dazu können Sie mit 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();
import os
from snowflake.core import Root, CreateMode
from datetime import timedelta
from snowflake.core.task import Task
my_task = Task(
name="my_task",
warehouse="my_warehouse",
definition="select pi()",
schedule=timedelta(minutes=60)
)
root = Root(Session.builder.getOrCreate())
tasks = root.databases[os.environ["environment"]].schemas["my_schema"].tasks
tasks.create(my_task, mode=CreateMode.or_replace)
Sie können die parametrisierten Skripte mit dem Befehl snow git execute
der Snowflake-CLI ausführen. CLI kann Skripte in SQL, Python oder einer Mischung aus beidem direkt aus dem Stagingbereich des Repositorys innerhalb Strukturen zur Begrenzung und der Leistungs-Features Ihres Snowflake Kontos ausführen.
snow git execute @my_git_repo/branches/main/path/to/my_scripts" \
-D "environment='preprod'"
Mit Snowflake CLI können Sie in Snowflake ausgeführte Apps über alle Workloads hinweg erstellen, verwalten, aktualisieren und anzeigen.
Änderungen mit deklarativem Code und Versionierung verwalten¶
Sie können Änderungen an Ihren Datenbankressourcen mithilfe von wiederverwendbaren Konfigurationsdateien in Ihrem Git-Repository einfacher verwalten.
Sie können Datenbankobjekte mit dem CREATE OR ALTER <objekt>-Befehl definieren, 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 Repository aus verwenden, können Sie Änderungen einfacher auf eine frühere Version zurücksetzen: Sie führen einfach eine frühere Version der Datei aus.
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;
from snowflake.core import Root
from snowflake.core.table import PrimaryKey, Table, TableColumn
my_table = root.databases["my_db"].schemas["my_schema"].tables["vacation_spots"].fetch()
my_table.columns.append(TableColumn(name="city", datatype="varchar", nullable=False]))
my_table.columns.append(TableColumn(name="airport", datatype="varchar", nullable=False]))
my_table.columns.append(TableColumn(name="avg_temperature_air_f", datatype="float", nullable=False]))
my_table.columns.append(TableColumn(name="avg_relative_humidity_pct", datatype="float", nullable=False]))
my_table.columns.append(TableColumn(name="avg_cloud_cover_pct", datatype="float", nullable=False]))
my_table.columns.append(TableColumn(name="precipitation_probability_pct", datatype="float", nullable=False]))
my_table_res = root.databases["my_db"].schemas["my_schema"].tables["vacation_spots"]
my_table_res.create_or_alter(my_table)
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.
CI/CD-Jobs mit GitHub Actions automatisieren¶
Sie können GitHub-Aktionen verwenden, um die Jobs zu automatisieren, die eine CI/CD-Pipeline bilden. Mit GitHub-Action oder ähnlichen CI/CD-Runners können Sie Workflows definieren, mit denen Erstellungs-, Test- und Bereitstellungsaufgaben automatisiert werden.
In diesen Workflows können Sie andere Features von Snowflake und GitHub nutzen, um die Teile zusammenzufügen. Alternativ können Sie auch Folgendes tun:
Speichern Ihrer Snowflake-Anmeldeinformationen in einem GitHub-Geheimnis, sodass GitHub Actions eine Verbindung zu Snowflake herstellen kann.
Installieren Sie einfach Snowflake-CLI und stellen Sie mithilfe der nativen Snowflake-CLI GitHub-Aktion eine Verbindung zu Snowflake her.
Ausführen von Befehlen in Snowflake durch Verwendung der Snowflake CLI. Rufen Sie zunächst die letzten Änderungen aus Ihrem Git-Repository in Snowflake ab. Als Nächstes führen Sie Ihre deklarativen und parametrisierten Skripte aus, um Ihre Änderungen in einer Umgebung Ihrer Wahl bereitzustellen.
Bei dem GitHub Actions-Workflow-Auszug im folgenden Beispiel wird eine Pipeline bereitgestellt. Der Workflow authentifiziert sich bei Snowflake, indem er die benötigten Werte aus zuvor konfigurierten Geheimnissen abruft.
Um die Pipeline bereitzustellen, führt der Workflow die folgenden snow git
-Befehle aus:
snow git fetch
ruft das Neueste aus dem GitHub -Repository ab, das in den Stagingbereich des Git-Repositorymy_git_repo
in Snowflake geklont wurde.snow git execute
führt die Python- und SQL-Skripte im Verzeichnis/scripts
aus dem Zweigmain
des Repositorys aus.
name: Deploy scripts to preprod
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
env:
SNOWFLAKE_CONNECTIONS_DEFAULT_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }}
SNOWFLAKE_CONNECTIONS_DEFAULT_USER: ${{ secrets.SNOWFLAKE_USER }}
SNOWFLAKE_CONNECTIONS_DEFAULT_PASSWORD: ${{ secrets.SNOWFLAKE_PASSWORD }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install snowflake-cli
uses: Snowflake-Labs/[email protected]
with:
cli-version: "latest"
default-config-file-path: ".snowflake/config.toml"
- name: Fetch repository changes
run: snow git fetch my_git_repo
- name: Deploy scripts to preprod environment
run: snow git execute @my_git_repo/branches/main/scripts/* \
-D "environment='preprod'"
Erste Schritte mit Snowflake DevOps¶
Eine interaktive Anleitung zur Verwendung von Snowflake-DevOps finden Sie im Quickstart unter Erste Schritte mit Snowflake DevOps.