0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GCEのContainer-Optimized OSでdbt CLIを動かしてみる

Last updated at Posted at 2022-05-01

この記事はなに?

GoogleCloudPlatform(GCP)のGoogleComputeEngine(GCE)インスタンス上で、CLI版のdbtを動かしてBigQueryにテーブルを生成する過程をまとめた記事になります。

GCEインスタンスの作成

基本的にはデフォルトの設定をいじらず、費用もかけたくなかったためこちらの情報をもとに選択しつつ、今回はDocker経由でdbtの実行環境を作るため、イメージとしてContainer-Optimized OSを選択し作成しました。

項目
名前 dbt
リージョン us-central1(アイオワ)
シリーズ E2
マシンタイプ e2-micro(2 vCPU、1GBメモリ)
OS Container Optimized OS
バージョン Container-Optimized OS 85-13310.1453.1 LTS
ブートディスクの種類 標準永続ディスク
サイズ 10

接続用のポートを開けておく

ファイアウォールからtcp:8081を許可するタグを作って、先程作ったGCEインスタンスに付与しておきます。

ローカルからssh接続

ローカルPCにCloud SDKをインストールし、gcloudコマンドを使って先程作ったインスタンスにsshで接続します。
※ブラウザウィンドウでも接続はできるので、この辺はお好みで。

$ gcloud compute ssh --zone "us-central1-a" "dbt"  --project "{{GCPのプロジェクト名}}"

# 作業用のディレクトリを作成しておく
$ mkdir works
$ exit

サービスアカウントの作成

dbtを通してBigQueryにテーブルを生成するため、BigQueryにアクセスする権限を持つサービスアカウントを作成しておきます。
本来は必要最小限の権限を付与するべきですが、今回は勉強用のため、サービスアカウントに対してBigQuery管理者の権限を付与しました。

また、dbtのコマンド実行時に認証が走るため、JSON形式で認証鍵をダウンロードし、GCEインスタンスにアップロードしておきます。

$ gcloud compute scp --project "{{GCPのプロジェクト名}}" --zone "us-central1-a" --recurse {{ファイルパス}} {{GCPのユーザー名}}@dbt:/home/{{GCPのユーザー名}}/works

必要なファイルを作成

作業用ディレクトリとして作ったworksディレクトリ配下に必要なファイルを作っていきます。

Dockerfile
FROM python:3.9.12-slim-bullseye

ARG dbt_bigquery_ref=dbt-bigquery@v1.0.0

# System setup
RUN apt-get update \
  && apt-get dist-upgrade -y \
  && apt-get install -y --no-install-recommends \
    git \
    ssh-client \
    software-properties-common \
    make \
    build-essential \
    ca-certificates \
    libpq-dev \
    vim \
  && apt-get clean \
  && rm -rf \
    /var/lib/apt/lists/* \
    /tmp/* \
    /var/tmp/*

# Env vars
ENV PYTHONIOENCODING=utf-8
ENV LANG=C.UTF-8

# Update python
RUN python -m pip install --upgrade pip setuptools wheel --no-cache-dir

# dbt-bigquery
RUN python -m pip install --no-cache-dir "git+https://github.com/dbt-labs/${dbt_bigquery_ref}#egg=dbt-bigquery"

COPY profiles.yml /root/.dbt/profiles.yml

WORKDIR /usr/app/dbt/
VOLUME /usr/app
ENTRYPOINT tail -f /dev/null
dbt_project.yml
name: 'sample_project'
version: '1.0.0'
profile: 'sample_project'
config-version: 2

models:
  sample_project:
    marts:
      schema: mart
      materialized: table
profiles.yml
sample_project:
  target: dev
  outputs:
    dev:
      type: bigquery
      method: service-account
      project: {{GCPのプロジェクトID}}
      dataset: analysis
      threads: 3
      keyfile: /usr/app/dbt/{{認証鍵のJSONファイル}}

models/martsディレクトリ配下に、モデル生成の検証用SQLを作っておきます。

modes/marts/sample.sql
SELECT 
  1

コンテナに接続して、BigQueryにテーブルを生成する

$ docker build -t dbt-bigquery .
$ docker run -d -v $PWD:/usr/app/dbt -p 8081:8081 dbt-bigquery
$ docker exec -it {{コンテナID}} /bin/bash

$ dbt run
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?