DevOps avec Snowflake

Snowflake fournit des outils et des pratiques pour gérer vos environnements Snowflake en tant que code, en validant les changements avant qu’ils n’atteignent la production et en automatisant les déploiements via des pipelines CI/CD.

Qu’est-ce que DevOps avec Snowflake ?

DevOps avec Snowflake intègre les meilleures pratiques de l’ingénierie logicielle à la gestion de l’infrastructure de données. Les principes fondamentaux sont les suivants :

  • Définir comme code. Déclarez l’état souhaité de vos objets Snowflake dans des fichiers contrôlés par version. Snowflake détermine et applique les changements nécessaires (créer, modifier ou détruire) pour atteindre cet état.

  • Valider avant le déploiement. Prévisualisez les changements proposés dans une étape du plan avant de les appliquer à votre compte. Examinez les créations, les modifications et les suppressions, puis déployez lorsque vous êtes sûr que les modifications sont correctes.

  • Automatiser avecCI /CD . Intégrez Snowflake dans vos pipelines CI/CD existants pour que les déploiements soient déclenchés par des pull requests (demandes d’extraction), des fusions ou des exécutions planifiées plutôt que par des étapes manuelles.

L’approche recommandée est d’utiliser des projets DCM (Database Change Management Projets), qui unifient la gestion déclarative des objets, la validation du plan puis du déploiement, le ciblage multi-environnements et l’automatisation CI/CD dans un seul flux de travail.

Définir les objets Snowflake comme du code

Projets dbt sur Snowflake

Les projets dbt sur Snowflake vous permettent de déployer et d’exécuter les projets ` dbt Core<https://www.getdbt.com/>`__ en tant qu’objets Snowflake natifs. Vous définissez des transformations SQL dans les modèles dbt, vous les déployez en tant qu’objet DBTPROJECT versionné et les exécutez avec Snowflake SQL ou la CLI de Snowflake. Vous pouvez planifier des exécutions avec des tâches Snowflake et intégrer le déploiement dans des pipelines CI/CD.

Pour plus d’informations, voir Projets dbt sur Snowflake.

Alternative : CREATEORALTER avec scripts versionnés

Pour les modifications d’objet individuels en dehors d’un projet DCM, vous pouvez utiliser 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 distant, vous pouvez revenir à une version antérieure en exécutant 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;

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 le langage dans lequel vous êtes le plus productif.

Valider et prévisualiser les changements

Avant de déployer des modifications dans votre compte Snowflake, vous pouvez prévisualiser les modifications proposées pour vérifier qu’elles correspondent à votre intention.

Planifier avec des projets DCM

Les projets DCM utilisent un modèle de planification, puis de déploiement. La commande PLAN compare vos fichiers de définition à l’état actuel de votre compte et produit une liste des changements proposés sans modifier quoi que ce soit.

Vous pouvez exécuter un plan à l’aide de la CLI Snowflake :

snow dcm plan --target PROD

Ou à l’aide de SQL :

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

Examinez la sortie pour confirmer les créations, les modifications et les suppressions attendues avant de poursuivre le déploiement.

Automatiser le déploiement avec CI/CD

Vous pouvez intégrer Snowflake à vos pipelines CI/CD afin que les déploiements soient déclenchés automatiquement par des événements tels que les fusions de pull requests, les push de branches ou les exécutions planifiées.

La table suivante mappe les tâches de pipeline CI/CD communes aux commandes Snowflake CLI correspondantes :

Tâche de pipeline

Commande CLI

Description

Planifier sur demande d’extraction (pull request)

snow dcm plan

Génère un plan qui montre les changements qui seraient appliquées à l’environnement cible. Vous pouvez publier la sortie du plan sous la forme d’un commentaire PR pour vérification.

Déployer sur la fusion

snow dcm deploy

Applique les changements planifiés à l’environnement cible. S’exécute généralement après qu’un PR est fusionné avec la branche principale.

Actualiser les tables dynamiques

snow dcm refresh

