Déployer et gérer DCM Projects

Cette rubrique décrit comment créer et déployer DCM Projects pour gérer les environnements Snowflake, y compris en tant que comptes.

La gestion d’un DCM project comprend les étapes suivantes :

  1. Préparer votre compte Snowflake pour un DCM project.

  2. Définir la configuration du projet et les objets dans les fichiers de projet.

  3. Créer un objet DCM Projects.

  4. Planifier pour prévisualiser les modifications proposées avant le déploiement.

  5. Déployer le projet.

  6. Maintenir le projet en suivant, en mettant à jour et en répétant le processus, si nécessaire.

Vous pouvez déployer en continu des modifications incrémentielles dans votre projet, ainsi que des modifications d’infrastructure de compte à grande échelle.

Snowflake recommande de déployer en continu des modifications incrémentielles et des ajouts à votre projet, plutôt que de passer de 0 à 100 modifications d’infrastructure de compte à grande échelle dans un seul déploiement.

Préparer un DCM project

Pour commencer avec DCM Projects, votre compte Snowflake doit remplir les conditions préalables suivantes :

  • Une base de données et un schéma dans lesquels vous pouvez créer votre objet DCM Projects

  • Un rôle disposant des privilèges nécessaires pour créer un objet DCM Projects et exécuter des requêtes sur un entrepôt

  • Pour la Snowflake CLI, un rôle disposant des privilèges nécessaires pour créer une zone de préparation temporaire

Cette section décrit les tâches que vous devez effectuer pour préparer l’installation de DCM Projects :

Note

Le référentiel DCM snowflake-labs est mis à jour en continu avec des ressources pour vous aider à démarrer.

  • Démarrages rapides et projets de démonstration : Clonez le référentiel dans un espace de travail Snowflake ou un dossier local pour tester les commandes DCM Projects et explorer les capacités DCM Projects.

  • Actions GitHub réutilisables : Actions composites pour l’analyse des manifestes, le test des connexions, la planification et le déploiement DCM Projects dans les pipelines CI/CD. Pour plus d’informations, voir Actions GitHub.

  • Exemple de workflow : Fichiers de workflow prêts à l’emploi qui composent les actions réutilisables en pipelines CI/CD.

Outils d’interface

Vous disposez des options d’interface suivantes pour DCM Projects.

Outil d’interface

Mieux adapté à

Snowsight

Un espace de travail dans Snowsight est un IDE Cloud natif Snowflake disponible dans votre compte.

  • Créez ou importez facilement les fichiers de définition DCM via l’UI.

  • Connectez-vous à un référentiel Git pour récupérer et envoyer des modifications.

  • Examinez, modifiez et déboguez les fichiers de définition.

  • Exécutez les commandes DCM PLAN et DEPLOY à l’aide de l’UI d’espace de travail.

  • Parcourez le catalogue de bases de données pour voir les objets DCM project et leur configuration, les objets gérés et l’historique de déploiement.

  • Sélectionnez un profil cible pour utiliser automatiquement la configuration de DCM project et de modèle associée.

IDE local avec la CLI Snowflake

L’interface la plus familière et la plus personnalisée pour les ingénieurs logiciels.

  • Créez et modifiez des fichiers de définition localement.

  • Connectez-vous à un référentiel Git pour récupérer et envoyer des modifications.

  • Commandes Snowflake CLI concises avec contexte de répertoire et indicateurs facultatifs.

  • Sortie au format enrichi et option pour enregistrer en tant que fichier .json.

  • Option pour exploiter la CLI Cortex Code pour le développement agentique ou le développement assisté.

  • Voir Snowflake CLI pour DCM Projects pour des informations sur l’installation et l’exécution de la Snowflake CLI dans votre IDE local.

Cortex Code

Un outil AI agentique pour Snowflake. Pour plus d’informations, voir Cortex Code pour DCM Projects.

  • Création assistée par l’AI ou agentique de fichiers de définition locaux.

  • Validation et débogage de code assistés par l’AI ou agentiques en exécutant une analyse statique et les commandes DCM PLAN.

Commandes SQL

  • Exécutez des commandes SQL à partir de Snowflake CLI REPL, des espaces de travail, des notebooks ou des feuilles de calcul.

  • Personnalisez les commandes avec des arguments supplémentaires.

  • Les mêmes commandes fonctionnent sur toutes les interfaces SQL Snowflake.

Cortex Code pour DCM Projects

Cortex Code est un outil AI agentique pour Snowflake. Lorsque la fonctionnalité DCM est activée, Cortex Code peut créer, migrer, déboguer et déployer DCM Projects de manière autonome. Il peut également travailler à vos côtés étape par étape.

Note

Cortex Code avec la fonctionnalité DCM est actuellement disponible via la CLI Cortex Code uniquement. Il n’est pas disponible dans Snowsight Workspaces.

La fonctionnalité DCM Cortex Code permet d’effectuer les opérations suivantes :

  • Échelonner un nouveau DCM project de zéro, y compris le fichier manifeste, la structure des dossiers et les fichiers de définition.

  • Créer et modifier des instructions DEFINE, des modèles Jinja et des macros.

  • Exécuter des commandes PLAN, DEPLOY, REFRESH, TEST et PREVIEW.

  • Interpréter la sortie du plan, diagnostiquer les défaillances et suggérer des correctifs.

  • Télécharger et inspecter les artefacts de déploiement.

  • Naviguer et expliquer un DCM project existant.

