Integration von CI/CD mit Snowflake CLI

Snowflake CLI integriert gängige CI/CD-Systeme (kontinuierliche Integration und kontinuierliche Bereitstellung) und Frameworks wie GitHub Actions, um Ihre Snowflake-Workflows für SQL, Snowpark, Native Apps oder Notebooks effizient zu automatisieren.

Bemerkung

Zukünftige Versionen werden Unterstützung für Jenkins und Azure-DevOps enthalten.

Die folgende Abbildung zeigt einen typischen CI/CD-Workflow in Snowflake CLI.

Snowflake CI/CD-Workflow

CI/CD-Workflowschritte

  1. Speichern: Konfigurieren Sie ein externes Git-Repository, um Ihre Snowflake-Dateien sicher zu verwalten.

  2. Code: Entwickeln Sie Ihren Snowflake-Code mit IDE oder Snowsight, ganz nach Ihren Wünschen.

  3. Installieren: Installieren Sie Snowflake CLI und stellen Sie Ihren bevorzugten CI/CD-Anbieter bereit, z. B. GitHub Actions.

  4. Bereitstellen: Automatisieren Sie die Bereitstellung, indem Sie Snowflake CLI mit dem von Ihnen gewählten CI/CD-Tool kombinieren.

  5. Überwachen: Verfolgen Sie die Code- und Workflow-Leistung in Snowflake mit Snowflake Trail für Einblicke in Echtzeit.

  6. Iterieren: Wenden Sie kleine, häufige Aktualisierungen an Ihrem Projekt an, um es kontinuierlich zu verbessern. Kleinere Änderungen vereinfachen das Management und das Rollback, falls erforderlich.

CI/CD mit GitHub Actions

Eine Snowflake CLI-Aktion ist eine GitHub-Aktion, die dazu dient, Snowflake CLI in CI/CD-Pipelines zu integrieren. Damit können Sie die Ausführung von Snowflake CLI-Befehlen innerhalb Ihrer GitHub-Workflows automatisieren.

Verwendung von Snowflake CLI-Aktionen

Snowflake CLI Github Actions rationalisiert den Prozess der Installation und Verwendung von Snowflake CLI in Ihren CI/CD-Workflows. Die CLI wird isoliert installiert, um sicherzustellen, dass sie nicht mit den Abhängigkeiten Ihres Projekts in Konflikt gerät. Es legt automatisch die Eingabekonfigurationsdatei im Verzeichnis ~/.snowflake/ an.

Eingabeparameter

Eine Snowflake CLI-Aktion verwendet die folgenden Eingaben aus Ihrer Github-Workflow YAML-Datei, z. B. <repo-name>/.github/workflows/my-workflow.yaml:

  • cli-version: Die angegebene Snowflake CLI-Version, z. B. 3.6.0. Falls nicht angegeben, wird die neueste Version von Snowflake CLI verwendet.

  • default-config-file-path: Pfad zu der Konfigurationsdatei (config.toml) in Ihrem Repository. Der Pfad muss relativ zum Stammverzeichnis des Repositorys sein. Die Konfigurationsdatei ist nicht erforderlich, wenn eine temporäre Verbindung (Option -x) verwendet wird.

Konfigurieren Sie die Aktion sicher in Ihrem CI/CD-Workflow

Um eine Github-Aktion zu verwenden, müssen Sie Folgendes tun:

  1. Erzeugen Sie einen privaten Schlüssel. Weitere Informationen dazu finden Sie unter Schlüsselpaar-Authentifizierung und Schlüsselpaar-Rotation.

  2. Speichern Sie die Anmeldeinformationen wie Konto, privater Schlüssel und Passphrase in GitHub-Geheimnissen. Weitere Informationen finden Sie in der GitHub Dokumentation zu Aktionen.

Definieren von Verbindungen

Sie können eine GitHub-Aktion definieren, um eine Verbindung zu Snowflake mit einer temporären Verbindung oder mit einer in Ihrer Konfigurationsdatei definierten Verbindung herzustellen. Weitere Informationen zur Verwaltung von Verbindungen finden Sie unter Verwalten von Snowflake-Verbindungen.

Verwenden Sie eine temporäre Verbindung

Weitere Informationen über temporäre Verbindungen finden Sie unter Verwenden Sie eine temporäre Verbindung.

