dbt Projects on SnowflakeのスキーマオブジェクトへのデプロイをGitHub Actions経由でやってみた

dbt Projects on SnowflakeのスキーマオブジェクトへのデプロイをGitHub Actions経由でやってみた

2025.09.25

さがらです。

dbt Projects on SnowflakeのスキーマオブジェクトへのデプロイをGitHub Actions経由でやってみたので、その内容について本記事でまとめてみます。

※2025/9/25時点、dbt Projects on Snowflakeはプレビュー機能のためご注意ください。特にdbt deps周りの挙動は今後改善される可能性も高いと予想していますので、都度最新情報を確認するようにしてください。

行うこと

以下の記事に記載のある処理フローを参考に、GitHub Actionsのフローを作ってみます。(この記事については、スキーマオブジェクトへのデプロイの前にdbt depsを実行してdbt_packagesを生成しておく必要があること等含め、大変参考にしております。ありがとうございます!)

1.mainにマージされてdbtの階層のファイルが更新されているのをトリガーにワークフローが起動する
2.gitチェックアウト
3.dbtのインストール
4.dbt depsの実行
5.Snowflake CLIのインストール
6.snow dbt deployコマンドの実行

https://zenn.dev/jimatomo/articles/42e163fc561364

前提条件

WorkspaceでGitHubと連携し、適当なmodelファイルも作成し、dbtコマンドが実行できる状態まで設定しておきます。

今回は、以下の記事の内容を一通り行った状態からスタートします。

https://dev.classmethod.jp/articles/try-dbt-projects-on-snowflake-with-github/

Snowflake CLIをGitHub Actionsで実行するためのファイルをリポジトリに作成

Snowflake CLIをGitHub Actionsで実行するためのtomlファイルをリポジトリに作成しておきます。(このSnowflake CLIをGitHub Actionsで動かす方法については、以下の記事がとても参考になります。)

https://dev.classmethod.jp/articles/snowflake-cli-github-actions/

Workspaceで関連するdbt Projectを開き、ルート階層にconfig/config.tomlファイルを作成します。

2025-09-25_09h21_36

このconfig.tomlの内容ですが、下記のように記述します。接続に必要な各パラメータは環境変数で渡すことができるため、GitHub Actionsのenvから後で渡すことにします。

			
			default_connection_name = "workflow"

[connections.workflow]


		

GitHubのリポジトリでSnowflake CLIの認証に必要な情報をsecretとして追加

GitHub ActionsからSnowflake CLIを使ってキーペア認証をするため、必要な情報をsecretとして追加します。

下図のように、リポジトリのSettingsSecrets and variablesActionsから3つのsecretを定義しておきます。

  • SNOWFLAKE_ACCOUNT組織名_アカウント名の形式でSnowflakeのアカウントを記載
  • SNOWFLAKE_USER:認証に用いるSnowflakeのユーザー名を記載
  • SNOWFLAKE_PRIVATEKEY-----BEGIN PRIVATE KEY-----から-----END PRIVATE KEY-----まで含めた、秘密鍵の内容を記載

2025-09-25_09h40_47

GitHub Actionsのワークフローファイルを作成

Workspaceで関連するdbt Projectを開き、ルート階層に.github/workflows/deploy_dbt_project.ymlファイルを作成します。(ファイル名は何でも良いです。)

2025-09-25_09h24_36

このdeploy_dbt_project.ymlの中身ですが、以下のように記述します。ポイントは以下2点です。

  • dbt-snowflakeをインストールしてdbt depsを行っていること
    • これを行わないと、外部のパッケージをインストールせずにdbt projectオブジェクトを作成することになってしまいます。
    • 参考までに、dbt Projects on Snowflakeで使用するprofiles.ymlではアカウント情報など記載がありませんが、dbt depsではSnowflakeへの接続が行われないため問題なしです。
  • snow dbt deployコマンドでは--forceオプションを付けることで、既存のdbt projectオブジェクトがあっても上書き可能に
			
			name: Deploy dbt Project to Snowflake