Pour commencer avec la fonctionnalité DCM Cortex Code, procédez comme suit :

  1. Installez la CLI Cortex Code comme décrit dans Installation de Cortex Code.

  2. Démarrez Cortex Code sur votre terminal.

  3. Utilisez la référence de la compétence $dcm ou mentionnez DCM dans votre invite en langage naturel pour interagir avec votre DCM Projects de manière conversationnelle.

Par exemple :

  • « Créer un nouveau projet DCM pour notre pipeline d’analyses »

  • « Planifier mon projet par rapport à la cible PROD »

  • « Pourquoi mon dernier plan a-t-il échoué ? »

  • « Ajouter une nouvelle définition de table dynamique pour les dépenses des clients »

Snowflake CLI pour DCM Projects

Snowflake CLI est une interface de ligne de commande pour Snowflake. Il s’agit d’un outil que vous pouvez utiliser pour interagir avec votre compte Snowflake depuis votre IDE local.

  1. Les projets DCM nécessitent la version 3.16 ou supérieure de Snowflake CLI. Installez ou mettez à niveau la Snowflake CLI comme décrit dans Installation de Snowflake CLI.

  2. Configurez votre connexion à votre compte Snowflake, comme décrit dans Configuration de la CLI Snowflake et connexion à Snowflake. Confirmez que vous disposez d’une connexion fonctionnelle :

    snow connection test
    
  3. Accédez au répertoire local de votre clone de référentiel Git. Par exemple :

    cd ./Quickstarts/DCM_Quickstart_1
    
  4. Consultez les commandes DCM Snowflake CLI disponibles :

    snow dcm --help
    

Intégration Git

Connectez-vous au référentiel Git dans lequel vos fichiers de définition DCM project sont stockés.

  1. Créez un nouvel espace de travail à partir d’un référentiel Git.

  2. Créez ou sélectionnez une branche Git pour les modifications que vous prévoyez d’apporter.

    Snowflake clone les fichiers de cette branche dans votre éditeur d’espace de travail.

  3. Accédez au dossier dans lequel se trouvent vos fichiers de définition DCM project ou dans lequel vous souhaitez les créer.

Créer une DCM project

Rôles et privilèges requis

Le rôle de l’utilisateur qui crée un objet DCM project doit disposer des rôles et privilèges suivants :

  • Le privilège CREATE DCM PROJECT ON SCHEMA :

    GRANT CREATE DCM PROJECT ON SCHEMA <schema_name> TO ROLE <role_name>;
    

Créer une DCM project

Créez un objet DCM project à l’aide de l’une des options suivantes.

CREATE [OR REPLACE] DCM PROJECT [IF NOT EXISTS] <my_project>
[COMMENT = 'my comment'];

Contrôle d’accès et privilèges de rôle

Vous pouvez définir le contrôle d’accès basé sur les rôles (RBAC) de l’objet DCM project au niveau du schéma sur les privilèges READ, MONITOR ou OWNERSHIP.

Ces privilèges sont indépendants du contrôle d’accès aux fichiers de définitions stockés dans un espace de travail, une zone de préparation ou un référentiel.

Privilège

Description

Opérations autorisées

READ

  • Indique si l’objet DCM project existe.

  • Répertorie les objets et les autorisations déployés par DCM project, qui sont visibles pour le rôle de l’utilisateur.

    Cela signifie que vous avez besoin de READ sur DCM project et de READ sur les objets eux-mêmes.

  • SHOW DCM PROJECTS LIKE “%project”

  • DESCRIBE DCM PROJECT <project>

  • SHOW ENTITIES IN DCM PROJECT <project>

MONITOR

  • Permet d’accéder à l’historique complet du déploiement, y compris à tous les artefacts.

  • Donne au rôle la possibilité d’analyser, de déboguer ou d’auditer les déploiements de production sans la possibilité de déployer directement les modifications.

  • Tous les privilèges READ

  • DESCRIBE DCM PROJECT <project> (avec la source et le chemin de déploiement du dernier déploiement)

  • INFORMATION_SCHEMA.DCM_DEPLOYMENT_HISTORY (project_name => “db.schema.project”)

  • SHOW DEPLOYMENTS IN DCM PROJECT <project>

  • LIST tous les fichiers du déploiement

  • GET tout accès aux fichiers contenus dans DCM project

OWNERSHIP

  • Le rôle utilisé pour créer l’objet DCM project est le propriétaire de ce projet.

  • Donne au rôle la possibilité de déployer des modifications.

  • Donne au rôle la possibilité de transférer la propriété du projet à un autre rôle lorsque le projet n’a pas encore été déployé.

  • Tous les privilèges MONITOR

  • EXECUTE DCM PROJECT <project> PLAN

  • EXECUTE DCM PROJECT <project> DEPLOY

  • EXECUTE DCM PROJECT <project> PREVIEW

  • EXECUTE DCM PROJECT <project> REFRESH

  • EXECUTE DCM PROJECT <project> TEST

  • DROP DCM PROJECT <project>

  • ALTER DCM PROJECT <project>

  • GRANT READ sur DCM PROJECT <project> TO ROLE <role2>

  • GRANT MONITOR sur DCM PROJECT <project> TO ROLE <role2>

