こんにちは。SCSKの磯野です。
Dataformで、同一のSQLXファイルから複数環境(dev、prod)向けにリリースを行う方法を記載します。
今回は、複数のプロジェクトかつ複数環境(project-a-dev、project-a-prd、project-b-dev、project-b-prd)を使用する場合におけるリリース方法を記載します。
ユースケース
本記事は、以下のユースケースにおけるリリース方法を記載しています。
- 実行環境は、開発(dev)と本番(prod)の2つ
- 開発テーブルと本番テーブルで共通のSQLXファイルを使いたいが、プロジェクトは分けたい
- 1つのリポジトリで複数のプロジェクトへのリリースを管理したい
リリース方法概要
カスタムコンパイル変数を使用します。主な手順は以下の通りです。
- workflow_settings.yamlでコンパイル変数を定義する。デフォルトの値としてdev環境で使用する値を設定する
dev環境でリリースする際は、デフォルトの値を使用する。 - prod環境でリリースする際は、リリース構成にてコンパイル変数をオーバーライドする
| 設定 | 開発環境(dev) | 本番環境(prod) |
|---|---|---|
| Google Cloud プロジェクト | project-a-dev project-a-dev |
project-a-prd project-a-prd |
| Gitのブランチ | ワークスペースの名前 | main |
| ワークスペースのコンパイルのオーバーライド | なし | なし |
| リリース構成 | なし ※ワークスペースから、手動で「実行を開始」する。 |
production ※カスタムコンパイル変数にてそれぞれのプロジェクトをオーバーライド |
リリース方法詳細
事前準備
workflow_settings.yaml
vars: projectADefault: "project-a-dev" projectBDefault: "project-b-dev"
definitions/project_a/analytics/sample_table_a.sqlx
config {
type: "table",
database: dataform.projectConfig.vars.projectADefault,
schema: "analytics",
name: "sample_table_a",
}
SELECT * FROM
${ref("sample_table_b")}
definitions/project_b/mydataset/sample_table_b.sqlx
config {
type: "declaration",
database: dataform.projectConfig.vars.projectBDefault,
schema: "mydataset",
name: "sample_table_b",
}
リリース構成
- リリースID:production
- git Commitish:main
- コンパイル変数
キー 値 projectADefault project-a-prod projectBDefault project-b-prod これにより、コンパイル変数がオーバーライドされる。
手順
開発環境(dev)の場合
ワークスペースから、手動で「実行を開始」します。
カスタムコンパイル変数を上書きせずに実行することで、デフォルトのコンパイル変数の設定で実行可能です。
本番環境(prod)の場合
<手動実行の場合>
<スケジュール実行の場合>
リリース構成productionを指定してワークフロー構成を作成する
まとめ
いかがだったでしょうか。
今回はDataformにて、カスタムコンパイル変数を使用する場合におけるリリース方法をご紹介しました。
本記事が皆様のお役に立てれば幸いです。

