最近Google Cloud Dataform(オープンソースではないほう)の利用を検討していました。
検討する際に躓いた点があったので、それを残しておきます。2024年6月時点の情報なので、その点ご留意ください。
またリポジトリとの連携に関してはGitLabを利用していたので、その前提になります。
- 1. git repositoryとの連携はデフォルトのサービスアカウントしかできない
- 2. 公開されていないgit repositoryとの連携は申請しないとできない
- 3. GitLabと連携する場合、プロジェクトのアクセストークンではpushができない(?)
- 4. Dataform repositoryのterraform管理は現在beta機能
- 終わりに
1. git repositoryとの連携はデフォルトのサービスアカウントしかできない
Dataformにはデフォルトのサービスアカウントが用意されていますが、自身で作成したサービスアカウントをDataformのリポジトリに紐づけることもできます。そのためカスタムのサービスアカウントを作成し権限を分けることも検討すると思います。
ただし、注意点としてgit repositoryとの連携はデフォルトのサービスアカウントしかできません。
では実質的にデフォルトのサービスアカウントを使うしかないのかというと、そういう訳ではなく、git repositoryとの連携は自動的にデフォルトのサービスアカウントが行うということを把握して権限を設計すればOKです。
僕は以下のように整理しました。
サービスアカウントの種類 | 説明 | 必要な権限 |
---|---|---|
デフォルト | gitリポジトリとの連携の際に自動的に利用される。連携の際にはアクセストークンをSecret Managerで管理することになる。 | roles/secretmanager.secretAccessor 、roles/iam.serviceAccountTokenCreator *1 |
カスタム | Dataformの実行に利用する。BigQueryに対するクエリの実行やJobの実行権限を付与する。 | roles/bigquery.dataEditor 、roles/bigquery.user あたり。Secret Managerへのアクセス権は不要。 |
2. 公開されていないgit repositoryとの連携は申請しないとできない
書いてある通りです。ドキュメントのほぼ先頭に記載があるのですが、はじめ見落としていました...
申請したうえで固定IPからのアクセスを許可する必要があります。Dataformを利用する以上git repositoryとは連携したいと思うので、気をつけてください。
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つであること
- エンジニア以外が触る可能性もあること(特にワークフローまわり)
が理由です。このあたりは運用してみて変えるかもしれません。
終わりに
Dataform自体は言わずもがなですが良いサービスと思います。
KPIダッシュボードや分析用のクエリは、作った人以外触れない、みたいな状況になりやすいので、依存関係を整理してGit管理できるのはありがたいです。これからもっと良くなっていくと良いなと思います!