Snowflake DevOps

Snowflake DevOps permet aux développeurs de rationaliser et d’automatiser le cycle de vie du développement logiciel pour leurs environnements Snowflake. En mettant l’accent sur les meilleures pratiques en matière de CI/CD, d’automatisation du déploiement et de gestion de l’infrastructure, les outils et pratiques de Snowflake DevOps garantissent une intégration harmonieuse entre les tâches de développement et les tâches opérationnelles.

Ce guide offre des conseils pour tirer parti des capacités de Snowflake afin d’améliorer la collaboration, de maintenir la qualité et d’assurer une livraison efficace des logiciels dans le cadre de vos projets Snowflake.

Qu’est-ce que Snowflake DevOps ?

Snowflake propose une approche intégrée pour accélérer les cycles de développement et améliorer la productivité globale des équipes chargées des données. Cette approche intègre le contrôle de version Git, des APIsPython, la gestion déclarative des objets et l’automatisation transparente CI/CD.

Référentiel Git pour toutes vos sources

En centralisant la gestion et le contrôle des versions de vos données, de votre code et de vos configurations, vous pouvez garantir la cohérence, simplifier la collaboration et rationaliser les restaurations si nécessaire.

L’utilisation de votre référentiel Git à partir de Snowflake vous permet de faire tout cela dans le périmètre sécurisé de Snowflake, ce qui est crucial pour les environnements prêts pour la production.

Syntaxe de la déclaration

En adoptant une approche déclarative de la gestion des modifications de la base de données — en définissant et en gérant les objets de Snowflake à l’aide de Python ou de SQL — vous éliminez le besoin de scripts complexes tout en favorisant la lisibilité.

Automatisation CI/CD

Vous pouvez l’intégrer à vos outils CI/CD existants ou à Snowflake CLI pour exécuter automatiquement des commandes et orchestrer l’ensemble de votre pipeline pour des déploiements efficaces et fiables.

Quels sont les éléments constitutifs de Snowflake DevOps ?

Snowflake offre plusieurs fonctions qui s’intègrent pour rendre les tâches de DevOps plus simples et plus sûres.

CREATE OR ALTER <objet>

Vous pouvez utiliser la commande CREATE OR ALTER pour appliquer des mises à jour à vos objets Snowflake et maintenir votre compte en synchronisation avec l’infrastructure en tant que code dans Git.

Pour plus d’informations, voir Gérer les changements avec du code déclaratif et des versions.

EXECUTE IMMEDIATE FROM

Avec la commande Snowflake EXECUTE IMMEDIATE FROM, vous pouvez exécuter SQL à partir d’un référentiel Git dans Snowflake. Le script SQL peut être un modèle Jinja2.

Pour plus d’informations, voir Paramétrer des scripts avec des modèles Jinja.

Snowflake CLI

Dans les scripts pour piloter votre pipeline CI/CD, vous pouvez exécuter des commandes Snowflake CLI pour automatiser les déploiements, collaborer avec le contrôle de version et intégrer d’autres outils de CI/CD.

Pour plus d’informations, voir Automatiser les tâches CI/CD avec GitHub Actions.

APIs Python

À l’aide des APIs Python de Snowflake, vous pouvez gérer les ressources de Snowflake, notamment les bases de données, les schémas, les tables et les tâches.

Pour plus d’informations, voir Snowflake Python APIs : gestion des objets Snowflake avec Python.

Git dans Snowflake

Vous pouvez récupérer la configuration du projet et les pipelines de données (schéma, tables, scripts) à partir d’un référentiel Git pour déclencher le workflow de déploiement.

Pour plus d’informations, voir Rationaliser les workflows en conservant les actifs dans un référentiel Git connecté à Snowflake.

Utilisation des fonctions de Snowflake dans les workflows DevOps

En utilisant Snowflake avec vos outils existants, vous pouvez atteindre les objectifs DevOps suivants :

  • Rationalisez les workflows en conservant les actifs dans un référentiel Git connecté à Snowflake.

    Vous pouvez tirer parti de votre investissement Git existant en connectant le référentiel à votre compte Snowflake. Une fois cette connexion établie, avec le référentiel cloné localement dans Snowflake lui-même, vous pouvez parcourir et exécuter son code directement dans Snowflake.

  • Réduisez les risques en maintenant des environnements distincts pour le développement, les tests et la production.

    En utilisant des bases de données Snowflake distinctes pour chaque environnement, vous pouvez atténuer le risque que des changements non désirés affectent les systèmes en production. Pour gérer plus facilement les déploiements, vous utilisez des scripts qui paramètrent le processus de déploiement.

  • Gérez les modifications de la base de données de manière contrôlée et reproductible pour le développement, les tests et la production en utilisant des scripts et du code déclaratif.

  • Automatisez les tâches CI/CD, y compris le déploiement du code et des données, en utilisant des actions GitHub.

Note

Avec Snowflake Extension for Visual Studio Code, vous pouvez écrire et exécuter les instructions SQL de Snowflake directement dans VS Code. En connectant VS Code avec le même référentiel que vous avez connecté à Snowflake, vous pouvez développer du code localement dans VS Code, conserver votre travail dans votre référentiel Git, puis accéder à votre code depuis Snowflake.

Rationaliser les workflows en conservant les actifs dans un référentiel Git connecté à Snowflake

Vous pouvez garantir la cohérence, simplifier la collaboration et rationaliser les restaurations si nécessaire en gérant vos données, votre code et vos configurations de manière centralisée et en contrôlant les versions dans un référentiel Git et en utilisant le référentiel de Snowflake.