Note

Comme les autres commandes Snowflake, EXECUTE DCM PROJECT tient compte du fait que les privilèges des rôles secondaires sont activés pour l’utilisateur qui exécute la commande. Exécutez USE SECONDARY ROLES NONE; afin de ne pas tirer parti des privilèges d’autres rôles que celui de propriétaire du projet. Cela garantit que le comportement du déploiement est cohérent entre les différents environnements lorsqu’il est exécuté par différents utilisateurs de service dotés du même rôle principal.

Propriété sur les objets gérés par DCM

Le rôle qui déploie un DCM project, dispose, par défaut, du privilège OWNERSHIP associé à tous les objets déployés.

Les définitions de projets peuvent inclure les instructions GRANT OWNERSHIP vers d’autres rôles. Snowflake recommande que le rôle de propriétaire DCM project n’accorde la propriété des objets gérés par DCM qu’à un autre rôle de niveau inférieur dont il dispose également. Le projet peut alors continuer à gérer cet objet, car le rôle de propriétaire du projet « hérite » des privilèges du nouveau rôle de propriétaire de l’objet.

Si le rôle de propriétaire DCM project accorde la propriété sur les objets gérés par DCM à un autre rôle dont il ne dispose pas, le projet ne peut plus gérer cet objet déployé, car le rôle de propriétaire du projet n’en est plus propriétaire. Les déploiements suivants échoueront. La définition de l’objet doit être supprimée du projet ou la propriété doit être restituée au rôle de propriétaire du projet.

Si vous souhaitez migrer des objets existants pour qu’ils soient gérés par un DCM project, le rôle propriétaire de l’objet DCM project doit également disposer de privilèges de propriété (directs ou hérités par d’autres rôles) sur l’objet à gérer par DCM project.

Note

S’il s’agit d’un objet migré, nous vous recommandons d’ajouter l’instruction GRANT OWNERSHIP correspondante aux définitions du projet pour s’assurer que l’état actuel et les définitions DCM project sont synchronisés.

Définir un DCM project

Un DCM project repose sur un fichier manifeste et un ou plusieurs fichiers de définition d’objets SQL. Ces fichiers sont généralement stockés et gérés dans un référentiel Git ou dans votre espace de travail local.

  • Le fichier manifeste

    • Spécifie un ou plusieurs environnements cibles avec des identificateurs de compte correspondants, des objets DCM project, des rôles propriétaires pour ces objets et des configurations de modélisation facultatives

    • En option, spécifie les valeurs par défaut de modélisation et une ou plusieurs configurations avec des valeurs pour les variables de modèle.

  • Les fichiers de définition d’objet

    • Définissez un ensemble d’objets Snowflake, d’autorisations et d’attentes que vous souhaitez gérer ensemble dans cet DCM project.

Consultez Créer un dossier DCM project pour stocker vos fichiers de définition pour savoir comment configurer un dossier DCM project et les fichiers de définition et comment utiliser les modèles pour définir votre DCM project.

Planifier un DCM project

La planification d’un DCM project permet d’effectuer un test pour prévisualiser les modifications avant le déploiement. Snowflake compare vos fichiers de définition de projet avec des objets existants et indique quels objets seront créés, modifiés ou supprimés. Aucun changement n’est apporté à votre compte.

Utilisez la planification pour examiner et valider les modifications avant de déployer un projet DCM. Vous pouvez spécifier des options telles qu’une configuration ou un chemin de sortie pour les résultats du plan.

Le PLAN imite la commande DEPLOY autant que possible, sauf qu’il n’exécute pas réellement les instructions DDL.

Important

Exécutez toujours la commande PLAN sur vos projets avant le déploiement pour vous assurer qu’il n’y a pas d’erreurs liées à la syntaxe, aux modèles, aux dépendances entre objets, aux privilèges d’accès, etc. Examinez la sortie du plan pour corriger les éventuelles erreurs, prévisualisez le Jinja généré avec les variables fournies et prévisualisez les modifications qui seront apportées une fois le déploiement effectué.

Le plan effectue les étapes suivantes :

  1. Affiche toutes les modèles Jinja avec le profil de configuration sélectionné ou les valeurs fournies au moment de l’exécution.

  2. Compare toutes les définitions à l’état actuel des entités qui ont été définies dans le cadre du dernier déploiement.

  3. Convertit toutes les instructions définies en instructions CREATE, ALTER, DROP, GRANT et REVOKE.

  4. Trie toutes les instructions en fonction de leurs interdépendances.

  5. Compile toutes les instructions.

Note

Bien que le PLAN détecte presque toutes les erreurs possibles qui peuvent se produire pendant le déploiement, il ne garantit pas un déploiement réussi.

Exécutez la commande PLAN

La commande PLAN prend les informations suivantes en entrée :

  • Chemin d’accès au fichier manifeste

    La CLI lit la cible du manifeste (indicateur default_target ou --target). Pour les commandes SQL, le chemin d’accès au fichier manifeste et le nom du projet doivent être indiqués.

  • Valeurs définies pour les variables Jinja (facultatif).

  • La templating_config de la cible sélectionne automatiquement le profil de configuration. Pour les commandes SQL, utilisez la clause USING CONFIGURATION pour spécifier le profil.

  • Une ou plusieurs valeurs du profil de configuration à remplacer (facultatif).

