DataformのサードパーティーGitリポジトリ接続機能を試してみた

2023.05.05

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

データアナリティクス事業本部の鈴木です。

Dataformでは以下のドキュメントに記載のように、GitHubのようなサードパーティーのGitリポジトリと連携する機能があります。今回はこの機能を使ってみたのでご紹介します。

前提

今回はGitHubのプライベートリポジトリに接続してみました。

また、Dataform側のリポジトリは、以下のブログで既に作成してあるものを使ってみました。この記事ではDataformにリポジトリを作成し、QuickStartに紹介されている定義を作成・実行し、リポジトリにもcommitしていました。

つまり、既にいくつかのcommitがあるワークスペースを含むリポジトリをGitHubに新しく接続設定するとどうなるのかを中心に確認しました。

参考にしたドキュメント

冒頭でも掲載した、以下のConnect to a third-party Git repositoryを参考に進めました。

最後に、接続したリポジトリにローカルから新しい定義を追加して、Dataformのリポジトリにpullし、BigQueryにテーブルを作成できるかについても試してみました。

やってみる

1. GitHub側の設定

まず検証用のGitHubアカウントでプライベートリポジトリを作成しました。

リポジトリの作成

続いて、SettingsDeveloper settingsからPersonal access tokens (classic)を払い出しました。

Personal access tokens (classic)の払い出し

今回、scopesはrepoにチェックを入れました。

scopeの設定

なお、personal access tokenの作成については以下のガイドに詳しく説明があるので併せてご覧ください。

また、Dataformとしては、Create and share a secretの項目に、classic personal access tokenfine-grained personal access tokenの両方が使えることがドキュメントに記載されています。

2. シークレットの作成

続いてGoogle CloudのコンソールからSecret Managerを開き、シークレットを作成を押しました。なお、Secret Manager APIが有効化されていない場合は先に有効化する作業が入ります。

シークレットを作成1

名前と先ほど生成したトークンを入力し、ほかはデフォルト設定のままシークレットを作成を押しました。

シークレットを作成2

3. Dataformサービスアカウントからのアクセス権付与

IAMと管理アクセス件の付与から、サービスアカウントへシークレットへのアクセス権の付与を行いました。

シークレットへのアクセス権付与1

ロールはSecret Manager のシークレット アクセサーを付与しています。

シークレットへのアクセス権付与2

なお、この作業は以前のブログのサービスアカウントへのアクセス権限追加でも類似の作業をしています。

4. 接続設定

Dataformのコンソールで接続したいリポジトリを開きました。

リポジトリを開く

※ 検証当日は既にDataformがGAされたアナウンスがされていましたが、画面上はプレビューと出ています。

SETTINGSタブを開き、GITと接続を押しました。

GITと接続

リモートリポジトリへのリンクに、作成したGitリポジトリのURLと、デフォルトのブランチ名、作成したpersonal access tokenを設定したシークレットを入力し、リンクを押しました。

リモートリポジトリへのリンク

Successfully linked to remote Git repositoryと表示され、接続設定が完了したことを確認できました。

接続の完了

5. DataformのリポジトリからGitHubのリポジトリへのコードの連携

事前に作成していたワークスペースであるquickstart-workspaceから、どのようにGitHubにコードを共有できるか確認しました。

三点リーダーを押すと、先ほど接続したリポジトリへ資源を共有するためのオプションがあることが分かりました。

commit作業

まず今回の接続作業実施時には、まだcommitしていない変更があったのでcommitしました。

すると、PULL FROM DEFAULT BRANCHと表示されたのでクリックしてみました。

`PULL FROM DEFAULT BRANCHをクリック

その後、PUSH TO REMOTE BRANCHと表示されたのでクリックしてみました。

PUSH TO REMOTE BRANCHをクリック

最後にOPEN REPOSITORY TO CREATE PRと表示が変わったのでGitHubのリポジトリを見に行きました。

OPEN REPOSITORY TO CREATE PRの表示

ワークスペースと同じ名前のブランチが作成されていました。

作成されたブランチ

後は普通にPRを作成すれば、Dataformで行った修正をGitHub側のデフォルトブランチにマージできました。前回の記事で作成したcommitも確かに含まれていました。

PR作成

6. GitHubのリポジトリからDataformのリポジトリへのコードの連携

続いて、GitHubのリポジトリからDataformのリポジトリ(特に先述したquickstart-workspaceワークスペース)にもコードの連携ができるか試してみました。

作成したGitHubのリポジトリをローカルにcloneして、新しいテーブル定義を作成してみました。

新しいテーブル定義

GitHubにpushして、PRを作成し、マージしました。

マージした資源

次にDataformの画面でquickstart-workspaceワークスペースを開き、デフォルトブランチからpullを押してみました。

デフォルトブランチからpull

このようにワークスペースに変更を持ってくることができました。

pullした資源

最後に、この定義を指定してアクションを実行してみました。

テーブルの作成

テーブルが作成できました。

作成したテーブル

最後に

今回は、ドキュメントを参考に、GitHubのリポジトリとDataformのリポジトリを接続してコードをどのように共有できるのか確認してみました。

既にDataformのリポジトリ側で定義を作っていても、GitHubのリポジトリと連携ができることも確認できました。

また、GitHubのリポジトリからDataformのリポジトリに新しい定義をpullしてBigQueryにテーブルを作成できることも分かりました。

今回試した内容が分かっていれば、テーブル定義などはVSCodeなど各自が慣れた開発ツールで開発をしてGitHubに連携し、デプロイはDataformのリポジトリに共有してBigQueryに反映することもできますね。

参考になりましたら幸いです。