💬

Github Actionsを使ってdbtを定期実行してみる

2023/07/22に公開

つい先日退職した同僚からsnowflakeのタスク定期実行をdbt x Github Actionsに移行する素晴らしい話を聞かされたので、個人的に動かしてみたいと思いとりあえずやってみました。

以下参考にさせていただいた記事

https://zenn.dev/daisuke_harato/articles/215a7486329569

Github Actions用のファイル作成

以下のファイルを

dbt-actions.yml
dbt-actions.yml
name: schedule_dbt_job

on:
   workflow_dispatch:

   schedule:
       # run at 7AM every single day
       # https://crontab.guru <-- for generating CRON expression
       - cron: "0 7 * * *"
jobs:
   schedule_dbt_job:
       name: schedule_dbt_job
       runs-on: ubuntu-latest

       steps:
       - name: Check out
         uses: actions/checkout@master

       - uses: actions/setup-python@v1
         with:
           python-version: "3.8.x"

       - name: Install dependencies
         run: |
            pip install dbt-snowflake
            python3 -m pip install --upgrade pip

       - name: set profiles
         run: |
            mkdir ~/.dbt
            cat << EOF > ~/.dbt/profiles.yml
            dbt_demo:
              target: dev
              outputs:
                dev:
                  type:      snowflake
                  account:   ${{ secrets.SF_ACCOUNT }}
                  database:  ${{ secrets.SF_DATABASE }}
                  warehouse: ${{ secrets.SF_WAREHOUSE }}
                  schema:    ${{ secrets.SF_SCHEMA }}
                  role:      ${{ secrets.SF_ROLE }}
                  threads:   8
                  user:      ${{ secrets.SF_USERNAME }}
                  password:  ${{ secrets.SF_PASSWORD }}
            EOF
            cat ~/.dbt/profiles.yml

       # dbt related commands here - run use --target prod/dev to run for specific environments
       - name: Run dbt models
         working-directory: snowflake_pj
         run: |
            dbt debug
            dbt run

Github Actionsファイルの設置

Githubのリポジトリ直下に置いてください。
例として以下をご参考ください。

Gitリポファイル構成
Gitリポファイル構成
root@3f7c4a32a705:/home/snowflake-dbt# tree -aL 3 -I .git
.
|-- .github
|   `-- workflows
|       `-- dbt-actions.yml
|-- README.md
`-- snowflake_pj
    |-- .user.yml
    |-- README.md
    |-- analyses
    |   `-- .gitkeep
    |-- dbt_packages
    |-- dbt_project.yml
    |-- logs
    |   `-- dbt.log
    |-- macros
    |   `-- .gitkeep
    |-- models
    |   |-- customers.sql
    |   |-- orders.sql
    |   `-- staging
    |-- profiles.yml
    |-- seeds
    |   |-- .gitkeep
    |   |-- raw_customers.csv
    |   |-- raw_orders.csv
    |   `-- raw_payments.csv
    |-- snapshots
    |   `-- .gitkeep
    |-- target
    |   |-- compiled
    |   |-- graph.gpickle
    |   |-- manifest.json
    |   |-- partial_parse.msgpack
    |   |-- run
    |   `-- run_results.json
    `-- tests
        `-- .gitkeep

GithubのSecrets設定

dbtのprofiles.ymlのsnowflake情報をハードコーティングするのはよくないので、GithubのSecretsで外部参照させます。

下図のとおり、Githubのリポジトリ画面より、上部の「Settings」をクリックし、画面左メニューバーより「Secrets and variables」をプルダウンし、「Actions」をクリックします。
「New repository secret」をクリックし、以下パラメータを登録します。

  • SF_ACCOUNT
  • SF_DATABASE
  • SF_WAREHOUSE
  • SF_SCHEMA
  • SF_ROLE
  • SF_USERNAME
  • SF_PASSWORD

定期的に実行されます。

ジョブが失敗するとアカウントに設定しているメールアドレス宛にメールが届きます。

Discussion