CI/CD と Snowflake CLI の統合¶
Snowflake CLI は CI/CD (継続的インテグレーションと継続的デリバリー) システムと GitHub アクション などの一般的なフレームワークを統合し、 SQL、Snowpark、Native Apps、Notebooks の Snowflake ワークフローを効率的に自動化します。
次の図は、 Snowflake CLI における典型的な CI/CD ワークフローを示しています。
CI/CD ワークフローのステップ¶
ストア: リモートのGitリポジトリを構成して、Snowflakeファイルを安全に管理します。
コード: IDE またはSnowsightを使用して、お好みに合わせてSnowflakeコードを開発します。
インストール: Snowflake CLI を インストール し、お好みのプロバイダー CI/CD (GitHub アクションなど) をプロビジョニングします。
デプロイ: Snowflake CLI と選択した CI/CD ツールを組み合わせてデプロイを自動化します。
モニター: Snowflake Trail を使用して Snowflake のコードとワークフローのパフォーマンスを追跡し、リアルタイムの洞察を得ます。
反復: 継続的な改善のために、プロジェクトに小容量のアップデートを頻繁に適用します。小容量の変更は、管理を簡素化し、必要に応じてロールバックします。
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
他の :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 認証を設定するには、以下のステップに従います。
OIDC ワークロードIDタイプを持つサービスユーザーを設定することによって WIFOIDC を構成します。
CREATE USER <username> TYPE = SERVICE WORKLOAD_IDENTITY = ( TYPE = OIDC ISSUER = 'https://token.actions.githubusercontent.com' SUBJECT = '<your_subject>' )
注釈
デフォルトでは、サブジェクトは :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>"'サブジェクトのカスタマイズの詳細については、GitHub の OpenID 接続 をご参照ください。
Snowflakeアカウント識別子を GitHub シークレットに保管します。詳細については、 GitHub Actions ドキュメンテーション をご参照ください。
表示のように、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
Snowflakeアカウントの WIFOIDC 認証の設定と GitHubOIDC プロバイダーの構成に関する詳細については、ワークロードIDフェデレーション をご参照ください。
秘密キー認証を使用する¶
秘密キー認証を使用するには、Snowflakeの秘密キーを GitHub シークレットに保存して、それを使用するための Snowflake CLI アクションを構成する必要があります。
Snowflakeの秘密キーを GitHub シークレットに保存します。
詳細については、 GitHub Actions ドキュメンテーション をご参照ください。
表示のように、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
接続の定義¶
GitHub アクションを定義して、仮接続または構成ファイルで定義された接続で Snowflake に接続することができます。接続管理の詳細については、 Snowflake接続の管理 を参照してください。
仮接続の使用¶
仮接続の詳細情報については、 仮接続の使用 を参照してください。
仮接続用のSnowflake認証情報をセットアップするには、以下の手順に従ってください。
シークレットを GitHub ワークフローの環境変数にマッピングします。次のように、
SNOWFLAKE_<キー>=<value>の形式にします。env: SNOWFLAKE_PRIVATE_KEY_RAW: ${{ secrets.SNOWFLAKE_PRIVATE_KEY_RAW }} SNOWFLAKE_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }}
Snowflake CLI アクションを構成します。
Snowflake CLI の最新バージョンを使用している場合は、
cli-versionパラメーターを含める必要はありません。次の例では、Snowflake CLI バージョン3.11.0を使用するよう、具体的にアクションに指示しています。- uses: snowflakedb/snowflake-cli-action@v2.0 with: cli-version: "3.11.0"
オプション:秘密キーが暗号化されている場合、パスフレーズを設定するには、秘密キーパスフレーズに PRIVATE_KEY_PASSPHRASE 環境変数を設定します。Snowflakeは、このパスフレーズを使用して秘密キーを復号化します。例:
- name: Execute Snowflake CLI command env: PRIVATE_KEY_PASSPHRASE: ${{ secrets.PASSPHARSE }}
秘密キーの代わりにパスワードを使用するには、次のように
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 }}
注釈
パスワードと MFA を使用する際の利便性を高めるため、Snowflake では MFA キャッシュを構成する ことを推奨しています。
Snowflake の認証情報を環境変数にセットする方法については Snowflake認証情報に環境変数を使用する を、 GitHub CI/CD ワークフロー内で環境変数を定義する方法については 1 つのワークフローに環境変数を定義する方法 を参照してください。
仮接続で実行する
snowコマンドを次のように追加します。run: | snow --version snow connection test --temporary-connection
次の例は、 <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
アクションがSnowflakeに正常に接続できることを確認したら、 snow notebook create や snow git execute のように、 Snowflake CLI コマンドを追加します。サポートされているコマンドの情報については、 Snowflake CLI コマンドリファレンス を参照してください。
構成ファイルの使用¶
接続の定義の詳細については、 コネクションの定義 を参照してください。
特定の接続用にSnowflake認証情報をセットアップするには、以下の手順に従ってください。
表示のように、空の構成接続を持つGitリポジトリのルートにある:file:
config.tomlファイルを作成します。default_connection_name = "myconnection" [connections.myconnection]
このファイルはテンプレートとして機能し、実際の認証情報 を含むべきではありません。
シークレットを GitHub ワークフローの環境変数にマッピングします。次のように、
SNOWFLAKE_<キー>=<value>の形式にします。env: SNOWFLAKE_CONNECTIONS_MYCONNECTION_PRIVATE_KEY_RAW: ${{ secrets.SNOWFLAKE_PRIVATE_KEY_RAW }} SNOWFLAKE_CONNECTIONS_MYCONNECTION_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }}
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"
オプション:秘密キーが暗号化されている場合、パスフレーズを設定するには、秘密キーパスフレーズに PRIVATE_KEY_PASSPHRASE 環境変数を設定します。Snowflakeは、このパスフレーズを使用して秘密キーを復号化します。例:
- name: Execute Snowflake CLI command env: PRIVATE_KEY_PASSPHRASE: ${{ secrets.PASSPHARSE }}
秘密キーの代わりにパスワードを使用するには、次のように
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 }}
注釈
パスワードと MFA を使用する際の利便性を高めるため、Snowflake では MFA キャッシュを構成する ことを推奨しています。
名前付き接続で実行する
snowコマンドを、次のように追加します。run: | snow --version snow connection test
次の例では、Git リポジトリ内のサンプル config.toml ファイルと、完成したサンプル <リポジトリ名>/.github/workflows/my-workflow.yaml ファイルを示します。
サンプル
config.tomlファイル:default_connection_name = "myconnection" [connections.myconnection]
サンプル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
アクションがSnowflakeに正常に接続できることを確認したら、 snow notebook create や snow git execute のように、 Snowflake CLI コマンドを追加します。サポートされているコマンドの情報については、 Snowflake CLI コマンドリファレンス を参照してください。