🍖

Cloud Buildでdbtを実行しタイムアウトをデフォルト10分から変更する

2022/06/14に公開

Cloud Buildとは

Cloud Buildは、Google Cloud 上でビルドを実行するサービスです。

GithubやBitbucketのリポジトリからソースコードをインポートし、仕様に合わせてビルドを実行し、該当する場合はDockerコンテナなどのアーティファクトをArtifact Registryに生成します。

ビルド構成とビルドステップ

ビルド構成ファイルをYAMLまたはJSON構文で作成することで、実行するタスクをCloud Buildに指示できます。
https://cloud.google.com/build/docs/build-config-file-schema

Cloud Buildは一連のビルドステップとして、ビルドを実行します。各ビルドステップはDockerコンテナ上で実行されます。

ビルドステップにはCloud Buildに実行させるアクションを指定します。構成ファイルには最大100個のビルドステップを含めることができます。

構成ファイルのnameにはDocker Hubで一般公開されているイメージや、Cloud Buildが提供しているビルドの用のイメージであるクラウドビルダーを使うことができます。

steps:
- name: 'ubuntu'
  args: ['echo', 'hello world']
steps:
- name: 'gcr.io/cloud-builders/kubectl'
  args: ['set', 'image', 'deployment/mydepl', 'my-image=gcr.io/my-project/myimage']
  env:
  - 'CLOUDSDK_COMPUTE_ZONE=us-east4-b'
  - 'CLOUDSDK_CONTAINER_CLUSTER=my-cluster'
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '-t', 'gcr.io/my-project-id/myimage', '.']

Cloud Buildでdbtを実行する

2022.06.14現在でDocker Hubで最新のdbtのイメージはfishtownanalytics/dbt:1.0.0です。
https://hub.docker.com/layers/dbt/fishtownanalytics/dbt/1.0.0/images/sha256-4c9462867d2db6869a048ba429d3557a562ac20337d4ce25b634c0e026954028?context=explore

なので以下のような構成ファイルを作成します。dbtディレクトリ配下に各モデルを配置している場合は、dirを指定します。

steps:
  - name: "fishtownanalytics/dbt:1.0.0"
    args: ["build", "--target", "prod"]
    dir: "dbt"

タイムアウト時間を変更する

Cloud Buildのビルドのタイムアウト時間はデフォルトで10分です。この時間以上経過すると、ビルドの処理は停止し、ビルドのステータスはTIMEOUTになります。

dbtでレコード数が多いテーブルを生成する場合は10分を超える場合もあるので、
構成ファイルのtimeoutフィールドを指定して、このタイムアウトを変更します。

timeoutフィールドにはビルドステップとビルド全体の両方に対して存在します。ビルドステップ毎にタイムアウトを設定したい場合は、ビルドステップにtimeoutフィールドを、ビルド全体にtimeoutフィールドを設定したい場合は共通で記入します。

以下はビルド全体にtimeoutフィールドを1時間に設定した場合の例になります。

steps:
  - name: "fishtownanalytics/dbt:1.0.0"
    args: ["build", "--target", "prod"]
    dir: "dbt"
timeout: 3600s

Discussion