個人的に動かす前提で各設定を行っているため、必要に応じて設定値を変更してください。
リポジトリの準備
今回は公式が公開している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を実行するように修正します。
#!/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 SQLへVPC ネットワーク経由で接続する際に必要になるため、新規で作成します。
| 項目 | 設定 |
|---|---|
| 名前 | 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の操作の話になるため、詳しくは公式ドキュメントをご参照ください。
今後の課題
ユーザー招待制とは言え、現状は誰でもログイン画面にアクセスできてしまうため、何かしら認証を挟むのが望ましいと考えています。
認証に関しては、Identity-Aware Proxyを利用する事例をいくつか見つけたので、必要に応じて設定しておきましょう。