Déclenche une actualisation des tables dynamiques après le déploiement pour garantir que les données en aval sont à jour.

Tester les attentes

snow dcm test

Exécute les contrôles d’attente définis dans votre projet DCM pour vérifier que le déploiement a produit les résultats attendus.

Actions GitHub

Vous pouvez utiliser GitHub Actions pour automatiser les tâches qui constituent un pipeline CI/CD.

Pour une authentification sécurisée, Snowflake recommande d’utiliser la fédération d’identité de charge de travail (WIF) avecOpenID Connect (OIDC) au lieu d’identifiants statiques comme des mots de passe ou des clés privées. Avec WIFOIDC, GitHub Actions demande un jeton de courte durée de vie auprès du fournisseur OIDC de GitHub, et Snowflake vérifie le jeton directement. Aucun secret à longue durée de vie n’est stocké dans votre référentiel.

Pour configurer WIFOIDC, créez un utilisateur de service Snowflake qui fait confiance au fournisseur OIDC de GitHub :

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>'
  );

Pour plus d’informations sur la configuration de la revendication de sujet et la WIF en général, voir:doc:/user-guide/workload-identity-federation.

L’exemple suivant montre un workflow qui utilise WIFOIDC et les projets DCM pour planifier et déployer les changements sur push à la branche main :

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

Pour plus d’informations sur la configuration de CI/CD avec la CLI Snowflake, y compris les méthodes d’authentification alternatives, voir:doc:/developer-guide/snowflake-cli/cicd/integrate-ci-cd.

Gérer les environnements

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 les risques de conséquences involontaires et de corruption des données.

Profils de connexion pour le ciblage d’environnement

Avec les projets DCM, vous pouvez définir plusieurs cibles de déploiement dans votre fichier manifest.yml. Chaque cible correspond à un compte Snowflake (ou base de données), à un objet de projet, à un rôle de propriétaire et à une configuration de modèle spécifiques. Les mêmes fichiers de définition peuvent être déployés dans tous les environnements dont les paramètres spécifiques à l’environnement sont appliqués par le biais de profils de configuration.

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"

Pour les modèles d’entreprise tels que les configurations de multi-projets et la collaboration en équipe, voir:doc:/user-guide/dcm-projects/dcm-projects-enterprise.

Avancé : Paramétrage Jinja pour les scripts personnalisés

Les projets DCM prennent en charge nativement la création de modèles Jinja2 dans les fichiers de définition. Vous pouvez utiliser des variables de modèle, des boucles, des conditions, des macros et des dictionnaires pour rendre vos définitions réutilisables dans tous les environnements. Les valeurs des variables proviennent de profils de configuration dans le fichier manifest.yml ou de remplacements de l’environnement d’exécution.

Pour plus de détails sur les modèles DCM, voir:doc:/user-guide/dcm-projects/dcm-projects-files .

Vous pouvez également paramétrer des scripts SQL autonomes (en dehors de projets DCM) utilisant Jinja2 avec EXECUTE IMMEDIATE FROM. La CLI Snowflake vous permet également de transmettre des variables d’environnement aux scripts Python.

Pour modifier une cible de déploiement, par exemple, vous remplacez le nom de la base de données cible par une variable Jinja telle que {{ environment }} dans les scripts SQL, ou 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();

Prise en main

Pour commencer avec les projets DCM, voir:doc:/user-guide/dcm-projects/dcm-projects-overview pour un aperçu complet de la fonctionnalité, y compris comment configurer vos fichiers de projet, configurer les environnements et déployer les modifications.

Pour les exemples de projets, les modèles CI/CD et les démarrages rapides, voir le référentiel `snowflake-labs DCM référentiel<https://github.com/Snowflake-Labs/snowflake_dcm_projects>`_ _.

Pour suivre un tutoriel étape par étape, essayez le guide de démarrage rapide `Getting Started with Snowflake DCM Projects<https://www.snowflake.com/en/developers/guides/get-started-snowflake-dcm-projects/>`_.