Intégration de CI/CD à Snowflake CLI

Snowflake CLI intègre les systèmes et frameworks CI/CD populaires (intégration continue et livraison continue), tels que GitHub Actions, afin d’automatiser efficacement vos flux de travail Snowflake pour SQL, Snowpark, Native Apps ou Notebooks.

Note

Les prochaines versions incluront la prise en charge de Jenkins et d’Azure DevOps.

L’illustration suivante montre un flux de travail CI/CD typique dans Snowflake CLI.

Flux de travail CI/CD Snowflake

Étapes du flux de travail CI/CD

  1. Magasin : Configurez un référentiel Git distant pour gérer vos fichiers Snowflake en toute sécurité.

  2. Code : Développez votre code Snowflake à l’aide d’un IDE ou de Snowsight, adapté à vos préférences.

  3. Installer : Installez Snowflake CLI, et approvisionnez votre fournisseur CI/CD préféré, tel que GitHub Actions.

  4. Déployer : Automatisez le déploiement en combinant Snowflake CLI avec l’outil CI/CD de votre choix.

  5. Surveiller : Suivez les performances du code et du flux de travail dans Snowflake à l’aide de Snowflake Trail pour obtenir des informations en temps réel.

  6. Itérer : Appliquez de petites et fréquentes mises à jour à votre projet pour l’améliorer en permanence ; des changements plus petits simplifient la gestion et le rétablissement, si nécessaire.

CI/CD avec GitHub Actions

Une action Snowflake CLI est une action GitHub conçue pour intégrer Snowflake CLI aux pipelines CI/CD. Il vous permet d’automatiser l’exécution des commandes Snowflake CLI dans vos flux de travail GitHub.

Utilisation des actions Snowflake CLI

Snowflake CLI Github Actions rationalise le processus d’installation et d’utilisation de Snowflake CLI dans vos flux de travail CI/CD. La CLI est installée de manière isolée, ce qui garantit qu’elle n’entrera pas en conflit avec les dépendances de votre projet. Elle configure automatiquement le fichier de configuration d’entrée dans le répertoire ~/.snowflake/.

Paramètres d’entrée

Une action Snowflake CLI utilise les entrées suivantes de votre fichier de flux de travail Github YAML, comme <repo-name>/.github/workflows/my-workflow.yaml :

  • cli-version : La version CLI Snowflake spécifiée, telle que 3.6.0. Si non fournie, la dernière version de Snowflake CLI est utilisée.

  • default-config-file-path : Chemin d’accès au fichier de configuration (config.toml) dans votre référentiel. Le chemin doit être relatif à la racine du référentiel. Le fichier de configuration n’est pas nécessaire lorsqu’une connexion temporaire (option -x) est utilisée.

Configurez l’action en toute sécurité dans votre flux de travail CI/CD

Pour utiliser une action Github, vous devez procéder comme suit :

  1. Générez une clé privée. Pour plus d’informations, voir Authentification par paire de clés et rotation de paires de clés.

  2. Stockez les identifiants, tels que le compte, la clé privée et la phrase secrète, dans les secrets GitHub. Pour plus d’informations, consultez Documentation sur GitHub Actions.

Définition des connexions

Vous pouvez définir une action GitHub pour vous connecter à Snowflake avec une connexion temporaire ou avec une connexion définie dans votre fichier de configuration. Pour plus d’informations sur la gestion des connexions, voir Gestion des connexions Snowflake.

Utiliser une connexion temporaire

Pour plus d’informations sur les connexions temporaires, voir Utiliser une connexion temporaire.

Pour configurer vos identifiants Snowflake en vue d’une connexion temporaire, procédez comme suit :

  1. Mappez les secrets aux variables d’environnement dans votre flux de travail GitHub, sous la forme SNOWFLAKE_<key>=<value>, comme indiqué :

    env:
      SNOWFLAKE_PRIVATE_KEY_RAW: ${{ secrets.SNOWFLAKE_PRIVATE_KEY_RAW }}
      SNOWFLAKE_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }}
    
    Copy
  2. Configurez l’action CLI Snowflake.

    Si vous utilisez la dernière version de Snowflake CLI, vous n’avez pas besoin d’inclure le paramètre cli-version. L’exemple suivant demande à l’action d’utiliser spécifiquement la version 3.6.0 de Snowflake CLI :

    - uses: snowflakedb/snowflake-cli-action@v1.5
      with:
        cli-version: "3.6.0"
    
    Copy

