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.

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 zur Integration von Snowflake CLI in CI/CD-Pipelines entwickelt wurde. Sie können sie verwenden, um die Ausführung von Snowflake CLI-Befehlen innerhalb Ihrer GitHub-Workflows zu automatisieren. Weitere Informationen dazu finden Sie unter snowflake-cli-action-Repository.

Verwendung von Snowflake CLI-Aktionen

Github Actions vereinfacht den Installationsprozess und die Verwendung von Snowflake CLI in Ihren CI/CD-Workflows. Die CLI wird isoliert installiert, sodass sie nicht mit den Abhängigkeiten Ihres Projekts in Konflikt steht. Sie richtet automatisch die Konfigurationsdatei für die Eingabe innerhalb des ~/.snowflake/-Verzeichnisses ein.

Die Aktion ermöglicht die Automatisierung Ihrer Snowflake CLI-Aufgaben, wie z. B. die Bereitstellung von Snowflake Native Apps oder die Ausführung von Snowpark-Skripten innerhalb Ihrer Snowflake-Umgebung.

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.11.0. Falls nicht angegeben, wird die neueste Version von Snowflake CLI verwendet.

  • custom-github-ref: Der Zweig, das Tag oder das Commit im Github-Repository , über das Sie Snowflake CLI direkt installieren möchten.

    Bemerkung

    Sie können cli-version und custom-github-ref nicht gemeinsam verwenden. Geben Sie nur einen dieser Parameter an.

  • default-config-file-path: Pfad zur Konfigurationsdatei (config.toml) in Ihrem Repository. Der Pfad muss relativ zum Stammverzeichnis des Repository sein. Die Konfigurationsdatei ist nicht erforderlich, wenn eine temporäre Verbindung (-x-Option) verwendet wird. Weitere Informationen dazu finden Sie unter Verwalten von Snowflake-Verbindungen.

  • use-oidc: Boolesches Flag zur Aktivierung der OIDC-Authentifizierung. Wenn true festgelegt ist, konfiguriert die Aktion die CLI zur Verwendung des GitHub OIDC-Tokens für die Authentifizierung bei Snowflake, sodass private Schlüssel nicht mehr als Geheimnisse gespeichert werden müssen. Der Standardwert ist false.

Snowflake CLI über einen GitHub-Zweig oder ein entsprechendes Tag installieren

  • Um Snowflake CLI über einen bestimmten Zweig, ein Tag oder ein Commit im GitHub-Repository zu installieren (z. B. um unveröffentlichte Features oder eine Abspaltung zu testen), verwenden Sie die folgende Konfiguration:

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

Sie können auch andere Eingabeparameter angeben.

Dieses Feature ist in snowflake-cli-action Version 1.6 oder höher verfügbar.

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

Sie können die Aktion sicher in Ihrem CI/CD-Workflow mit einer der folgenden Methoden konfigurieren:

Workload Identity Federation (WIF) OpenID Connect (OIDC)-Authentifizierung verwenden

Bemerkung

Die WIF OIDC-Authentifizierung erfordert Snowflake CLI Version 3.11.0 oder höher.

Die WIF OIDC-Authentifizierung bietet eine sichere und moderne Möglichkeit, sich bei Snowflake zu authentifizieren, ohne private Schlüssel als Geheimnisse zu speichern. Dieser Ansatz verwendet das GitHub OIDC (OpenID Connect)-Token zur Authentifizierung bei Snowflake.

Führen Sie die folgenden Schritte aus, um die WIF OIDC-Authentifizierung einzurichten:

  1. Konfigurieren Sie WIF OIDC, indem Sie einen Dienstbenutzenden mit dem OIDC Workload-Identitätstyp einrichten:

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

Bemerkung

Standardmäßig sollte Ihr Subjekt wie folgt aussehen: repo:<repository-owner/repository-name>:environment:<environment>.

  • Um die Generierung des Subjekts zu vereinfachen, verwenden Sie den Befehl gh, wobei <environment_name> die in Ihren Repository-Einstellungen definierte Umgebung ist, wie im folgenden Beispiel gezeigt:

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

Weitere Informationen zur Anpassung Ihres Subjekts finden Sie in der Referenz zu OpenID Connect in GitHub.

  1. Speichern Sie Ihren Snowflake-Kontobezeichner in GitHub-Geheimnissen. Weitere Informationen finden Sie in der GitHub Dokumentation zu Aktionen.

  2. Konfigurieren Sie die Snowflake CLI-Aktion wie folgt in Ihrer GitHub-Workflow-YAML-Datei:

    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

    Weitere Informationen zum Einrichten der WIF OIDC-Authentifizierung für Ihr Snowflake-Konto und zum Konfigurieren des GitHub OIDC-Anbietenden finden Sie unter Workload Identity Federation.

Authentifizierung mit privaten Schlüsseln verwenden

Um die Authentifizierung mit privaten Schlüsseln zu verwenden, müssen Sie Ihren privaten Snowflake-Schlüssel in GitHub-Geheimnissen speichern und die Snowflake CLI-Aktion konfigurieren, um sie zu verwenden.

  1. Speichern Sie Ihren privaten Snowflake-Schlüssel in GitHub-Geheimnissen.

Weitere Informationen finden Sie in der GitHub Dokumentation zu Aktionen.

  1. Konfigurieren Sie die Snowflake CLI-Aktion wie folgt in Ihrer GitHub-Workflow-YAML-Datei:

    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

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. Im folgenden Beispiel wird die Aktion angewiesen, insbesondere Snowflake CLI Version 3.11.0 zu verwenden:

    - uses: snowflakedb/snowflake-cli-action@v2.0
      with:
        cli-version: "3.11.0"
    
    Copy
  3. Optional: Wenn Ihr privater Schlüssel verschlüsselt ist, legen Sie zur Einrichtung einer Passphrase die Umgebungsvariable PRIVATE_KEY_PASSPHRASE auf die Passphrase des privaten Schlüssels fest. Snowflake verwendet diese Passphrase, um den privaten Schlüssel zu entschlüsseln. Beispiel:

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

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

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 config.toml-Datei im Stammverzeichnis Ihres Git-Repository mit einer leeren Konfigurationsverbindung, wie nachfolgend 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
  3. 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 gibt eine gewünschte Version und den Namen Ihrer Standardkonfigurationsdatei an:

    - uses: snowflakedb/snowflake-cli-action@v2.0
      with:
        cli-version: "3.11.0"
        default-config-file-path: "config.toml"
    
    Copy
  4. Optional: Wenn Ihr privater Schlüssel verschlüsselt ist, legen Sie zur Einrichtung einer Passphrase die Umgebungsvariable PRIVATE_KEY_PASSPHRASE auf die Passphrase des privaten Schlüssels fest. Snowflake verwendet diese Passphrase, um den privaten Schlüssel zu entschlüsseln. Beispiel:

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

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

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

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.