💬
Github Actionsを使ってdbtを定期実行してみる
つい先日退職した同僚からsnowflakeのタスク定期実行をdbt x Github Actionsに移行する素晴らしい話を聞かされたので、個人的に動かしてみたいと思いとりあえずやってみました。
以下参考にさせていただいた記事
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