業界・業務から探す
導入目的・課題から探す
データ・AIについて学ぶ
News
Hakkyについて
ウェビナーコラム
◆トップ【データ基盤】
データハブとは
Ajust
データの保守運用
AI

執筆者:Handbook編集部

dbt docsをCloud Runでホスティングする【Terraformでの実装付】

この記事では、dbt のドキュメントを Cloud Run でホスティングする方法について紹介します。
Cloud Run の Docker イメージはCloud Run Jobs で dbt を定期実行する方法で紹介しているものを使用します。

構成

この記事で作成する環境です。
Cloud Run 上で dbt docs をホスティングし、前段に Load Balancing を配置して IAP 認証を実装します。 これにより、特定のメンバーだけが dbt docs を閲覧できる環境を作成できます。

実装

Github Actions

まずは Cloud Run をデプロイする Github Actions を作成します。

Cloud Run Jobs で dbt を定期実行する方法で紹介している Github Actions のUpdate Cloud Run Jobsを以下のコードに差し替えてください。

- name: Update Cloud Run Jobs
  run: |
    gcloud components install beta --quiet
    gcloud run deploy dbt-docs \
      --quiet \
      --project=${{ env.GCP_PROJECT_ID }} \
      --command=bash \
      --args="-c,dbt docs generate && dbt docs serve --port 8080" \
      --region asia-northeast1 \
      --port 8080 \
      --cpu=1 \
      --memory=2Gi \
      --service-account="${{ env.GCP_PROJECT_NUMBER }}-compute@developer.gserviceaccount.com" \
      --timeout 900s \
      --allow-unauthenticated \
      --ingress=internal-and-cloud-load-balancing \
      --image=${{ steps.image-url.outputs.name }}
info
備考

実装時のポイント

以下のように Cloud Run のコマンドを指定することで、Cloud Run Jobs で dbt を定期実行する方法で使用している Docker イメージを流用できます。

--command=bash \
--args="-c,dbt docs generate && dbt docs serve --port 8080" \

Terraform

次に、terraform を使用して、その他環境構築を行います。

resource "google_compute_global_address" "load_balancer" {
  name = "${var.app_name}-address"
}

resource "google_iap_web_backend_service_iam_binding" "binding_default" {
  project             = google_compute_backend_service.main.project
  web_backend_service = google_compute_backend_service.main.name
  role                = "roles/iap.httpsResourceAccessor"
  members             = var.iap_https_resource_accessor_group
}

resource "google_iap_brand" "main" {
  application_title = var.app_name
  support_email     = "email@example.com"
}

resource "google_iap_client" "main" {
  display_name = var.app_name
  brand        = google_iap_brand.main.name
}


resource "google_compute_backend_service" "main" {
  name = "${var.app_name}-main"


  protocol    = "HTTPS"
  port_name   = "http"
  timeout_sec = 30
  depends_on  = [google_compute_region_network_endpoint_group.main]

  dynamic "backend" {
    for_each = google_compute_region_network_endpoint_group.main

    content {
      group = backend.value.id
    }
  }

  iap {
    oauth2_client_id     = google_iap_client.main.client_id
    oauth2_client_secret = google_iap_client.main.secret
  }

  log_config {
    enable      = true
    sample_rate = 1
  }
}

resource "google_compute_url_map" "default" {
  name            = "${var.app_name}-urlmap"
  default_service = google_compute_backend_service.main.id
}

resource "google_compute_target_https_proxy" "default" {
  name = "${var.app_name}-https-proxy"

  url_map          = google_compute_url_map.default.id
  ssl_certificates = [google_compute_managed_ssl_certificate.default.id]
}

resource "google_compute_global_forwarding_rule" "default" {
  name = "${var.app_name}-lb"

  target     = google_compute_target_https_proxy.default.id
  ip_address = google_compute_global_address.load_balancer.address
  port_range = "443"
}


resource "google_compute_managed_ssl_certificate" "default" {

  provider = google-beta
  project  = var.project

  name = "${var.app_name}-cert"
  managed {
    domains = [var.domain_main]
  }
}

resource "google_compute_region_network_endpoint_group" "main" {
  for_each = toset(var.service_regions)

  name                  = "${var.app_name}-main--neg--${each.key}"
  network_endpoint_type = "SERVERLESS"
  region                = each.key
  cloud_run {
    service = var.app_name
  }
}

IAP 権限付与

Github Actions で Cloud Run、Terraform で Load Balanging や IAP を作成できたら、roles/iap.httpsResourceAccessorをアクセスを許可したいユーザまたはグループに付与します。

ドキュメント確認

実際に dbt docs を確認するため、Certificate に登録したドメインにアクセスしてみます。

許可されたアカウントの場合は dbt docs を閲覧できました。

許可されていないアカウントの場合は認証を求められます。

また、http アクセスや、Cloud Run のエンドポイントに直接アクセスした場合も、もちろんアクセスはできません。

まとめ

Cloud Run に IAP 認証を付けることで、セキュリティを担保しながら Google Cloud 上で dbt docs をホスティングすることができました。 Cloud Run Jobs で dbt を定期実行する方法と合わせて使用することで、dbt の実行から docs のホスティングまで Cloud Run で管理することができます。

参考

info
備考

Hakky ではエンジニアを募集中です!まずは話してみたいなどでも構いませんので、ぜひお気軽に採用ページからお問い合わせくださいませ。

2025年07月05日に最終更新
読み込み中...