Closed8

dbt Cloud から Cloud Run にお引越し

hiracky16hiracky16

dbt Cloud のプロジェクトを作った際に Github でコード管理していたのでまずはクローンする。

hiracky16hiracky16

Dockerfile を追加
とりあえずこのサイトにあったイメージを使ってみる。
https://github.com/dbt-labs/dbt-core/pkgs/container/dbt-core

Dockerfile
FROM ghcr.io/dbt-labs/dbt-core:1.2.3
RUN pip install dbt-bigquery

WORKDIR /dbt
ENV PROJECT hogehoge
ENV DATASET test
ENV KEY_FILE /credentials/key.json

COPY profiles.yml.template .
RUN eval "echo \"$(cat profiles.yml.template)\"" > profiles.yml

COPY dbt_project.yml .
COPY packages.yml .
RUN dbt deps

COPY . .

ENTRYPOINT [ "dbt" ]
hiracky16hiracky16

試しに ENTRYPOINT を修正して run-operation を実行してみると成功!
ちなみに以下は外部テーブルつくる operation ですね。

ENTRYPOINT [ "dbt", "run-operation", "stage_external_sources",  "--vars", "{'ext_full_refresh': 'true'}" ]
09:16:18  3 of 3 START external source datalake.table
09:16:18  3 of 3 (1) create or replace external table `hogehoge`.`datalake`.`table`(             ...  
09:16:19  3 of 3 (1) None (0 processed)
hiracky16hiracky16

ビルドして Artifact Registry に push

docker build -t asia-northeast1-docker.pkg.dev/hogehoge/repositoy/dbt:latest .
docker push asia-northeast1-docker.pkg.dev/hogehoge/repositoy/dbt:latest
hiracky16hiracky16

Cloud Run(ジョブ)にデプロイしていく。
イメージはさっき push したものを使う。
ENTRYPOINT には dbt のみ指定しているのでオプションをコマンドで以下のように渡してあげる。

hiracky16hiracky16

profiles.yml で認証方法をサービスアカウントで指定したためジョブにキーをマウントする。
json ファイルを Secret Manger にアップして予め登録しておく。
ここらへんもっとうまいやり方があるのかもしれない…

ちなみに IAM に登録しているロールは以下

hiracky16hiracky16

profiles.yml で指定した dataset が dbt Cloud だとデフォルトで dbt_prd になっている?ので同じになるように修正した。
(dbt Cloud の profiles.yml はどこにあるんだろう 🤔 )

あとは Cloud Run 側で実行するだけ。
コマンドを変えて複数のジョブを定義することで --models tag:xxx のいろいろな tag で実行できるようにした。

このスクラップは2023/01/08にクローズされました