on:
  push:
    branches:
      - main
  workflow_dispatch:

jobs:
  deploy-to-snowflake:
    runs-on: ubuntu-latest

    env:
      SNOWFLAKE_CONNECTIONS_WORKFLOW_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }}
      SNOWFLAKE_CONNECTIONS_WORKFLOW_USER: ${{ secrets.SNOWFLAKE_USER }}
      SNOWFLAKE_CONNECTIONS_WORKFLOW_PRIVATE_KEY_RAW: ${{ secrets.SNOWFLAKE_PRIVATEKEY }}
      SNOWFLAKE_CONNECTIONS_WORKFLOW_WAREHOUSE: "sagara_dbt_wh"
      SNOWFLAKE_CONNECTIONS_WORKFLOW_ROLE: "sagara_admin_role"
      SNOWFLAKE_CONNECTIONS_WORKFLOW_AUTHENTICATOR: "SNOWFLAKE_JWT"

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.10'

      - name: Install dbt-snowflake # dbt Projects on Snowflakeはまだ1.9のため、合わせている
        run: pip install "dbt-snowflake~=1.9.0"

      - name: Install Snowflake CLI
        uses: Snowflake-Labs/snowflake-cli-action@v1.5
        with:
          cli-version: "latest"
          default-config-file-path: 'config/config.toml'

      - name: Run dbt deps
        run: dbt deps --project-dir .

      - name: Deploy to Snowflake
        run: |
          snow dbt deploy SAGARA_DBT_DEMO_DB.PRODUCTION.DBT_DEPLOYMENT_PROD \
            --force \
            --source . \
            --profiles-dir . \
            --connection workflow \
            --database SAGARA_DBT_DEMO_DB \
            --schema PRODUCTION

		

実際に動かしてみた

下図のようにdbt_utilspackages.ymlに追加して、dbt_utilsを用いたテストも追加して、挙動を確認してみます。

2025-09-25_11h01_59

2025-09-25_10h59_59

※余談ですが、Workspaceからdbt depsを実行する際は、External Network Accessの指定が必要です。(詳細はこちらの記事もご覧ください。)

2025-09-25_11h04_01

コミット・マージしたときの挙動

設定したGitHub Actionsのワークフローが実行されます。

すべての実行結果は記載しませんが、snow dbt deployのログは下図のようになっています。Temporary Stageが作られてdbt関係のファイルを丸ごとコピーし、コピー先のステージ上のファイルを元にdbt Projectのオブジェクトを作成していることがわかります。

2025-09-25_11h05_48

この後でスキーマにデプロイされたdbt Projectのオブジェクトを確認すると、下図のように表示されます。fromのあとを見るとTemporary Stageから作られていることがわかりますね。

2025-09-25_11h06_16

実際にデプロイしたdbt projectを動かしてみる

execute dbtコマンドで、実際にデプロイしたdbt projectを動かしてみます。

			
			execute dbt project sagara_dbt_demo_db.production.dbt_deployment_prod args='build --target prod';

		

ログを見ると、ちゃんとdbt_utilsのテストが実行されていました。これにより、GitHub Actionsを介してdbt depsを用いた外部パッケージのインストール含めて、無事にスキーマオブジェクトへのデプロイができていることがわかりました!

2025-09-25_11h13_54

最後に

dbt Projects on SnowflakeのスキーマオブジェクトへのデプロイをGitHub Actions経由でやってみました。

開発するたびに手動でスキーマオブジェクトへデプロイする運用は辛いと思いますので、本記事のようにGitHub Actionsを使ってデプロイを自動化していきましょう!

この記事をシェアする

FacebookHatena blogX

関連記事

dbt Projects on SnowflakeのスキーマオブジェクトへのデプロイをGitHub Actions経由でやってみた | DevelopersIO