はじめに
この記事では、Dataform を Terraform で構築する方法を紹介します。
なお今回は、Dataformで実行するコードをGithubから取得し、Dataformのデフォルトのサービスアカウントで実行することを想定しています。
早速ですが、Terraform の書き方は以下の通りです
ファイル構成
- locals.tf
- secret.tf
- role.tf
- dataform.tf
locals.tf
まず、今回作成するリソースで使う各種変数を定義します。
リージョン、プロジェクト名、プロジェクト番号、環境、スケジューリングのタイムゾーンを設定します。
secret.tf
次にSecret ManagerにGithubの個人用アクセス トークン(Personal Access Tokens)を設定します。
role.tf
続いて、Dataformのデフォルトのサービスアカウントに実行に必要な権限を設定します。
最後に、実際のDataformのリソースを定義します。
google_dataform_repository
においては、接続する Git リポジトリのURL、デフォルトのブランチ名、シークレットの設定をします。
また、接続するリポジトリ内のdataform.jsonで指定している各種デフォルト設定をworkspace_compilation_overridesの中で上書きすることができます。
今回は、dafault_databaseをlocal.projectに指定しています。
これにより、同一のソースコードを本番/ステージング/開発環境などにデプロイしBigQueryを実行するプロジェクトを切り分けることが可能になります。
google_dataform_repository
においては、接続する Git リポジトリの情報を取得する頻度を設定します。
以下の例では、cron_scheduleで毎日午前0時に取得するように設定しています。
また、code_compilation_configのvarsにおいて、カスタム変数を指定することも可能です。
Dataformで実行されるクエリが、default_database以外のGCP プロジェクトを参照する場合などに便利です。
google_dataform_repository_workflow_config
においては、Dataformのワークフローを設定します。
以下の例では、sqlxのconfigの中にdailyタグが入っているクエリを毎日1:00に実行しています。
これは、上記の google_dataform_repository
の時間の後にすると最新の情報が反映されやすいでしょう。
まとめ
本記事では、Terraform で Dataform を管理する方法について解説しました。
Terraformを利用することで、Terraform の設定管理を効率的かつミスの少ないものにできます。

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