#. Optional: If your private key is encrypted, to set up a passphrase, set the PRIVATE_KEY_PASSPHRASE environment variable to the private key passphrase. Snowflake uses this passphrase to decrypt the private key. For example:

- name: Execute Snowflake CLI command
  env:
    PRIVATE_KEY_PASSPHRASE: ${{ secrets.PASSPHARSE }}
Copy

Pour utiliser un mot de passe au lieu d’une clé privée, annulez la définition de la variable d’environnement SNOWFLAKE_AUTHENTICATOR et ajoutez la variable SNOWFLAKE_PASSWORD, comme suit :

- name: Execute Snowflake CLI command
  env:
    SNOWFLAKE_USER: ${{ secrets.SNOWFLAKE_USER }}
    SNOWFLAKE_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }}
    SNOWFLAKE_PASSWORD: ${{ secrets.SNOWFLAKE_PASSWORD }}
Copy

Note

Pour améliorer votre expérience lors de l’utilisation d’un mot de passe et de MFA, Snowflake vous recommande de configurer la mise en cache MFA.

Pour plus d’informations sur la définition des identifiants de connexion Snowflake dans les variables d’environnement, voir Utiliser des variables d’environnement pour les identifiants de connexion Snowflake, et pour des informations sur la définition des variables d’environnement dans votre flux de travail CI/CD GitHub, voir Définition des variables d’environnement pour un flux de travail unique.

  1. Ajoutez les commandes snow que vous voulez exécuter avec la connexion temporaire, comme indiqué :

    run: |
      snow --version
      snow connection test --temporary-connection
    
    Copy

L’exemple suivant montre un exemple de fichier <repo-name>/.github/workflows/my-workflow.yaml terminé :

name: deploy
on: [push]

jobs:
  version:
    name: "Check Snowflake CLI version"
    runs-on: ubuntu-latest
    steps:
      # Snowflake CLI installation
      - uses: snowflakedb/snowflake-cli-action@v1.5

        # Use the CLI
      - name: Execute Snowflake CLI command
        env:
          SNOWFLAKE_AUTHENTICATOR: SNOWFLAKE_JWT
          SNOWFLAKE_USER: ${{ secrets.SNOWFLAKE_USER }}
          SNOWFLAKE_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }}
          SNOWFLAKE_PRIVATE_KEY_RAW: ${{ secrets.SNOWFLAKE_PRIVATE_KEY_RAW }}
          PRIVATE_KEY_PASSPHRASE: ${{ secrets.PASSPHARSE }} # Passphrase is only necessary if private key is encrypted.
        run: |
          snow --help
          snow connection test -x
Copy

Après avoir vérifié que votre action peut se connecter à Snowflake avec succès, vous pouvez ajouter d’autres commandes Snowflake CLI comme snow notebook create ou snow git execute. Pour obtenir des informations sur les commandes prises en charge, voir Référence des commandes de Snowflake CLI.

Utiliser un fichier de configuration

Pour plus d’informations sur la définition des connexions, voir Définir les connexions.

Pour configurer vos identifiants de connexion Snowflake pour une connexion spécifique, procédez comme suit :

  1. Créez un fichier config.toml à la racine de votre référentiel Git avec une connexion de configuration vide, comme indiqué :

    default_connection_name = "myconnection"
    
    [connections.myconnection]
    
    Copy

    Ce fichier sert de modèle et ne doit pas contenir d’identifiants de connexion réels.

  2. Mappez les secrets aux variables d’environnement dans votre flux de travail GitHub, sous la forme SNOWFLAKE_<key>=<value>, comme indiqué :

    env:
      SNOWFLAKE_CONNECTIONS_MYCONNECTION_PRIVATE_KEY_RAW: ${{ secrets.SNOWFLAKE_PRIVATE_KEY_RAW }}
      SNOWFLAKE_CONNECTIONS_MYCONNECTION_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }}
    
    Copy

