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.

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 dans les pipelines CI/CD. Vous pouvez l’utiliser pour automatiser exécution des commandes Snowflake CLI dans vos workflows GitHub. Pour plus d’informations, consultez le référentiel snowflake-cli-action.

Utilisation des actions Snowflake CLI

Github Actions rationalise le processus d’installation et d’utilisation de Snowflake CLI dans vos workflows CI/CD. Le CLI est installé de manière isolée, en veillant à ce qu’il n’entre pas en conflit avec les dépendances de votre projet. Il configure automatiquement le fichier de configuration d’ entrée dans le répertoire ~/.snowflake/.

L’action permet d’automatiser vos tâches Snowflake CLI, telles que le déploiement des Snowflake Native Apps ou l’exécution de scripts Snowpark dans votre environnement 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 Snowflake CLI spécifiée, par exemple 3.11.0. Si non fournie, la dernière version du Snowflake CLI est utilisée.

  • custom-github-ref : La branche, la balise ou le commit du référentiel Github à partir duquel vous souhaitez installer Snowflake CLI.

    Note

    Vous ne pouvez pas utiliser cli-version et custom-github-ref ensemble ; spécifiez un seul de ces paramètres.

  • default-config-file-path : chemin vers le fichier de configuration (config.toml) dans votre référentiel. Le chemin d’accès 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. Pour plus d’informations, consultez Gestion des connexions Snowflake.

  • use-oidc : indicateur booléen pour activer l’authentification OIDC. Lorsque que la valeur est définie sur true, l’action configure le CLI pour utiliser le jeton OIDC de GitHub pour l’authentification avec Snowflake, éliminant ainsi le besoin de stocker les clés privées sous forme de secrets. La valeur par défaut est false.

Installer Snowflake CLI depuis une branche ou balise GitHub

  • Pour installer le Snowflake CLI depuis une branche, balise ou commit spécifique dans le référentiel GitHub (par exemple, pour tester des fonctionnalités non publiées ou un fork), utilisez la configuration suivante :

- uses: snowflakedb/snowflake-cli-action@v2.0
  with:
    custom-github-ref: "feature/my-branch" # or a tag/commit hash
Copy

Vous pouvez également inclure d’autres paramètres d’entrée.

Cette fonctionnalité est disponible dans la version 1.6 ou ultérieure de snowflake-cli-action.

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

Vous pouvez configurer l’action en toute sécurité dans votre workflow CI/CD en utilisant l’une des méthodes suivantes :

Utiliser l’authentification avec fédération d’identité de charge de travail (WIF) OpenID Connect (OIDC)

Note

L’authentification WIF OIDC nécessite Snowflake CLI version 3.11.0 ou ultérieure.

L’authentification WIF OIDC fournit un moyen sécurisé et moderne de s’authentifier auprès de Snowflake sans stocker de clés privées sous forme de secrets. Cette approche utilise le jeton OIDC (OpenID Connect) de GitHub pour s’authentifier auprès de Snowflake.

Pour configurer l’authentification WIF OIDC, suivez les étapes suivantes :

  1. ConfigurezWIF OIDC en configurant un utilisateur de service avec le type d’identité de charge de travail OIDC :

    CREATE USER <username>
    TYPE = SERVICE
    WORKLOAD_IDENTITY = (
      TYPE = OIDC
      ISSUER = 'https://token.actions.githubusercontent.com'
      SUBJECT = '<your_subject>'
    )
    
    Copy

Note

Par défaut, votre sujet doit ressembler à repo:<repository-owner/repository-name>:environment:<environment>.

  • Pour simplifier la génération du sujet, utilisez la commande gh, où <environment_name> est l’environnement défini dans les paramètres de votre référentiel, comme indiqué dans l’exemple suivant :

gh repo view <repository-owner/repository-name> --json nameWithOwner | jq -r '"repo:\(.nameWithOwner):environment:<environment_name>"'
Copy

Pour plus d’informations sur la personnalisation de votre sujet, consultez la référence OpenID Connect sur GitHub.

  1. Stockez votre identificateur de compte Snowflake dans les secrets GitHub. Pour plus d’informations, consultez Documentation sur GitHub Actions.

  2. Configurez l’action Snowflake CLI dans votre fichier YAML du workflow GitHub, comme indiqué :

    name: Snowflake OIDC
    on: [push]
    
    permissions:
      id-token: write  # Required for OIDC token generation
      contents: read
    
    jobs:
      oidc-job:
        runs-on: ubuntu-latest
        environment: test-env # this should match the environment used in the subject
        steps:
          - uses: actions/checkout@v4
            with:
              persist-credentials: false
          - name: Set up Snowflake CLI
            uses: snowflakedb/snowflake-cli-action@v2.0
            with:
              use-oidc: true
              cli-version: "3.11"
          - name: test connection
            env:
              SNOWFLAKE_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }}
            run: snow connection test -x
    
    Copy

    Pour plus d’informations sur la configuration de l’authentification WIF OIDC pour votre compte Snowflake et la configuration du fournisseur GitHub OIDC, consultez Fédération d’identité de charge de travail.

Utiliser l’authentification par clé privée

Pour utiliser l’authentification par clé privée, vous devez stocker votre clé privée Snowflake dans les secrets GitHub et configurer l’action Snowflake CLI pour l’utiliser.

  1. Stockez votre clé privée Snowflake dans les secrets GitHub.

Pour plus d’informations, consultez Documentation sur GitHub Actions.

  1. Configurez l’action Snowflake CLI dans votre fichier YAML du workflow GitHub, comme indiqué :

    name: Snowflake Private Key
    on: [push]
    
    jobs:
      private-key-job:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v4
            with:
              persist-credentials: false
          - name: Set up Snowflake CLI
            uses: snowflakedb/snowflake-cli-action@v2.0
    
    Copy

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 indique à l’action pour utiliser spécifiquement Snowflake CLI version 3.11.0 :

    - uses: snowflakedb/snowflake-cli-action@v2.0
      with:
        cli-version: "3.11.0"
    
    Copy
  3. En option : Pour configurer une phrase secrète lorsque votre clé privée est chiffrée, définissez la variable d’environnement PRIVATE_KEY_PASSPHRASE sur la phrase secrète de la clé privée. Snowflake utilise cette phrase secrète pour déchiffrer la clé privée. Par exemple :

    - 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.

  4. 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@v2.0

        # 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
  3. 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 spécifie une version souhaitée et le nom de votre fichier de configuration par défaut :

    - uses: snowflakedb/snowflake-cli-action@v2.0
      with:
        cli-version: "3.11.0"
        default-config-file-path: "config.toml"
    
    Copy
  4. En option : Pour configurer une phrase secrète lorsque votre clé privée est chiffrée, définissez la variable d’environnement PRIVATE_KEY_PASSPHRASE sur la phrase secrète de la clé privée. Snowflake utilise cette phrase secrète pour déchiffrer la clé privée. Par exemple :

    - 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.

  5. 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@v2.0
            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.