Les exemples suivants montrent comment exécuter la commande PLAN.

Exécutez la commande snow dcm plan dans votre terminal IDE local ou dans le cadre d’un workflow Git.

Un exemple de commande CLI permettant de planifier un projet DCM à partir d’un répertoire local :

cd ./Quickstarts/DCM_Project_Quickstart_1/
snow dcm plan

Un exemple de commande CLI permettant de planifier un projet DCM à partir d’une zone de préparation Snowflake ou d’un clone de référentiel Git :

snow dcm plan --target PROD_US --save-output

Un exemple de commande CLI permettant de planifier un projet DCM avec des arguments facultatifs :

snow dcm plan
--variable "wh_size='MEDIUM'" --variable "teams = ['TEAM_A', 'TEAM_B']"
--save-output

Les variables doivent être placées entre guillemets doubles, avec des guillemets simples supplémentaires pour les valeurs de type chaîne. Les listes de valeurs doivent être placées entre crochets.

Commandes CLI Snowflake

Chemin du fichier de définition

Vous disposez des options suivantes pour indiquer l’emplacement des fichiers de manifeste et de définition.

  • À partir d’un chemin d’accès à l’espace de travail

    L’interface utilisateur de Snowsight liste automatiquement toutes les définitions DCM project dans l’espace de travail actuel. Vous pouvez sélectionner l’un de ces chemins et les espaces de travail l’utiliseront pour exécuter des commandes DCM.

    Si vous voulez exécuter manuellement des commandes SQL dans les espaces de travail, vous pouvez également indiquer ce même chemin dans l’un de vos espaces de travail.

    Conseil : le menu à trois points situé derrière chaque fichier de votre espace de travail vous permet de copier le chemin d’accès complet de ce fichier dans votre code SQL.

    Un exemple de commande SQL permettant de planifier un projet DCM à partir d’un chemin d’espace de travail :

    EXECUTE DCM PROJECT DCM_PROJECT_DEV
      PLAN
      USING CONFIGURATION DEV
    FROM
      'snow://workspace/USER$.PUBLIC.DEFAULT$/versions/live/Quickstarts/DCM_Project_Quickstart_1'
    
  • À partir d’un clone de référentiel Git local sur votre disque

    Sélectionnez le répertoire qui contient voter fichier manifest.yml avant d’exécuter la commande CLI dans votre IDE local. Vous pouvez également spécifier un autre répertoire local contenant le manifeste et les définitions que vous souhaitez utiliser.

    Un exemple de commande CLI permettant de planifier un DCM project à partir du répertoire actuel d’un référentiel Git local :

    cd ./Quickstarts/DCM_Project_Quickstart_1/
    
    snow dcm plan
    
    snow dcm plan --target PROD
    

    Un exemple de commande CLI permettant de planifier un DCM project à partir d’un répertoire différent dans un clone de référentiel Git local :

    snow dcm plan DCM_PROJECT_DEV --configuration DEV --from ./Quickstarts/DCM_Project_Quickstart_2/
    
  • Depuis votre référentiel distant dans un workflow

    La même syntaxe CLI peut être utilisée lorsque les commandes DCM sont exécutées dans un workflow CI/CD. Vous pouvez appeler le CLI directement ou utiliser les actions GitHub réutilisables du référentiel DCM snowflake-labs, qui traitent la configuration CLI, l’authentification et les commandes DCM en interne.

    Exemple d’utilisation de l’action dcm-plan réutilisable :

    steps:
      - uses: actions/checkout@v4
      - uses: Snowflake-Labs/snowflake-dcm-projects/actions/dcm-plan@v1
        with:
          target: PROD
          project-path: Quickstarts/DCM_Project_Quickstart_1/
          snowflake-user: ${{ env.SNOWFLAKE_USER }}
    
  • À partir d’un clone de référentiel Stage ou Git dans Snowflake

    Si vous souhaitez exécuter une PROCEDURE ou une TASK dans Snowflake qui exécute des commandes DCM, cette commande SQL peut indiquer un chemin absolu vers une zone de préparation Snowflake ou un clone de référentiel Git au sein du compte.

    Pour les clones du référentiel Git, envisagez d’abord d’exécuter ALTER GIT REPOSITORY FETCH pour disposer de la dernière version.

    Les chemins '@...' ne peuvent être utilisés que lors de l’exécution de commandes DCM SQL.

    Un exemple de commande SQL permettant de planifier un projet DCM à partir d’une zone de préparation ou d’un clone de référentiel Git dans Snowflake :

    EXECUTE DCM PROJECT DCM_PROJECT_DEV
      PLAN
      USING CONFIGURATION DEV
    FROM
      '@DCM_DEMO.DEPLOY.DCM_DEMO/branches/main/Quickstarts/DCM_Project_Quickstart_1/'
    

Sortie du plan

Pour le format de sortie PLAN et DEPLOY, y compris le schéma JSON et des exemples, consultez la section dédiée à la sortie PLAN et DEPLOY de la référence de la commande EXECUTE DCM PROJECT.

Déployer un DCM project

