こんにちは。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にて、カスタムコンパイル変数を使用する場合におけるリリース方法をご紹介しました。
本記事が皆様のお役に立てれば幸いです。