CI/CD と Snowflake CLI の統合

Snowflake CLI は CI/CD (継続的インテグレーションと継続的デリバリー) システムと GitHub アクション などの一般的なフレームワークを統合し、 SQL、Snowpark、Native Apps、Notebooks の Snowflake ワークフローを効率的に自動化します。

注釈

今後のリリースでは、JenkinsとAzure DevOps をサポートする予定です。

次の図は、 Snowflake CLI における典型的な CI/CD ワークフローを示しています。

Snowflake CI/CD のワークフロー

CI/CD ワークフローのステップ

  1. ストア: リモートのGitリポジトリを構成して、Snowflakeファイルを安全に管理します。

  2. コード: IDE またはSnowsightを使用して、お好みに合わせてSnowflakeコードを開発します。

  3. インストール: Snowflake CLI を インストール し、お好みのプロバイダー CI/CD (GitHub アクションなど) をプロビジョニングします。

  4. デプロイ: Snowflake CLI と選択した CI/CD ツールを組み合わせてデプロイを自動化します。

  5. モニター: Snowflake Trail を使用して Snowflake のコードとワークフローのパフォーマンスを追跡し、リアルタイムの洞察を得ます。

  6. 反復: 継続的な改善のために、プロジェクトに小容量のアップデートを頻繁に適用します。小容量の変更は、管理を簡素化し、必要に応じてロールバックします。

CI/CD と GitHub アクション

Snowflake CLI アクションは、 Snowflake CLI を CI/CD パイプラインに統合するために設計された GitHub アクションです。GitHub ワークフロー内で Snowflake CLI コマンドの実行を自動化できます。

Snowflake CLI アクションの使用

Snowflake CLI Github Actionsは、 CI/CD のワークフローで Snowflake CLI をインストールして使用するプロセスを合理化します。CLI は、あなたのプロジェクトの依存関係と衝突しないように、分離された方法でインストールされます。入力構成ファイルは自動的に ~/.snowflake/ ディレクトリにセットアップされます。

入力パラメーター

Snowflake CLI アクションは、Github ワークフロー YAML ファイルから以下の入力を使用します。 <repo-name>/.github/workflows/my-workflow.yaml:

  • cli-version: 指定された Snowflake CLI バージョン、例えば 3.6.0。プロバイダーが提供されない場合は、 Snowflake CLI の最新バージョンが使用されます。

  • default-config-file-path: リポジトリの構成ファイル(config.toml)へのパス。パスはリポジトリのルートからの相対パスでなければなりません。仮接続 (-x オプション)を使用する場合、構成ファイルは必要ありません。

CI/CD ワークフローでアクションを安全に構成します。

Githubアクションを使用するには、次のようにする必要があります:

  1. 秘密キーを生成します。詳細については、 キーペア認証とキーペアローテーション をご参照ください。

  2. アカウント、秘密キー、パスフレーズなどの認証情報を GitHub secret に保存します。詳細については、 GitHub Actions ドキュメンテーション をご参照ください。

接続の定義

GitHub アクションを定義して、仮接続または構成ファイルで定義された接続で Snowflake に接続することができます。接続管理の詳細については、 Snowflake接続の管理 を参照してください。

仮接続の使用

仮接続の詳細情報については、 仮接続の使用 を参照してください。

仮接続用のSnowflake認証情報をセットアップするには、以下の手順に従ってください。

  1. シークレットを GitHub ワークフローの環境変数にマッピングします。次のように、 SNOWFLAKE_<キー>=<value> の形式にします。

    env:
      SNOWFLAKE_PRIVATE_KEY_RAW: ${{ secrets.SNOWFLAKE_PRIVATE_KEY_RAW }}
      SNOWFLAKE_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }}
    
    Copy
  2. Snowflake CLI アクションを構成します。

    最新バージョンの Snowflake CLI を使用する場合は、 cli-version パラメーターを含める必要はありません。次の例では、 Snowflake CLI バージョン3.6.0を使うようにアクションに指示します。

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

#.オプション: 秘密キーが暗号化されている場合は、パスフレーズを設定するために、 PRIVATE_KEY_PASSPHRASE 環境変数に秘密キーのパスフレーズをセットします。Snowflakeはこのパスフレーズを使って秘密キーを復号化します。例:

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

秘密キーの代わりにパスワードを使用するには、次のように SNOWFLAKE_AUTHENTICATOR 環境変数の設定を解除し、 SNOWFLAKE_PASSWORD 環境変数を追加します。

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

注釈

パスワードと MFA を使用する際の利便性を高めるため、Snowflake では MFA キャッシュを構成する ことを推奨しています。

Snowflake の認証情報を環境変数にセットする方法については Snowflake認証情報に環境変数を使用する を、 GitHub CI/CD ワークフロー内で環境変数を定義する方法については 1 つのワークフローに環境変数を定義する方法 を参照してください。

  1. 仮接続で実行する snow コマンドを次のように追加します。

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

次の例は、 <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

アクションがSnowflakeに正常に接続できることを確認したら、 snow notebook createsnow git execute のように、 Snowflake CLI コマンドを追加します。サポートされているコマンドの情報については、 Snowflake CLI コマンドリファレンス を参照してください。

構成ファイルの使用

接続の定義の詳細については、 コネクションの定義 を参照してください。

特定の接続用にSnowflake認証情報をセットアップするには、以下の手順に従ってください。

  1. Gitリポジトリのルートにconfig.tomlファイルを作成し、空の構成接続を作成します。

    default_connection_name = "myconnection"
    
    [connections.myconnection]
    
    Copy

    このファイルはテンプレートとして機能し、実際の認証情報 を含むべきではありません。

  2. シークレットを GitHub ワークフローの環境変数にマッピングします。次のように、 SNOWFLAKE_<キー>=<value> の形式にします。

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

#.Snowflake CLI アクションを構成します。最新バージョンの Snowflake CLI を使用する場合は、 cli-version パラメーターを含める必要はありません。次の例では、希望するバージョンとデフォルト構成ファイル名を指定します。

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

#.オプション: 秘密キーが暗号化されている場合は、パスフレーズを設定するために、 PRIVATE_KEY_PASSPHRASE 環境変数に秘密キーのパスフレーズをセットします。Snowflakeはこのパスフレーズを使って秘密キーを復号化します。例:

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

秘密キーの代わりにパスワードを使用するには、次のように SNOWFLAKE_AUTHENTICATOR 環境変数の設定を解除し、 SNOWFLAKE_PASSWORD 環境変数を追加します。

- 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

注釈

パスワードと MFA を使用する際の利便性を高めるため、Snowflake では MFA キャッシュを構成する ことを推奨しています。

  1. 図のように、名前付き接続で実行したい snow コマンドを追加します。

    run: |
      snow --version
      snow connection test
    
    Copy

次の例では、Git リポジトリ内のサンプル config.toml ファイルと、完成したサンプル <リポジトリ名>/.github/workflows/my-workflow.yaml ファイルを示します。

  • サンプル config.toml ファイル:

    default_connection_name = "myconnection"
    
    [connections.myconnection]
    
    Copy
  • サンプル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

アクションがSnowflakeに正常に接続できることを確認したら、 snow notebook createsnow git execute のように、 Snowflake CLI コマンドを追加します。サポートされているコマンドの情報については、 Snowflake CLI コマンドリファレンス を参照してください。