😎

dbt cloudのTeam Planでも複数のサービスアカウントが設定可能に

2024/09/20に公開

dbt cloudで先日、DWHとの接続設定を管理するconnectionsというリソースについてアップデートがあった。

New: Connections are now available under Account settings as a global setting.
Previously, they were found under Project settings. This is being rolled out in phases over the coming weeks.

connectionリソースの紐づけ先がプロジェクトからアカウントに変わったということなのだが、その変更と合わせて、1つのdbt cloudプロジェクトにつき1つしかconnection(サービスアカウント)を設定できないという制限も取り払われた。どちらかというとそちらの変更の方がインパクトが大きい。


専用のConnectionsタブが増えている

これまでの1つのdbt cloudプロジェクトにつき、1つのサービスアカウントしか設定できない状態では、dbt cloud IDEの開発も、スケジューラーでのjob実行も、どちらも同じサービスアカウントで行われていた。

一応target変数のような機能を使って出力先の環境分離はできるものの、設定を変更してしまえばdbt cloud IDEからでも本番環境に対してクエリを実行できてしまうという物騒な状態で運用せざるを得ないこともあり、当時触っていたチーム内でもガバナンスの面で懸念の声があった。

複数のサービスアカウントを設定したい場合は、Enterprise Planを契約してプロジェクト数の上限を開放しないといけないという制約かと思っていたが、今回のアップデートにより、Team Plan以下でも複数設定できるように緩和された。

jobやIDEとconnectionの紐づけは、Environmentsリソースを経由して行う形になる。


environemnt編集時に使用するconnectionを選べる

IDEとjobの実行環境分離だけではなく、Pull Reuqest作成時に起動するSlim CI jobはstaging environmentを使用し、実行環境として開発用のGCPプロジェクトを指定、という構成も可能になっている。

terraform providerにも、このアップデートは既に反映されており、以下のようなコードで設定することができる。

resource "dbtcloud_global_connection" "bigquery" {
  name = "My BigQuery connection"
  bigquery = {
    gcp_project_id              = "my-gcp-project-id"
    timeout_seconds             = 1000
    private_key_id              = "my-private-key-id"
    private_key                 = "ABCDEFGHIJKL"
    client_email                = "my_client_email"
    client_id                   = "my_client_id"
    auth_uri                    = "my_auth_uri"
    token_uri                   = "my_token_uri"
    auth_provider_x509_cert_url = "my_auth_provider_x509_cert_url"
    client_x509_cert_url        = "my_client_x509_cert_url"
    application_id              = "oauth_application_id"
    application_secret          = "oauth_secret_id"
  }
}

resource "dbtcloud_environment" "ci_environment" {
  dbt_version   = "versionless"
  name          = "CI"
  project_id    = dbtcloud_project.dbt_project.id
  type          = "deployment"
  credential_id = dbtcloud_bigquery_credential.ci_credential.credential_id
  connection_id = dbtcloud_global_connection.bigquery.id
}

dbt cloudは数年前は最小限の機能しかなかったが、独自機能も含めた改修が高頻度で行われており、オーケストレーションツールとしても十分な性能になってきたのではないだろうか。

参考資料

https://docs.getdbt.com/docs/cloud/connect-data-platform/about-connections#connection-management

Discussion