これからDataformを利用する際、リポジトリを作るまでに躓いたこと

Dataform

最近Google Cloud Dataform(オープンソースではないほう)の利用を検討していました。
検討する際に躓いた点があったので、それを残しておきます。2024年6月時点の情報なので、その点ご留意ください。
またリポジトリとの連携に関してはGitLabを利用していたので、その前提になります。

1. git repositoryとの連携はデフォルトのサービスアカウントしかできない

Dataformにはデフォルトのサービスアカウントが用意されていますが、自身で作成したサービスアカウントをDataformのリポジトリに紐づけることもできます。そのためカスタムのサービスアカウントを作成し権限を分けることも検討すると思います。
ただし、注意点としてgit repositoryとの連携はデフォルトのサービスアカウントしかできません。

では実質的にデフォルトのサービスアカウントを使うしかないのかというと、そういう訳ではなく、git repositoryとの連携は自動的にデフォルトのサービスアカウントが行うということを把握して権限を設計すればOKです。

僕は以下のように整理しました。

サービスアカウントの種類 説明 必要な権限
デフォルト gitリポジトリとの連携の際に自動的に利用される。連携の際にはアクセストークンをSecret Managerで管理することになる。 roles/secretmanager.secretAccessorroles/iam.serviceAccountTokenCreator*1
カスタム Dataformの実行に利用する。BigQueryに対するクエリの実行やJobの実行権限を付与する。 roles/bigquery.dataEditorroles/bigquery.userあたり。Secret Managerへのアクセス権は不要。

cloud.google.com

2. 公開されていないgit repositoryとの連携は申請しないとできない

公式ドキュメントより
書いてある通りです。ドキュメントのほぼ先頭に記載があるのですが、はじめ見落としていました...
申請したうえで固定IPからのアクセスを許可する必要があります。Dataformを利用する以上git repositoryとは連携したいと思うので、気をつけてください。

cloud.google.com

3. GitLabと連携する場合、プロジェクトのアクセストークンではpushができない(?)

運用を考えたときに、プロジェクトのアクセストークンを利用して連携するのが良いかなと思い進めていたのですが、いざ連携してからpushしようとしたところ、以下のエラーになりました。

API リクエスト エラー: Remote repository 'https://hogehoge.com/fuga/dataform.git' could not be reached.

原因はよくわかっておりません。個人のアクセストークンに変更したらpushできましたが、個人のアクセストークンに紐づけるのはよろしくないので結局ssh接続に切り替えました。

4. Dataform repositoryのterraform管理は現在beta機能

terraformを利用してインフラリソースの管理をしている場合、Dataformも対象になると思います。Dataformもterraformでの記述は可能ですが、現在はbeta機能です。
今回僕はrepositoryの管理はterraform管理から外しました。

  • bata機能であったこと
  • 環境ごとにGoogle Cloudのプロジェクトが分かれていることに対し、git repositoryは1つであること
  • エンジニア以外が触る可能性もあること(特にワークフローまわり)

が理由です。このあたりは運用してみて変えるかもしれません。

registry.terraform.io

終わりに

Dataform自体は言わずもがなですが良いサービスと思います。
KPIダッシュボードや分析用のクエリは、作った人以外触れない、みたいな状況になりやすいので、依存関係を整理してGit管理できるのはありがたいです。これからもっと良くなっていくと良いなと思います!

*1:特に日本語のドキュメントが混乱するのですが、権限を付与するのはデフォルトのサービスアカウントに対してです