Lorsque vous déployez un DCM project, les actions suivantes sont effectuées :

  • Les objets qui sont définis mais qui n’existent pas encore sont créés.

  • Les objets qui existent déjà mais qui diffèrent de la définition actuelle sont modifiés.

  • Les objets qui existent déjà tels que définis sont ignorés.

  • Les objets qui existent déjà mais qui ne sont plus définis sont supprimés.

Le même comportement s’applique aux autorisations et aux attentes en matière de qualité des données définies dans le projet.

Important

Pour éviter toute perte de données involontaire, exécutez toujours PLAN et examinez la sortie avant l’exécution de DEPLOY.

Chaque DCM project ne peut avoir qu’une seule instance déployée à tout moment. Plusieurs profils de configuration ne peuvent pas coexister. Le déploiement de la configuration B avec le même DCM project supprimera tous les objets des autres configurations précédentes qui ne sont pas définis dans B.

Créez un DCM project pour chaque environnement cible. Le DCM project pour chaque environnement peut alors pointer vers les mêmes fichiers de définition, mais se déployer indépendamment avec des valeurs différentes pour chaque variable, comme suffix => 'DEV_JS', afin qu’ils puissent exister indépendamment côte à côte sur le même compte Snowflake.

Vous pouvez remplacer les valeurs des variables sélectionnées lors de l’exécution si vous souhaitez utiliser un profil prédéfini avec une légère variation.

Par exemple :

EXECUTE DCM PROJECT DCM_DEMO.PROJECTS.DCM_PROJECT_DEV
  DEPLOY
  USING CONFIGURATION DEV (suffix=>'DEV_USER', user=>'JANEDOE')
FROM
  'snow://workspace/USER$.PUBLIC.DEFAULT$/versions/live/DCM_Project_Quickstart_1';
snow dcm deploy DCM_PROJECT_DEV --configuration DEV --variable "suffix='DEV_USER'" --variable "user='JANEDOE'"

Chaque tentative de déploiement (réussie, échouée ou annulée) dispose d’un numéro de déploiement, par exemple DEPLOYMENT$1. Vous pouvez éventuellement spécifier une chaîne unique en tant qu’alias de déploiement afin de nommer des déploiements individuels pour une meilleure observabilité dans l’historique de déploiement. Considérez l’alias de déploiement comme un message de validation pour votre changement de code.

Chaque commande DEPLOY exécute d’abord un PRE-PLAN interne dans le cadre du déploiement. Si lePRE-PLAN réussit, alors DEPLOY est exécuté directement après. Il n’existe aucune option permettant d’intercepter ou d’examiner cette étape interne du plan. Le PRE-PLAN est exécuté pour réduire davantage le risque de défaillance lors du déploiement. Si un DEPLOY échoue, vous pouvez voir dans le message d’erreur s’il a échoué lors due l’étape PRE-PLAN ou DEPLOY. L’échec lors de l’étape PRE-PLAN est similaire à PLAN ; aucune modification DDL n’est exécutée.

Important

L’échec lors de l’étape DEPLOY peut entraîner une exécution partielle des modifications définies. Cela peut potentiellement entraîner un état indéfini pour certains des objets gérés. Dans la plupart des cas, il suffit de remédier à la cause profonde et de relancer DEPLOY pour restaurer l’état cible défini.

Le chemin cible du fichier de sortie DEPLOY ne peut pas être personnalisé. Les artefacts de déploiement sont toujours stockés dans l’DCM project.

Exécutez la commande DEPLOY

Pour exécuter la commande DEPLOY, fournissez les entrées suivantes :

  • Chemin d’accès au fichier manifeste.

  • Un profil de configuration doit être nommé si les profils de configuration sont définis dans le manifeste.

  • De manière facultative, les valeurs du profil de configuration qui remplacent les valeurs par défaut.

  • De manière facultative, un alias de déploiement.

Les exemples suivants montrent comment exécuter la commande DEPLOY.

EXECUTE DCM PROJECT DCM_DEMO.PROJECTS.DCM_PROJECT_DEV
  DEPLOY
FROM
  'snow://workspace/USER$.PUBLIC.DEFAULT$/versions/live/Quickstarts/DCM_Project_Quickstart_1';

Un exemple de commande SQL pour déployer un DCM project lors de l’utilisation de Jinja avec des profils de configuration, mais en remplaçant wh_size et teams :

EXECUTE DCM PROJECT DCM_DEMO.PROJECTS.DCM_PROJECT_DEV
  DEPLOY AS "testing 2 teams"
  USING CONFIGURATION DEV (wh_size => 'MEDIUM', teams => ['TEAM_A', 'TEAM_B'])
FROM
  'snow://workspace/USER$.PUBLIC.DEFAULT$/versions/live/Quickstarts/DCM_Project_Quickstart_1';

Consultez Sortie PLAN et DEPLOY pour la structure de sortie du plan standard.

Gérer un DCM project

Afficher tous les objets gérés par un DCM project

La commande SHOW ENTITIES IN DCM PROJECT vous permet de voir une liste de tous les objets Snowflake qui sont actuellement gérés par un DCM project spécifique. Elle fournit une liste de noms complets pour tous les objets. Pour voir les résultats, vous devez disposer du privilège READ sur l’DCM project et des privilèges pour voir l’objet géré lui-même.

Note