Um Ihre Snowflake-Anmeldeinformationen für eine temporäre Verbindung einzurichten, gehen Sie folgendermaßen vor:

  1. Ordnen Sie die Geheimnisse den Umgebungsvariablen in Ihrem GitHub-Workflow zu, und zwar in der Form SNOWFLAKE_<key>=<value>, wie gezeigt:

    env:
      SNOWFLAKE_PRIVATE_KEY_RAW: ${{ secrets.SNOWFLAKE_PRIVATE_KEY_RAW }}
      SNOWFLAKE_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }}
    
    Copy
  2. Konfigurieren Sie die Snowflake CLI-Aktion.

    Wenn Sie die neueste Version von Snowflake CLI verwenden, brauchen Sie den Parameter cli-version nicht zu berücksichtigen. Das folgende Beispiel weist die Aktion an, speziell Snowflake CLI Version 3.6.0 zu verwenden:

    - 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

Um ein Kennwort anstelle eines privaten Schlüssels zu verwenden, deaktivieren Sie die Umgebungsvariable SNOWFLAKE_AUTHENTICATOR und fügen Sie die Variable SNOWFLAKE_PASSWORD hinzu, wie folgt:

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

Bemerkung

Um die Nutzung eines Kennworts und MFA zu verbessern, empfiehlt Snowflake die Konfiguration von MFA-Caching.

Weitere Informationen zum Festlegen von Snowflake-Anmeldeinformationen in Umgebungsvariablen finden Sie unter Umgebungsvariablen für Snowflake-Anmeldeinformationen verwenden und Informationen zum Definieren von Umgebungsvariablen innerhalb Ihres GitHub CI/CD -Workflows finden Sie unter Definieren von Umgebungsvariablen für einen einzelnen Workflow.

  1. Fügen Sie die snow-Befehle hinzu, die Sie mit der temporären Verbindung ausführen möchten, wie gezeigt:

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

Das folgende Beispiel zeigt eine fertige Beispieldatei <repo-name>/.github/workflows/my-workflow.yaml:

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

Nachdem Sie überprüft haben, dass Ihre Aktion erfolgreich eine Verbindung zu Snowflake herstellen kann, können Sie weitere Snowflake CLI-Befehle wie snow notebook create oder snow git execute hinzufügen. Informationen über unterstützte Befehle finden Sie unter Referenz zu Snowflake CLI-Befehlen.

Verwenden Sie eine Konfigurationsdatei

Weitere Informationen zur Definition von Verbindungen finden Sie unter Definieren Sie Verbindungen.

Um Ihre Snowflake-Anmeldeinformationen für eine bestimmte Verbindung einzurichten, gehen Sie wie folgt vor:

  1. Erstellen Sie eine Datei config.toml im Stammverzeichnis Ihres Git-Repositorys mit einer leeren Konfigurationsverbindung, wie gezeigt:

    default_connection_name = "myconnection"
    
    [connections.myconnection]
    
    Copy

    Diese Datei dient als Vorlage und sollte keine tatsächlichen Anmeldeinformationen enthalten.

  2. Ordnen Sie die Geheimnisse den Umgebungsvariablen in Ihrem GitHub-Workflow zu, und zwar in der Form SNOWFLAKE_<key>=<value>, wie gezeigt:

    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

Um ein Kennwort anstelle eines privaten Schlüssels zu verwenden, deaktivieren Sie die Umgebungsvariable SNOWFLAKE_AUTHENTICATOR und fügen Sie die Variable SNOWFLAKE_PASSWORD hinzu, wie folgt:

- 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

Bemerkung

Um die Nutzung eines Kennworts und MFA zu verbessern, empfiehlt Snowflake die Konfiguration von MFA-Caching.

  1. Fügen Sie die snow-Befehle hinzu, die Sie mit einer benannten Verbindung ausführen möchten, wie gezeigt:

    run: |
      snow --version
      snow connection test
    
    Copy

Das folgende Beispiel zeigt eine Beispieldatei config.toml in Ihrem Git-Repository und eine fertige Beispieldatei <repo-name>/.github/workflows/my-workflow.yaml:

  • Beispiel config.toml-Datei:

    default_connection_name = "myconnection"
    
    [connections.myconnection]
    
    Copy
  • Beispiel einer Git-Workflow-Datei:

    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

Nachdem Sie überprüft haben, dass Ihre Aktion erfolgreich eine Verbindung zu Snowflake herstellen kann, können Sie weitere Snowflake CLI-Befehle wie snow notebook create oder snow git execute hinzufügen. Informationen über unterstützte Befehle finden Sie unter Referenz zu Snowflake CLI-Befehlen.