LoginSignup
8
2

More than 1 year has passed since last update.

dbt特化型BIツール『Lightdash』を Cloud Run x Cloud SQL でホスティングしてみた

Last updated at Posted at 2023-03-06

個人的に動かす前提で各設定を行っているため、必要に応じて設定値を変更してください。

リポジトリの準備

今回は公式が公開しているCloud Runで動かす用のリポジトリを利用していきます。

また、Private リポジトリで作成したかったため、下記手順を踏みました。

git clone --bare git@github.com:lightdash/lightdash-production-example.git
cd lightdash-production-example.git
# private リポジトリで空の lightdash-cloud-run-sql リポジトリを作成
git push --mirror git@github.com:{{ 自身のGithubアカウント }}/lightdash-cloud-run-sql.git
cd ../
rm -rf lightdash-production-example.git

lighdash-entrypoint.shの編集

2023年3月7日現在、今の状態でデプロイするとknex_migrationsというテーブルが生成されないため、一番最初にyarn workspace backend migrate-productionを実行するように修正します。

lightdash-entrypoint.sh
#!/bin/bash

yarn workspace backend migrate-production

# -- OPTIONAL --
# Only needed if you want to run dbt commands on deploying lightdash
cd /usr/app/dbt
dbt seed --full-refresh
dbt run
cd /usr/app/packages/backend
# --------------

exec yarn start

VPC ネットワークを作成する

Cloud RunからCloud SQLへ接続する際に、VPC ネットワークを利用するため、新規で作成します。

項目 設定値
名前 lightdash-vpc
サブネット作成モード 自動

サービスアカウントを作成する

Cloud Runで利用するサービスアカウントを作成します。

権限 用途
BigQuery ジョブユーザー LightdashからBigQueryへジョブを実行できるようにするため
BigQuery 閲覧者 Lightdashのプロジェクト作成時に、BigQueryのスキーマ情報を読み込めるようにするため)
Cloud SQL クライアント Lightdashのユーザー情報や作成したダッシュボードを、Cloud SQLに保存できるようにするため
Secret Manager のシークレット アクセサー Cloud Runのシークレットに設定するPostgreSQLのパスワードを読み取れるようにするため

Cloud SQLのインスタンスを作成する

項目 入力値
インスタンスID lightdash-pg
パスワード  {{ 任意の文字列を設定 }}
データベースのバージョン PostgreSQL 14
最初に使用する構成の選択 サンドボックス
リージョン asia-northeast1(東京)
ゾーンの可用性 シングルゾーン
マシンタイプ 1 vCPU、3.75GB
ストレージ SSD, 10GB, ストレージの自動増量:無効
接続 プライベートIP:有効 {{ 作成したVPC ネットワーク }} 自動的に割り当てられたIP範囲を使用する, パブリックIP:無効

シークレットの作成

Cloud RunからCloud SQLに接続する際に使用するPostgreSQLのパスワードを、シークレットとして作成します。

項目 設定
名前 lightdash-pg-password
シークレットの値 {{ Cloud SQLで設定したPostgreSQLのパスワード }}
ロケーション asia-northeast1

サーバーレス VPC アクセスの作成

Cloud RunからCloud SQLVPC ネットワーク経由で接続する際に必要になるため、新規で作成します。

項目 設定
名前 lightdash-vpc-connector
リージョン asia-northeast1
ネットワーク lightdash-vpc
サブネット カスタムIP範囲, {{ Cloud SQL のプライベートIP の前2つ }}.0.0

Cloud Runのサービスを作成する

項目 入力値
ソースリポジトリから新しいリビジョンを継続的にデプロイする {{最初に作成したリポジトリを選択 }}, Build Type Dockerfile \lightdash-dockerfile
サービス名 lightdash
リージョン asia-northeast1(東京)
インスタンスの最小数 1
認証 未承認の呼び出しを許可
環境変数 PGHOST:{{ Cloud SQL のプライベートIP }}
PGUSER:postgres
PGDATABASE:postgres
LIGHTDASH_SECRET:not very secret
SITE_URL:Cloud Run が発行する URL(一度サービスをデプロイしないといけない?)
PGMAXCONNECTIONS:30
GCP_PROJECT_ID:{{ profiles.ymlで設定しているプロジェクトID }}
GCP_DATASET_ID:{{ profiles.ymlで設定しているデータセット名 }}
GCP_DATASET_LOCATION:{{ profiles.ymlで設定しているロケーション }}
シークレット 環境変数として公開, PGPASSWORD:{{ 作成したシークレット }}
Cloud SQL 接続 {{ 作成した Cloud SQL のインスタンス }}
ネットワーク {{ 作成したサーバーレス VPC コネクタ }}
セキュリティ {{ 作成したサービスアカウント }}

Lightdash にアクセスする

デプロイが完了したら、Cloud RunのサービスURLにアクセスし、初期ユーザーの作成画面が出てきたらOKです。
※ここから先は、Lightdashの操作の話になるため、詳しくは公式ドキュメントをご参照ください。

スクリーンショット 2023-03-05 21.01.47.png

今後の課題

ユーザー招待制とは言え、現状は誰でもログイン画面にアクセスできてしまうため、何かしら認証を挟むのが望ましいと考えています。

認証に関しては、Identity-Aware Proxyを利用する事例をいくつか見つけたので、必要に応じて設定しておきましょう。

8
2
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
8
2