Le résultat ne correspond pas nécessairement aux objets du déploiement le plus récent. Les objets qui ont été supprimés manuellement ou détachés du projet n’apparaissent pas dans les résultats.

Vous pouvez utiliser LIKE pour effectuer une recherche par nom ou utiliser un opérateur de flux pour poursuivre le traitement ou filtrer le jeu de résultats.

De même, vous pouvez SHOW GRANTS et SHOW FUTURE GRANTS qui sont définis et déployés avec ce projet.

Exemples pour voir tous les objets qui sont actuellement gérés par un DCM project :

SHOW ENTITIES LIKE '%DASHBOARD%' IN DCM PROJECT DCM_DEMO.PROJECTS.DCM_PROJECT_DEV;

SHOW ENTITIES IN DCM PROJECT DCM_DEMO.PROJECTS.DCM_PROJECT_DEV
  ->> SELECT * FROM $1 WHERE "object_type" = 'DYNAMIC_TABLE';

SHOW [FUTURE] GRANTS IN DCM PROJECT DCM_DEMO.PROJECTS.DCM_PROJECT_DEV;

Détacher des objets d’un DCM project

À l’aide de la commande ALTER <objet> avec la clause UNSET DCM PROJECT, vous pouvez détacher un objet qui a été déployé et qui est maintenant géré par un DCM project. La commande supprime l’association entre l’objet et l’DCM project sans supprimer l’objet. Vous pouvez utiliser cette commande lorsque vous souhaitez commencer à gérer un objet via un DCM project différent.

Assurez-vous de supprimer l’instruction DEFINE correspondante de vos fichiers de définition de projet avant de le déployer à nouveau. Dans le cas contraire, l’objet sera réintégré dans le DCM project.

Un exemple de commande SQL pour détacher un objet d’un DCM project :

ALTER TABLE MY_DB.MY_SCH.MY_TABLE
  UNSET DCM PROJECT;

Vous ne pouvez pas détacher des autorisations ou des exécutions déployées d’un projet DCM.

Supprimer un DCM project

Lorsqu’un objet DCM project est supprimé, l’ensemble des entités gérées, des autorisations et des attentes restent en place comme « non gérés ».

Important

La suppression ou le remplacement d’un objet DCM project vous fait perdre tous les artefacts de l’historique de déploiement que l’objet contient.

DROP DCM PROJECT [IF EXISTS] <my_project>;

Automatiser un déploiement DCM project

Bonnes pratiques CI/CD

Suivez ces pratiques lorsque vous automatisez des déploiements à l’aide de pipelines CI/CD :

  • Un DCM project ciblant un environnement de non-production doit appartenir à un rôle différent de son homologue de production afin d’éviter des déploiements accidentels vers la production.

  • Un DCM project ciblant un environnement de production doit appartenir à un rôle dédié aux déploiements de production avec des privilèges d’accès spécifiquement adaptés qui sont juste suffisants pour déployer tous les objets du projet.

    • Évitez d’utiliser les rôles d’administrateur général pour la propriété DCM project. Accordez de tels rôles uniquement aux utilisateurs des services, et non aux développeurs individuels.

    • Accordez le rôle de déploiement de production dédié uniquement aux utilisateurs du service, et non aux développeurs individuels.

    • Limitez la propriété au rôle de déploiement de production pour garantir l’immuabilité de l’infrastructure ou des produits de données critiques.

      Si le rôle de déploiement de production dédié accorde la propriété des objets de production à d’autres rôles, les utilisateurs qui se voient attribuer ces rôles peuvent toujours modifier ou supprimer les objets de production.

Actions GitHub

Le référentiel labos-snowflakeDCM _ fournit un ensemble d’actions GitHub composites réutilisables qui automatisent les pipelines DCM Projects. Chaque action traite une étape du cycle de vie, et vous pouvez les référencer à partir de vos propres workflows pour créer des pipelines CI/CD de bout en bout. Seule la syntaxe du workflow diffère selon les plateformes ; les mêmes concepts CI/CD s’appliquent aux pipelines Azure DevOps, GitLab CI/CD, Bitbucket et autres.

Note

Les actions GitHub dans le référentiel DCM snowflake-labs sont fournis tels quels à des fins d’évaluation. Elles ne sont pas officiellement prises en charge par Snowflake. Utilisez-les à vos propres risques.

Les actions réutilisables suivantes sont disponibles :

Action

Description

dcm-parse-manifest

Analyse manifest.yml et génère les noms des cibles sous la forme d’un tableau JSON pour les stratégies matricielles.

dcm-connection-test

Teste la connectivité Snowflake, valide le fait que le rôle de connexion correspond au project_owner du manifeste, et vérifie si l’objet DCM project existe déjà

dcm-plan

Exécute snow dcm plan, résume l’ensemble des modifications (nombre de CREATE ,ALTER, DROP par domaine d’objet), et télécharge les artefacts de plan. (Facultatif) Publie le résumé du plan comme commentaire sur la pull request associée.

dcm-deploy

Déploie l”DCM project avec détection de suppression de données facultative, actualisation de table dynamique, test d’attente et scripts SQL de post-déploiement. Publie éventuellement un résumé du déploiement dans la pull request.

Pour utiliser une action dans votre flux de travail, faites-y référence avec :

