CI/CD と Snowflake CLI の統合

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

次の図は、 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-action リポジトリをご参照ください。

Snowflake CLI アクションの使用

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

アクションは、Snowflake環境内での Snowflake Native Apps のデプロイやSnowparkスクリプトの実行など、Snowflakeの CLI タスクの自動化を可能にします。

入力パラメーター

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

  • cli-version:3.11.0 などの指定されたSnowflake CLI バージョン。提供されていない場合は、Snowflake CLI の最新バージョンが使用されます。

  • custom-github-ref:Githubリポジトリ内のブランチ、タグ、コミットから直接インストールしたい Snowflake CLI。

    注釈

    cli-version`および :codenowrap:`custom-github-ref の両方を一緒に使用することはできません。これらのパラメーターのうち1つだけを指定します。

  • default-config-file-path:リポジトリ内の構成ファイル(config.toml)へのパス。パスは、リポジトリのルートからの相対パスにする必要があります。仮接続(-x オプション)が使用される場合は構成ファイルは必要ありません。詳細については、:doc:`/developer-guide/snowflake-cli/connecting/configure-connections`をご参照ください。

  • use-oidc:OIDC 認証を有効にするブールフラグ。true に設定した場合、アクションはSnowflakeでの認証に GitHubの OIDC トークンを使用して CLI を構成するため、秘密キーをシークレットとして保存する必要がなくなります。デフォルトは:codenowrap:false です。

GitHub ブランチ または タグから Snowflake CLI をインストールする

  • Snowflake CLI を GitHub リポジトリ内の特定のブランチ、タグ、コミットからインストールする(たとえば、リリースされていない機能やフォークをテストする)には、以下の構成を使用します。

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

他の :ref:`入力パラメーター <label-cli_cicd_inputs>`を含めることもできます。

この機能はsnowflake-cli-actionバージョン1.6以降で利用できます。

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

次のいずれかのメソッドを使用して、CI/CD ワークフローでアクションを安全に構成できます。

ワークロードIDフェデレーション(WIF)OpenID 接続(OIDC)認証を使用する

注釈

WIF OIDC 認証には Snowflake CLI バージョン3.11.0以降が必要です。

WIF OIDC 認証は、秘密キーをシークレットとして保存することなく、Snowflakeで認証する安全で最新の方法を提供します。このアプローチでは GitHubの OIDC(OpenID接続)トークンを使用してSnowflakeで認証します。

WIFOIDC 認証を設定するには、以下のステップに従います。

  1. OIDC ワークロードIDタイプを持つサービスユーザーを設定することによって WIFOIDC を構成します。

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

注釈

デフォルトでは、サブジェクトは :codenowrap:`repo:<repository-owner/repository-name>:environment:<environment>`のようになります。

  • サブジェクトの生成を簡素化するには、gh コマンドを使用します。この場合の:codenowrap:<environment_name> は、次の例に示すように、リポジトリ設定で定義された環境です。

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

サブジェクトのカスタマイズの詳細については、GitHub の OpenID 接続 をご参照ください。

  1. Snowflakeアカウント識別子を GitHub シークレットに保管します。詳細については、 GitHub Actions ドキュメンテーション をご参照ください。

  2. 表示のように、GitHub ワークフローの YAML ファイル内で Snowflake CLI アクションを構成します。

    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

    Snowflakeアカウントの WIFOIDC 認証の設定と GitHubOIDC プロバイダーの構成に関する詳細については、ワークロードIDフェデレーション をご参照ください。

秘密キー認証を使用する

秘密キー認証を使用するには、Snowflakeの秘密キーを GitHub シークレットに保存して、それを使用するための Snowflake CLI アクションを構成する必要があります。

  1. Snowflakeの秘密キーを GitHub シークレットに保存します。

詳細については、 GitHub Actions ドキュメンテーション をご参照ください。

  1. 表示のように、GitHub ワークフローの YAML ファイル内で Snowflake CLI アクションを構成します。

    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

接続の定義

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.11.0を使用するよう、具体的にアクションに指示しています。

    - uses: snowflakedb/snowflake-cli-action@v2.0
      with:
        cli-version: "3.11.0"
    
    Copy
  3. オプション:秘密キーが暗号化されている場合、パスフレーズを設定するには、秘密キーパスフレーズに 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 つのワークフローに環境変数を定義する方法 を参照してください。

  4. 仮接続で実行する 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@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

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

構成ファイルの使用

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

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

  1. 表示のように、空の構成接続を持つGitリポジトリのルートにある:file: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
  3. Snowflake CLI アクションを構成します。

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

    - uses: snowflakedb/snowflake-cli-action@v2.0
      with:
        cli-version: "3.11.0"
        default-config-file-path: "config.toml"
    
    Copy
  4. オプション:秘密キーが暗号化されている場合、パスフレーズを設定するには、秘密キーパスフレーズに 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 キャッシュを構成する ことを推奨しています。

  5. 名前付き接続で実行する 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@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

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