#. Configure the Snowflake CLI action. If you use the latest version of Snowflake CLI, you do not need to include the cli-version parameter. The following example specifies a desired version and the name of your default configuration file:

- uses: snowflakedb/snowflake-cli-action@v1.5
  with:
    cli-version: "3.6.0"
    default-config-file-path: "config.toml"
Copy

#. Optional: If your private key is encrypted, to set up a passphrase, set the PRIVATE_KEY_PASSPHRASE environment variable to the private key passphrase. Snowflake uses this passphrase to decrypt the private key. For example:

- name: Execute Snowflake CLI command
  env:
    PRIVATE_KEY_PASSPHRASE: ${{ secrets.PASSPHARSE }}
Copy

Pour utiliser un mot de passe au lieu d’une clé privée, annulez la définition de la variable d’environnement SNOWFLAKE_AUTHENTICATOR et ajoutez la variable SNOWFLAKE_PASSWORD, comme suit :

- name: Execute Snowflake CLI command
  env:
    SNOWFLAKE_CONNECTIONS_MYCONNECTION_USER: ${{ secrets.SNOWFLAKE_USER }}
    SNOWFLAKE_CONNECTIONS_MYCONNECTION_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }}
    SNOWFLAKE_CONNECTIONS_MYCONNECTION_PASSWORD: ${{ secrets.SNOWFLAKE_PASSWORD }}
Copy

Note

Pour améliorer votre expérience lors de l’utilisation d’un mot de passe et de MFA, Snowflake vous recommande de configurer la mise en cache MFA.

  1. Ajoutez les commandes snow que vous souhaitez exécuter avec une connexion nommée, comme indiqué :

    run: |
      snow --version
      snow connection test
    
    Copy

L’exemple suivant montre un exemple de fichier config.toml dans votre référentiel Git et un exemple de fichier <repo-name>/.github/workflows/my-workflow.yaml terminé :

  • Exemple de fichier config.toml :

    default_connection_name = "myconnection"
    
    [connections.myconnection]
    
    Copy
  • Exemple de fichier de flux de travail Git :

    name: deploy
    on: [push]
    jobs:
      version:
        name: "Check Snowflake CLI version"
        runs-on: ubuntu-latest
        steps:
          # Checkout step is necessary if you want to use a config file from your repo
          - name: Checkout repo
            uses: actions/checkout@v4
            with:
              persist-credentials: false
    
            # Snowflake CLI installation
          - uses: snowflakedb/snowflake-cli-action@v1.5
            with:
              default-config-file-path: "config.toml"
    
            # Use the CLI
          - name: Execute Snowflake CLI command
            env:
              SNOWFLAKE_CONNECTIONS_MYCONNECTION_AUTHENTICATOR: SNOWFLAKE_JWT
              SNOWFLAKE_CONNECTIONS_MYCONNECTION_USER: ${{ secrets.SNOWFLAKE_USER }}
              SNOWFLAKE_CONNECTIONS_MYCONNECTION_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }}
              SNOWFLAKE_CONNECTIONS_MYCONNECTION_PRIVATE_KEY_RAW: ${{ secrets.SNOWFLAKE_PRIVATE_KEY_RAW }}
              PRIVATE_KEY_PASSPHRASE: ${{ secrets.PASSPHARSE }} #Passphrase is only necessary if private key is encrypted.
            run: |
              snow --help
              snow connection test
    
    Copy

Après avoir vérifié que votre action peut se connecter à Snowflake avec succès, vous pouvez ajouter d’autres commandes Snowflake CLI comme snow notebook create ou snow git execute. Pour obtenir des informations sur les commandes prises en charge, voir Référence des commandes de Snowflake CLI.