- uses: Snowflake-Labs/snowflake-dcm-projects/actions/<action-name>@v1

Pour une documentation complète des entrées et sorties de chaque action, voir les `actions README<https://github.com/Snowflake-Labs/snowflake-dcm-projects/blob/main/actions/README.md>`__.

Conditions préalables

Avant d’utiliser les actions GitHub réutilisables, effectuez les étapes de configuration suivantes :

  • Stocker les fichiers DCM project dans un référentiel Git.

  • Créer un environnement GitHub pour chaque cible de manifeste (par exemple, DCM_STAGE, DCM_PROD_US). Le nom de l’environnement doit correspondre au nom de la cible dans votre manifest.yml.

  • Définir les variables SNOWFLAKE_USER et``DCM_PROJECT_PATH`` dans le bloc env du workflow ou comme variables de référentiel GitHub.

  • Accordez au workflow les autorisations nécessaires :

    permissions:
      id-token: write       # Required for OIDC authentication
      contents: read
      pull-requests: write  # Required only when using comment-on-pr
    
Authentification

Toutes les actions s’authentifient à l’aide de l’`action GitHub CLI Snowflake<https://github.com/snowflakedb/snowflake-cli-action>`__. OIDC (OpenID Connect) est l’approche recommandée, car elle utilise les jetons d’identité intégrés de GitHub afin qu’aucun mot de passe ou clé privée ne doive être stocké en tant que secrets.

Pour configurer l’authentification OIDC, créez un utilisateur de service Snowflake avec une identité de charge de travail qui fait confiance au fournisseur OIDC de GitHub :

CREATE USER SVC_GITHUB_ACTIONS
  TYPE = SERVICE
  DEFAULT_ROLE = 'PUBLIC'
  COMMENT = 'GitHub Actions service user for CI/CD via OIDC'
  WORKLOAD_IDENTITY = (
    TYPE = OIDC
    ISSUER = 'https://token.actions.githubusercontent.com'
    SUBJECT = 'repo:<owner>/<repo>:environment:<env_name>'
  );

Remplacez <owner>/<repo> par votre référentiel GitHub et <env_name> avec le nom de l’environnement GitHub (par exemple, DCM_STAGE). Si vous avez plusieurs environnements, créez un utilisateur de service distinct par environnement ou utilisez a personnalisation des revendications d’objet. Accordez ensuite à l’utilisateur du service le rôle spécifié comme project_owner dans votre manifeste.

Si vous ne pouvez pas utiliser OIDC, les actions prennent également en charge le mot de passe, PAT, et l’authentification par paire de clés. Voir la ` section d’authentification README des actions <https://github.com/Snowflake-Labs/snowflake-dcm-projects/blob/main/actions/README.md#authentication>`__ pour les instructions d’installation.

Exemples de workflows

Le répertoire `GitHub _workflows<https://github.com/Snowflake-Labs/snowflake-dcm-projects/tree/main/GitHub_workflows>`_ _ dans le référentiel DCM snowflake-labs contient des fichiers de workflow prêts à l’emploi qui composent les actions réutilisables dans des pipelines CI/CD complets. Vous pouvez les copier dans le répertoire``.github/workflows/`` de votre référentiel et les personnaliser pour votre projet. Pour des instructions de configuration complètes, voir les `exemples de workflow README<https://github.com/Snowflake-Labs/snowflake-dcm-projects/blob/main/GitHub_workflows/README.md>`__.

Tous les exemples de workflows lisent le rôle account_identifier et project_owner Snowflake directement à partir des cibles du manifeste, de sorte que la configuration spécifique à l’environnement existe dans le manifest.yml contrôlé par la version plutôt que dans des secrets GitHub dupliqués. Seules les identifiants de connexion de l’utilisateur du service sont stockés en tant que secrets.

Les exemples de workflows illustrent les modèles suivants, applicables à toute configuration DCM Projects CI/CD :

  • Configuration basée sur le manifeste : Chaque workflow lit account_identifier, project_owner, et project_name à partir des cibles du manifeste, en conservant la configuration de l’environnement à un seul endroit.

  • Protection contre la suppression des données Le workflow de déploiement détecte le opérations DROP destructrices sur les objets contenant des données, tels que les bases de données, les schémas, les tables et les zones de préparation, et bloque le déploiement s’il en détecte.

  • Promotion séquentielle de la zone de préparation vers la production Le déploiement en production ne commence qu’une fois que le déploiement de la zone de préparation a abouti, que les tables dynamiques ont été actualisées et que les tests de qualité des données ont été validés.

  • Commentaires de la pull request : Les résumés des plans et des déploiements sont publiés sous forme de commentaires sur la pull request d’origine.

Exemple de workflow : Tester les connexions
  • Fichier de configuration de workflow : DCM_1_Test_Connections.yml

  • Déclencheur : Manuel avec l’événement workflow_dispatch

Ce workflow valide le fait que l’utilisateur du service GitHub Actions peut se connecter à chaque environnement cible défini dans le manifeste. Utilisez-le lorsque vous configurez un nouveau référentiel, l’onboarding d’un nouveau compte ou le débogage de problèmes d’authentification. Le workflow comprend les étapes suivantes :

  • Analyse tous les noms cibles de manifest.yml de manière dynamique.

  • Utilise une stratégie matricielle GitHub Actions pour tester chaque cible en parallèle.

  • Pour chaque cible, vérifie la connexion Snowflake, signale le compte, l’utilisateur et le rôle connectés, et vérifie si le rôle connecté correspond au propriétaire DCM project.

  • Indique si l’objet DCM project existe déjà et si l’utilisateur du service dispose des privilèges de déploiement.

