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 DCM (recommandé)¶
Les projets DCM (Database Change Management Projets) fournissent une approche déclarative, basée sur l’infrastructure, pour gérer votre environnement Snowflake. Au lieu d’écrire des scripts impératifs qui spécifient chaque étape, vous définissez l’état cible souhaité de vos objets. Snowflake compare ces définitions à l’état actuel et détermine les changements nécessaires.
Un projet DCM se compose de :
Un fichier manifeste (
manifest.yml) qui spécifie les cibles de déploiement, les rôles du propriétaire et les configurations de modélisation pour chaque environnement.Fichiers de définition (fichiers SQL sous``sources/definitions/``) fichiers qui contiennent les instructions DEFINE pour vos objets Snowflake, les instructions GRANT pour le contrôle d’accès, et les instructions ATTACH pour les attentes en matière de qualité des données.
L’exemple suivant montre un fichier de définition qui crée une infrastructure pour plusieurs équipes utilisant la modélisation Jinja2 :
Pour une documentation complète sur les projets DCM, y compris comment configurer vos fichiers de projet, gérer plusieurs environnements et automatiser des déploiements, voir:doc:/user-guide/dcm-projects/dcm-projects-overview.
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.
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 :
Ou à l’aide de SQL :
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) |
|
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 |
|
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 |
|
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 |
|
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 :
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 :
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.
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 :
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/>`_.