Vous pouvez connecter votre compte Snowflake à votre référentiel Git afin que Snowflake puisse exécuter du code dans les fichiers clonés depuis le référentiel. Le résultat est une zone de préparation du référentiel Git qui représente un clone complet de votre référentiel. Depuis Snowflake, vous pouvez accéder aux fichiers contrôlés par version à une certaine validation, une certaine branche ou une certaine balise.

Avec la zone de préparation interne, vous pouvez créer une fonction ou une procédure Snowpark à partir d’un fichier à version contrôlée et exécuter directement des scripts SQL versionnés avec EXECUTE IMMEDIATE FROM ou utiliser la CLI Snowflake pour exécuter des scripts Python. Ainsi, vous pouvez définir de manière déclarative des objets de base de données avec SQL ou Python, puis déployer ces objets à l’aide d’un pipeline CI/CD robuste et facile à mettre en place.

Diagramme affichant un référentiel Git échangeant des fichiers avec des outils de développement et Snowflake.

Maintenir des environnements distincts pour le développement, les tests et la production

En conservant des environnements distincts pour le développement, les tests et la production, vos équipes peuvent isoler les activités de développement de l’environnement de production, ce qui réduit la probabilité de conséquences involontaires et de corruption des données.

Lorsque vous séparez les workflows en plusieurs environnements, chacun reçoit sa propre base de données Snowflake - généralement une copie identique.

Paramétrer des scripts avec des modèles Jinja

Pour faciliter le déploiement et l’exécution du code de manière essentiellement identique entre les environnements de développement et de production, vous pouvez paramétrer les références aux spécificités de l’environnement - par exemple, la base de données à utiliser pendant le déploiement. Ainsi, vous pouvez activer un pipeline CI/CD pour choisir la cible de déploiement appropriée à l’environnement.

Pour paramétrer les scripts, vous pouvez utiliser Jinja2, un langage de modélisation populaire dont les fonctions vont du simple paramétrage de scripts à la création de scripts étendus et modulaires dans un langage similaire à Python. Snowflake prend en charge l’exécution de scripts SQL modélisés avec EXECUTE IMMEDIATE FROM. Par ailleurs, la CLI Snowflake vous permet de transmettre des variables d’environnement aux scripts Python.

Pour modifier une cible de déploiement, par exemple, vous remplacerez le nom de la base de données cible par une variable Jinja telle que {{ environment }} dans les scripts SQL ou par une variable d’environnement dans les scripts Python. Cette technique est illustrée dans les exemples de code Python et SQL suivants :

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

Vous pouvez exécuter les scripts paramétrés avec la commande snow git execute de la CLI Snowflake. La CLI peut exécuter des scripts en SQL, Python ou un mélange des deux directement à partir de la zone de préparation des garde-fous dans le cadre des fonctions de performance de votre compte Snowflake.

snow git execute @my_git_repo/branches/main/path/to/my_scripts" \
    -D "environment='preprod'"
Copy

Avec Snowflake CLI, vous pouvez créer, gérer, mettre à jour et voir les apps s’exécutant sur Snowflake à travers les charges de travail.

Gérer les changements avec du code déclaratif et des versions

Vous pouvez gérer plus facilement les modifications apportées aux ressources de votre base de données grâce à des fichiers de configuration réutilisables dans votre référentiel Git.

Vous pouvez définir les objets de la base de données à l’aide de la commande CREATE OR ALTER <objet>, qui crée l’objet ou le modifie pour qu’il corresponde à la définition spécifiée par la commande. En utilisant cette commande à partir d’un fichier versionné dans un référentiel, vous pouvez plus facilement revenir à une version antérieure : il vous suffit d’exécuter une version précédente du fichier.

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;
Copy

Note

Vous pouvez également utiliser l’APIs Snowflake Python et Snowflake CLI pour gérer les ressources de Snowflake. Si vous préférez effectuer votre travail d’ingénierie des données en Python, l’API Python de première classe de Snowflake vous permet d’effectuer la même gestion des ressources dans la langue dans laquelle vous êtes le plus productif.

Automatiser les tâches CI/CD avec GitHub Actions

Vous pouvez utiliser GitHub Actions pour automatiser les actions qui constituent un pipeline CI/CD. Grâce à GitHub Actions ou à des exécutants similaires CI/CD, vous pouvez définir des flux de travail qui automatisent les tâches de création de version, de test et de déploiement.

Dans ces workflows, vous pouvez utiliser d’autres fonctions de Snowflake et de GitHub pour assembler les pièces du puzzle. Vous pouvez exécuter ces tâches :

  • Stockez vos identifiants de connexion Snowflake dans un GitHub secret afin que GitHub Actions puisse se connecter à Snowflake.

  • Installez facilement la CLI Snowflake et connectez-vous à Snowflake à l’aide de l’action de la CLI Snowflake GitHub native.

  • Exécutez des commandes dans Snowflake en utilisant la CLI de Snowflake. Tout d’abord, récupérez les modifications les plus récentes de votre référentiel Git dans Snowflake. Ensuite, exécutez vos scripts déclaratifs et paramétrés pour déployer vos modifications dans l’environnement de votre choix.

L’extrait du workflow GitHub Actions dans l’exemple suivant déploie un pipeline. Le workflow s’authentifie auprès de Snowflake en récupérant les valeurs nécessaires à partir des secrets précédemment configurés.

Pour déployer le pipeline, le flux de travail exécute les commandes snow git suivantes :

  • snow git fetch extrait la dernière version du référentiel GitHub vers la zone de préparation clonée du référentiel Git my_git_repo dans Snowflake.

  • snow git execute exécute les scripts Python et SQL dans le répertoire /scripts à partir de la branche main du référentiel.

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/snowflake-cli-action@v1.5
        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'"
Copy

Premiers pas avec Snowflake DevOps

Pour une démonstration interactive de l’utilisation de Snowflake DevOps, consultez le quickstart Premiers pas avec Snowflake DevOps.