Exemple de workflow : Tester PR vers principal
  • Fichier de configuration de workflow : DCM_2_Test_PR_to_main.yml

  • Déclencheur : Demande d’extraction ouverte, synchronisée ou rouverte par rapport à la branche main

Ce workflow exécute un PLAN par rapport à la cible de production en tant que test d’intégration pour chaque pull request. Il fournit aux réviseurs un résumé des modifications planifiées directement sur la demande d’extraction. Le workflow comprend les étapes suivantes :

  • Exécute snow dcm plan par rapport à la cible PROD.

  • Analyse plan_result.json pour résumer les opérations CREATE, ALTER et DROP regroupées par domaine d’objets.

  • Importe les artefacts de plan pour une inspection ultérieure.

  • Publie le résumé du plan sous forme de commentaire sur la pull request.

  • La vérification échoue si PLAN échoue, ce qui bloque la fusion.

Exemple de workflow : Déployer sur Prod
  • Fichier de configuration de workflow : DCM_3_Deploy_to_Prod.yml

  • Déclencheur : Pousser vers la branche main (généralement une demande d’extraction fusionnée)

Ce worflow planifie et déploie en une seule cible de production. Utilisez-le lorsque vous n’avez pas besoin d’environnement de mise en zone de préparation ou lorsque la mise en zone de préparation est gérée séparément. Le workflow comprend les étapes suivantes :

  1. Plan : Exécute snow dcm plan et résume l’ensemble des modifications.

  2. Détection des pertes de données : Blocs le pipeline si le plan contient des opérations DROP pour les bases de données, les schémas, les tables ou les zones de préparation.

  3. Déployer : Exécute snow dcm deploy.

  4. Scripts post (facultatif) : Exécute les scripts post-hook SQL avec injection de variables Jinja.

  5. Actualiser les tables dynamiques (facultatif) : Exécute snow dcm refresh pour appliquer toute nouvelle logique de transformation.

  6. Tester les attentes (facultatif) : Exécute snow dcm test pour valider les attentes en matière de qualité des données.

Après le déploiement, le workflow publie éventuellement un résumé de l’état dans la pull request d’origine.

Exemple de workflow : Déployer sur une zone de préparation puis en production
  • Fichier de configuration de workflow : DCM_4_Deploy_to_Stage_then_Prod.yml

  • Déclencheur : Pousser vers la branche main (généralement une demande d’extraction fusionnée)

Ce workflow met en œuvre un pipeline de promotion séquentielle. Les modifications sont d’abord déployées dans la zone de préparation, validées de bout en bout, puis promues en production. Si toutes les étapes échouent, le pipeline s’arrête et la production n’est pas affectée.

La séquence de déploiement pour chaque cible (STAGE, puisPROD) comprend :

  1. Plan : Exécute snow dcm plan et résume l’ensemble des modifications.

  2. Détection des pertes de données : Blocs le pipeline si le plan contient des opérations DROP pour les bases de données, les schémas, les tables ou les zones de préparation.

  3. Déployer : Exécute snow dcm deploy.

  4. Scripts post (facultatif) : Exécute les scripts post-hook SQL avec injection de variables Jinja.

  5. Actualiser les tables dynamiques (facultatif) : Exécute snow dcm refresh pour appliquer toute nouvelle logique de transformation.

  6. Tester les attentes (facultatif) : Exécute snow dcm test pour valider les attentes en matière de qualité des données.

Le déploiement de la production ne démarre qu’après l’échec de toutes les étapes de mise en zone de préparation. Une fois toutes les tâches terminées, le workflow publie éventuellement un résumé de l’état final dans la pull request d’origine.

Questions fréquemment posées (FAQ)

Comment renommer un objet existant ?
  1. Exécutez une commande ALTER en dehors du projet DCM.

  2. Modifiez la définition.

  3. Exécutez PLAN pour vérifier que la nouvelle définition correspond au nouvel état (aucune modification dans PLAN).

  4. Exécutez DEPLOY pour enregistrer le nouvel état.

Comment déployer des objets qui ne sont pas encore pris en charge par des instructions DEFINE ?

Vous pouvez exécuter des instructions CREATE IF NOT EXISTS ou CREATE OR REPLACE dans un script SQL distinct après l’exécution de votre plan de projet ou déploiement DCM.

Ces deux options prennent en charge les modèles Jinja2 et l’exécution à blanc (l’exécution à blanc effectue le rendu des modèles Jinja sans vérifier que la compilation SQL s’est bien déroulée).

Par exemple :

EXECUTE DCM PROJECT my_project
  PLAN ...
USING ...
FROM ...

EXECUTE IMMEDIATE
FROM
  'snow://workspace/USER$.PUBLIC.DEFAULT$/versions/head/DCM_Project_Quickstart_1/hooks/post_hook.sql'
  USING (db => 'DEV')
  dry_run = TRUE      -- shows the rendered Jinja but does not verify successful compilation
;