実行をスケジュールする

このドキュメントでは、Dataform で次の操作を行う方法について説明します。

次の表は、各メソッドを比較したものです。

メソッド 目標 トリガーのタイプ
ワークフロー構成 Dataform 内の標準的な時間ベースの本番環境実行。 時間ベース
Workflows と Cloud Scheduler 他の API とともに Dataform を軽量でサーバーレスにオーケストレートします。 時間ベースまたはイベント ドリブン
Cloud Composer BigQuery の外部に依存関係がある複雑なパイプライン。 時間ベースまたはイベント ドリブン
Cloud Build トリガー Git push の直後にリリースを自動化する。 イベント ドリブン

始める前に

ワークフロー構成で実行をスケジュールするか、ワークフローと Cloud Scheduler で実行をスケジュールするには、次の操作を行います。

  1. Google Cloud コンソールで、[Dataform] ページに移動します。

    Dataform に移動

  2. リポジトリを作成または選択します。

  3. リリース構成を作成する

Cloud Composer で実行をスケジュールするには、次の操作を行います。

  1. Dataform リポジトリを作成または選択します。
  2. Dataform に BigQuery へのアクセス権を付与します
  3. Dataform ワークスペースを作成または選択します。
  4. 少なくとも 1 つのテーブルを作成します
  5. Cloud Composer 2 環境を作成する

必要なロール

このドキュメントのタスクを完了するために必要な権限を取得するには、管理者に次の IAM ロールを付与するよう依頼してください。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

ワークフロー構成の作成時にカスタム サービス アカウントを使用するには、カスタム サービス アカウントへのアクセス権を付与します。

ワークフロー構成の作成時に Google アカウントのユーザー認証情報(プレビュー)を使用するには、Google アカウントへのアクセス権を付与します。

ワークフロー構成のスケジュール設定された実行を有効にするには、ワークフロー構成で使用されるカスタム サービス アカウントのデフォルトの Dataform サービス エージェントiam.serviceAccounts.actAs 権限を付与する必要があります。この権限は、サービス アカウント ユーザーロールroles/iam.serviceAccountUser)で使用できます。詳細については、厳格な act-as モードを使用するをご覧ください。

スケジュールのセキュリティを強化するには、拡張されたスケジュール設定の権限を実装するをご覧ください。

ワークフロー構成で実行をスケジュールする

このセクションでは、Dataform でワークフロー構成を作成して、ワークフローの実行をスケジュールし、構成する方法について説明します。ワークフロー構成を使用して Dataform ワークフローをスケジュールで実行できます。

ワークフロー構成について

BigQuery でワークフロー アクションのすべてまたは選択した Dataform の実行をスケジュールするには、ワークフロー構成を作成します。ワークフロー構成では、コンパイル リリース構成を選択し、実行するワークフロー アクションを選択して、実行スケジュールを設定します。

その後、Dataform は、ワークフロー構成のスケジュールされた実行時に、リリース構成の最新のコンパイル結果から選択したアクションを BigQuery にデプロイします。Dataform API workflowConfigs を使用して、ワークフロー構成の実行を手動でトリガーすることもできます。

Dataform ワークフロー構成には、次の実行設定が含まれています。

  • ワークフロー構成の ID。
  • リリース構成。
  • サービス アカウント。

    これは、ワークフロー構成に関連付けられているカスタム サービス アカウントです。 Google Cloud プロジェクトに関連付けられているカスタム サービス アカウントを選択することも、別のサービス アカウントを手動で入力することもできます。デフォルトでは、ワークフロー構成は リポジトリと同じサービス アカウントを使用します。

    サービス アカウントの認証情報は、スケジュールされたワークフロー構成の作成と実行のデフォルトの認可方法です。

  • Google アカウントのユーザー認証情報(プレビュー

    Google アカウントのユーザー認証情報は、手動のスケジュールされていないワークフロー構成の作成と実行のデフォルトの承認方法です。詳しくは、Google アカウントを認可するをご覧ください。

  • 実行するワークフロー アクション:

    • すべてのアクション。
    • アクションの選択。
    • タグの選択。
  • 実行スケジュールとタイムゾーン。

ワークフロー構成を作成する

Dataform ワークフロー構成を作成する手順は次のとおりです。

  1. リポジトリで、[リリースとスケジュール] に移動します。
  2. [ワークフロー構成] セクションで、[作成] をクリックします。
  3. [ワークフロー構成を作成] ペインの [構成 ID] フィールドに、ワークフロー構成の一意の ID を入力します。

    ID には数字、英字、ハイフン、アンダースコアのみを使用できます。

  4. [リリース構成] メニューで、コンパイル リリース構成を選択します。

  5. [認証] セクションで、Google アカウントのユーザー認証情報またはサービス アカウントを使用してワークフロー構成を認可します。

    • Google アカウントのユーザー認証情報(プレビュー)を使用するには、[自分のユーザー認証情報で実行] を選択します。
    • カスタム サービス アカウントを使用するには、[選択したサービス アカウントで実行] を選択し、アクセス権のある Google Cloud プロジェクトに関連付けられているサービス アカウントを選択します。サービス アカウントを選択しない場合、ワークフロー構成ではリポジトリのサービス アカウントが使用されます。
  6. 省略可: [スケジュール頻度] フィールドに、unix-cron 形式で実行の頻度を入力します。

    Dataform が対応するリリース構成で最新のコンパイル結果を確実に実行するには、コンパイル結果の作成時刻とスケジュールされた実行時刻の間に少なくとも 1 時間の間隔を設けます。

  7. 省略可: [タイムゾーン] メニューで、実行のタイムゾーンを選択します。

    デフォルトのタイムゾーンは UTC です。

  8. 実行するワークフロー アクションを選択します。

    • ワークフロー全体を実行するには、[すべてのアクション] をクリックします。
    • ワークフローで選択したアクションを実行するには、[アクションの選択] をクリックして、アクションを選択します。
    • 選択したタグを持つアクションを実行するには、[タグの選択] をクリックしてタグを選択します。
    • 省略可: 選択したアクションまたはタグとそれらの依存関係を実行するには、[依存関係を含める] オプションを選択します。
    • 省略可: 選択したアクションまたはタグとそれらの依存関係を実行するには、[依存者を含める] オプションを選択します。
    • 省略可: すべてのテーブルをゼロから再構築するには、[フル更新で実行] オプションを選択します。

      このオプションを使用しない場合、Dataform は、増分テーブルをゼロから再構築せずに更新します。

    • 省略可: 優先度の高いインタラクティブ ジョブとして実行する(デフォルト)オプションを使用して、BigQuery クエリジョブの優先度を設定します。デフォルトでは、BigQuery はクエリをインタラクティブ クエリジョブとして実行します。このジョブは、できるだけ早く実行を開始することを目的としています。このオプションをオフにすると、クエリは優先度の低いバッチ クエリジョブとして実行されます。

  9. [作成] をクリックします。認証方法に [自分のユーザー認証情報で実行] を選択した場合は、Google アカウントを認可する必要があります(プレビュー)。

たとえば、次のワークフロー構成では、CEST タイムゾーンで 1 時間ごとに hourly タグを使用してアクションを実行します。

  • 構成 IDproduction-hourly
  • リリース構成
  • 頻度0 * * * *
  • タイムゾーンCentral European Summer Time (CEST)
  • ワークフロー アクションの選択: タグの選択、hourly タグ

Google アカウントを認可する

Google アカウントのユーザー認証情報でリソースを認証するには、BigQuery パイプラインが Google アカウントのアクセス トークンを取得し、ユーザーに代わってソースデータにアクセスするための権限を手動で付与する必要があります。OAuth ダイアログ インターフェースで、手動で承認できます。

BigQuery パイプラインに権限を付与する必要があるのは 1 回のみです。

付与した権限を取り消すには、次の手順に沿って操作します。

  1. Google アカウント ページにアクセスします。
  2. [BigQuery パイプライン] をクリックします。
  3. [アクセス権を削除] をクリックします。

新しい Google アカウントの所有者が以前にワークフロー構成を作成したことがない場合は、認証情報を更新してワークフロー構成のオーナーを変更するには手動で承認する必要もあります。

ワークフロー構成を編集する

ワークフロー構成を編集するには、次の手順を行います。

  1. リポジトリで、[リリースとスケジュール] に移動します。
  2. 編集するワークフロー構成で、 [その他] メニューをクリックし、[編集] をクリックします。
  3. [ワークフロー構成を編集] ペインで、ワークフロー構成の設定を編集し、[保存] をクリックします。

ワークフロー構成を削除する

ワークフロー構成を作成するには、次の手順を行います。

  1. リポジトリで、[リリースとスケジュール] に移動します。
  2. 削除するワークフロー構成で、 [その他] メニューをクリックし、[削除] をクリックします。
  3. [リリース構成の削除] ダイアログで、[削除] をクリックします。

Workflows と Cloud Scheduler で実行をスケジュールする

このセクションでは、Workflows と Cloud Scheduler を使用して Dataform ワークフローの実行をスケジュールする方法について説明します。

スケジュール設定されたワークフローの実行について

Dataform ワークフローの実行頻度を設定するには、Workflows ワークフローをトリガーする Cloud Scheduler ジョブを作成します。Workflows は、定義したオーケストレーション ワークフローでサービスを実行します。

Workflows は、Dataform ワークフローを 2 段階のプロセスで実行します。まず、Git プロバイダから Dataform リポジトリ コードを pull してコンパイルし、コンパイル結果を導きます。次に、コンパイル結果を使用して Dataform ワークフローを作成し、設定した頻度で実行します。

スケジュール設定されたオーケストレーション ワークフローを作成する

Dataform ワークフローの実行をスケジュールするには、Workflows を使用してオーケストレーション ワークフローを作成し、Cloud Scheduler ジョブをトリガーとして追加します。

  1. Workflows はサービス アカウントを使用して、ワークフローがGoogle Cloud リソースにアクセスできるようにします。サービス アカウントを作成し、次の権限を付与します。

  2. オーケストレーション ワークフローを作成し、次の YAML ソースコードをワークフロー定義として使用します。

    main:
        steps:
        - init:
            assign:
            - repository: projects/PROJECT_ID/locations/REPOSITORY_LOCATION/repositories/REPOSITORY_ID
        - createCompilationResult:
            call: http.post
            args:
                url: ${"https://dataform.googleapis.com/v1beta1/" + repository + "/compilationResults"}
                auth:
                    type: OAuth2
                body:
                    gitCommitish: GIT_COMMITISH
            result: compilationResult
        - createWorkflowInvocation:
            call: http.post
            args:
                url: ${"https://dataform.googleapis.com/v1beta1/" + repository + "/workflowInvocations"}
                auth:
                    type: OAuth2
                body:
                    compilationResult: ${compilationResult.body.name}
            result: workflowInvocation
        - complete:
            return: ${workflowInvocation.body.name}
    

    次のように置き換えます。

    • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
    • REPOSITORY_LOCATION: Dataform リポジトリのロケーション。
    • REPOSITORY_ID: Dataform リポジトリの名前。
    • GIT_COMMITISH: Dataform コードの実行元となる Git ブランチ。新しく作成したリポジトリの場合は、main に置き換えます。
  3. Cloud Scheduler を使用してオーケストレーション ワークフローをスケジュールします

Dataform ワークフローのコンパイル結果作成リクエストをカスタマイズする

既存のオーケストレーション ワークフローを更新し、Dataform ワークフローの作成コンパイル結果リクエスト設定を YAML 形式で定義できます。設定の詳細については、projects.locations.repositories.compilationResults REST リソース リファレンスをご覧ください。

たとえば、コンパイル時にすべての操作に _dev schemaSuffix 設定を追加するには、createCompilationResult ステップの本文を次のコード スニペットに置き換えます。

    - createCompilationResult:
        call: http.post
        args:
            url: ${"https://dataform.googleapis.com/v1beta1/" + repository + "/compilationResults"}
            auth:
                type: OAuth2
            body:
                gitCommitish: GIT_COMMITISH
                codeCompilationConfig:
                    schemaSuffix: dev

Workflows 実行リクエストで追加設定をランタイム引数として渡し、変数を使用してこれらの引数にアクセスすることもできます。詳細については、実行リクエストでランタイム引数を渡すをご覧ください。

Dataform ワークフロー呼び出しリクエストをカスタマイズする

既存のオーケストレーション ワークフローを更新し、Dataform ワークフローの呼び出しリクエスト設定を YAML 形式で定義できます。呼び出しリクエストの設定の詳細については、projects.locations.repositories.workflowInvocations REST リソース リファレンスをご覧ください。

たとえば、hourly タグが付いたアクションのみをすべての推移的依存関係を含めて実行するには、createWorkflowInvocation の本文を次のコード スニペットに置き換えます。

    - createWorkflowInvocation:
        call: http.post
        args:
            url: ${"https://dataform.googleapis.com/v1beta1/" + repository + "/workflowInvocations"}
            auth:
                type: OAuth2
            body:
                compilationResult: ${compilationResult.body.name}
                invocationConfig:
                    includedTags:
                    - hourly
                    transitiveDependenciesIncluded: true
                

Workflows 実行リクエストで追加設定をランタイム引数として渡し、変数を使用してこれらの引数にアクセスすることもできます。詳細については、実行リクエストでランタイム引数を渡すをご覧ください。

Cloud Composer で実行をスケジュールする

Cloud Composer 2 を使用して、Dataform の実行をスケジュールできます。Dataform は Cloud Composer 1 をサポートしていません。

Cloud Composer 2 で Dataform の実行スケジュールを管理するには、Airflow 有向非巡回グラフ(DAG)で Dataform 演算子を使用します。Dataform ワークフローの呼び出しをスケジュールする Airflow DAG を作成できます。

Dataform は、さまざまな Airflow 演算子を提供します。これには、コンパイル結果の取得、ワークフロー呼び出しの取得、ワークフロー呼び出しのキャンセルを行う演算子が含まれます。使用可能な Dataform Airflow オペレーターの完全なリストについては、Google Dataform 演算子をご覧ください。

google-cloud-dataform PyPi パッケージをインストールする

Cloud Composer 2 バージョン 2.0.25 以降を使用している場合、このパッケージは環境にプリインストールされており、インストールする必要はありません。

以前のバージョンの Cloud Composer 2 を使用している場合は、google-cloud-dataform PyPi パッケージをインストールします。

[PyPI パッケージ] セクションで、バージョン ==0.2.0 を指定します。

Dataform ワークフローの呼び出しをスケジュールする Airflow DAG を作成する

Cloud Composer 2 で Dataform ワークフローのスケジュール設定された実行を管理するには、Dataform Airflow 演算子を使用して DAG を作成し、環境のバケットにアップロードします。

次のコードサンプルは、Dataform コンパイル結果を作成して Dataform ワークフローの呼び出しを開始する Airflow DAG を示しています。

from datetime import datetime

from airflow import models
from airflow.models.baseoperator import chain
from airflow.providers.google.cloud.operators.dataform import (
    DataformCreateCompilationResultOperator,
    DataformCreateWorkflowInvocationOperator,
)

DAG_ID = "dataform"
PROJECT_ID = "PROJECT_ID"
REPOSITORY_ID = "REPOSITORY_ID"
REGION = "REGION"
GIT_COMMITISH = "GIT_COMMITISH"

with models.DAG(
    DAG_ID,
    schedule_interval='@once',  # Override to match your needs
    start_date=datetime(2022, 1, 1),
    catchup=False,  # Override to match your needs
    tags=['dataform'],
) as dag:

    create_compilation_result = DataformCreateCompilationResultOperator(
        task_id="create_compilation_result",
        project_id=PROJECT_ID,
        region=REGION,
        repository_id=REPOSITORY_ID,
        compilation_result={
            "git_commitish": GIT_COMMITISH,
        },
    )
    create_workflow_invocation = DataformCreateWorkflowInvocationOperator(
        task_id='create_workflow_invocation',
        project_id=PROJECT_ID,
        region=REGION,
        repository_id=REPOSITORY_ID,
         workflow_invocation={
            "compilation_result": "{{ task_instance.xcom_pull('create_compilation_result')['name'] }}"
        },
    )


create_compilation_result >> create_workflow_invocation

次のように置き換えます。

  • PROJECT_ID: Dataform Google Cloud プロジェクト ID。
  • REPOSITORY_ID: Dataform リポジトリの名前。
  • REGION: Dataform リポジトリが配置されているリージョン。
  • COMPILATION_RESULT: このワークフローの呼び出しに使用するコンパイル結果の名前。
  • GIT_COMMITISH: 使用するコードのバージョンのリモート Git リポジトリ内の Git Commitish(ブランチ、Git SHA など)。

次のコードサンプルは、次の処理を行う Airflow DAG を示しています。

  1. Dataform コンパイル結果を作成します。
  2. 非同期の Dataform ワークフロー呼び出しを開始します。
  3. DataformWorkflowInvocationStateSensor を使用して、ワークフローのステータスが想定される状態になるまでポーリングします。
from datetime import datetime

from google.cloud.dataform_v1beta1 import WorkflowInvocation

from airflow import models
from airflow.models.baseoperator import chain
from airflow.providers.google.cloud.operators.dataform import (
    DataformCreateCompilationResultOperator,
    DataformCreateWorkflowInvocationOperator,
)
from airflow.providers.google.cloud.sensors.dataform import DataformWorkflowInvocationStateSensor

DAG_ID = "dataform"
PROJECT_ID = "PROJECT_ID"
REPOSITORY_ID = "REPOSITORY_ID"
REGION = "REGION"
GIT_COMMITISH = "GIT_COMMITISH"

with models.DAG(
    DAG_ID,
    schedule_interval='@once',  # Override to match your needs
    start_date=datetime(2022, 1, 1),
    catchup=False,  # Override to match your needs
    tags=['dataform'],
) as dag:

    create_compilation_result = DataformCreateCompilationResultOperator(
        task_id="create_compilation_result",
        project_id=PROJECT_ID,
        region=REGION,
        repository_id=REPOSITORY_ID,
        compilation_result={
            "git_commitish": GIT_COMMITISH,
        },
    )

create_workflow_invocation = DataformCreateWorkflowInvocationOperator(
    task_id='create_workflow_invocation',
    project_id=PROJECT_ID,
    region=REGION,
    repository_id=REPOSITORY_ID,
    asynchronous=True,
    workflow_invocation={
        "compilation_result": COMPILATION_RESULT
    }
)

is_workflow_invocation_done = DataformWorkflowInvocationStateSensor(
    task_id="is_workflow_invocation_done",
    project_id=PROJECT_ID,
    region=REGION,
    repository_id=REPOSITORY_ID,
    workflow_invocation_id=("{{ task_instance.xcom_pull('create_workflow_invocation')['name'].split('/')[-1] }}"),
    expected_statuses={WorkflowInvocation.State.SUCCEEDED},
)


create_compilation_result >> create_workflow_invocation

次のように置き換えます。

  • PROJECT_ID: Dataform の Google Cloud プロジェクト ID。
  • REPOSITORY_ID: Dataform リポジトリの名前。
  • REGION: Dataform リポジトリが配置されているリージョン。
  • COMPILATION_RESULT: このワークフローの呼び出しに使用するコンパイル結果の名前。
  • GIT_COMMITISH: 使用するコードのバージョンのリモート Git リポジトリ内の Git Commitish(ブランチ、Git SHA など)。
  • COMPILATION_RESULT: このワークフローの呼び出しに使用するコンパイル結果の名前。

コンパイル構成パラメータを追加する

create_compilation_result Airflow DAG オブジェクトに、追加のコンパイル構成パラメータを追加できます。使用可能なパラメータの詳細については、CodeCompilationConfig Dataform API リファレンスをご覧ください。

  • コンパイル構成パラメータを create_compilation_result Airflow DAG オブジェクトに追加するには、次の形式で選択したパラメータを code_compilation_config フィールドに追加します。

        create_compilation_result = DataformCreateCompilationResultOperator(
            task_id="create_compilation_result",
            project_id=PROJECT_ID,
            region=REGION,
            repository_id=REPOSITORY_ID,
            compilation_result={
                "git_commitish": GIT_COMMITISH,
                "code_compilation_config": { "PARAMETER": "PARAMETER_VALUE"}
            },
        )
    

    次のように置き換えます。

    • PROJECT_ID: Dataform Google Cloud プロジェクト ID。
    • REPOSITORY_ID: Dataform リポジトリの名前。
    • REGION: Dataform リポジトリが配置されているリージョン。
    • GIT_COMMITISH: 使用するコードのバージョンのリモート Git リポジトリ内の Git Commitish(ブランチ、Git SHA など)。
    • PARAMETER: 選択された CodeCompilationConfig パラメータ。複数のパラメータを追加できます。
    • PARAMETER_VALUE: 選択したパラメータの値。

次のコードサンプルは、create_compilation_result Airflow DAG オブジェクトに追加された defaultDatabase パラメータを示しています。

    create_compilation_result = DataformCreateCompilationResultOperator(
        task_id="create_compilation_result",
        project_id=PROJECT_ID,
        region=REGION,
        repository_id=REPOSITORY_ID,
        compilation_result={
            "git_commitish": REMOTE_BRANCH,
            "code_compilation_config": { "default_database": "my-custom-gcp-project"}
        },
    )

ワークフロー呼び出し構成パラメータを追加する

create_workflow_invocation Airflow DAG オブジェクトに、ワークフロー呼び出しの追加の構成パラメータを追加できます。使用可能なパラメータの詳細については、InvocationConfig Dataform API リファレンスをご覧ください。

  • ワークフロー呼び出し構成パラメータを create_workflow_invocation Airflow DAG オブジェクトに追加するには、選択したパラメータを次の形式で invocation_config フィールドに追加します。

        create_workflow_invocation = DataformCreateWorkflowInvocationOperator(
            task_id='create_workflow_invocation',
            project_id=PROJECT_ID,
            region=REGION,
            repository_id=REPOSITORY_ID,
            workflow_invocation={
                "compilation_result": "{{ task_instance.xcom_pull('create_compilation_result')['name'] }}",
                "invocation_config": { "PARAMETER": PARAMETER_VALUE }
            },
        )
    
    

    次のように置き換えます。

    • PROJECT_ID: Dataform Google Cloud プロジェクト ID。
    • REPOSITORY_ID: Dataform リポジトリの名前。
    • REGION: Dataform リポジトリが配置されているリージョン。
    • PARAMETER: 選択された InvocationConfig パラメータ。複数のパラメータを追加できます。
    • PARAMETER_VALUE: 選択したパラメータの値。

次のコードサンプルは、create_workflow_invocation Airflow DAG オブジェクトに追加された includedTags[] パラメータと transitiveDependenciesIncluded パラメータを示しています。

    create_workflow_invocation = DataformCreateWorkflowInvocationOperator(
        task_id='create_workflow_invocation',
        project_id=PROJECT_ID,
        region=REGION,
        repository_id=REPOSITORY_ID,
        workflow_invocation={
            "compilation_result": "{{ task_instance.xcom_pull('create_compilation_result')['name'] }}",
            "invocation_config": { "included_tags": ["daily"], "transitive_dependencies_included": true }
        },
    )

Cloud Build トリガーを使用して実行を自動化する

リリース構成の時間ベースのスケジュールを超えて移動する場合は、Cloud Build トリガーを使用してイベント ドリブン パイプラインを作成できます。このアプローチでは、新しい commit が Git ブランチに push されるたびにコードが自動的にコンパイルされ、Dataform ワークフローの呼び出しが直ちにトリガーされてデータが更新されます。

リソースを準備する

  1. Google Cloud プロジェクトで、Dataform API と Cloud Build API を有効にします。

    Dataform API を有効にする

    Cloud Build API を有効にする

  2. 以下があることを確認してください。

必要な IAM 権限を付与する

Dataform リポジトリのカスタム サービス アカウントに Dataform 管理者ロールroles/dataform.admin)を付与します。このロールは、コンパイル結果の作成、リリース構成の更新、新しいワークフロー呼び出しの開始を行う権限など、リポジトリへのフルアクセスを提供します。個々のリポジトリに IAM ロールを付与する方法の詳細については、個々のリポジトリへのアクセスを制御するをご覧ください。

ワークフロー構成のカスタム サービス アカウントに対するサービス アカウント ユーザーのロールroles/iam.serviceAccountUser)を、Cloud Build トリガーのサービス アカウントに付与します。この要件の詳細については、厳格な act-as モードを使用するをご覧ください。

Cloud Build がカスタム サービス アカウントを使用するには、Cloud Build サービス エージェントにそのアカウントとして動作する権限を付与する必要があります。Cloud Build サービス エージェントに権限借用の権限を付与するには、次の操作を行います。

  1. Google Cloud コンソールで、[サービス アカウント] ページに移動します。

    [サービス アカウント] に移動

  2. カスタム サービス アカウントを選択します。

  3. [アクセス権を持つプリンシパル] タブに移動します。

  4. [アクセス権を付与] をクリックします。

  5. [新しいプリンシパル] フィールドに、Cloud Build サービス エージェントのメールアドレスを入力します。次の形式で指定します。

    service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com
    

    PROJECT_NUMBER は、Google Cloud プロジェクトの数値 ID に置き換えます。 Google Cloud プロジェクト ID は、Google Cloud コンソール ダッシュボードで確認できます。詳細については、プロジェクト名、番号、ID を確認するをご覧ください。

  6. [ロールを選択] メニューで、[サービス アカウント ユーザー] を選択します。

  7. [保存] をクリックします。

cloudbuild.yaml 構成ファイルを作成する

Git リポジトリのルートに cloudbuild.yaml ファイルを作成します。このファイルを使用して、コンパイル結果の作成、このコンパイル結果をライブとして設定するためのリリース構成の更新、新しいワークフロー呼び出しの開始を行うマルチステップ スクリプトを定義します。

steps:
  - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk:latest'
    entrypoint: 'bash'
    args:
      - '-c'
      - |
        set -e -o pipefail # Exit script on any error

        # 1. Get the access token
        TOKEN=$(gcloud auth print-access-token)

        # 2. Define API endpoints and resource names
        RELEASE_CONFIG_RESOURCE="projects/${_PROJECT_ID}/locations/${_DATAFORM_LOCATION}/repositories/${_DATAFORM_REPO_ID}/releaseConfigs/${_RELEASE_CONFIG_ID}"
        COMPILATION_RESULTS_API="https://dataform.googleapis.com/v1/projects/${_PROJECT_ID}/locations/${_DATAFORM_LOCATION}/repositories/${_DATAFORM_REPO_ID}/compilationResults"

        # 3. Create the new compilation result
        echo "Creating new compilation result from $$RELEASE_CONFIG_RESOURCE..."
        CREATE_PAYLOAD="{\"releaseConfig\": \"$$RELEASE_CONFIG_RESOURCE\"}"
        curl --fail-with-body -X POST \
          -H "Authorization: Bearer $$TOKEN" \
          -H "Content-Type: application/json" \
          -d "$$CREATE_PAYLOAD" \
          "$$COMPILATION_RESULTS_API" | tee /workspace/compilation_response.json

  - name: 'alpine'
    entrypoint: 'bash'
    args:
      - '-c'
      - |
        set -e # Exit script on any error

        # 4. Parse compilation result name
        apk add --no-cache jq
        COMPILATION_NAME=$(jq -r '.name' < /workspace/compilation_response.json)

        echo "Successfully created compilation result: $$COMPILATION_NAME"
        echo $$COMPILATION_NAME > /workspace/compilation_result_name.txt

  - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk:latest'
    entrypoint: 'bash'
    args:
      - '-c'
      - |
        set -e # Exit script on any error
        # 5. Update the releaseConfig to set the new compilation result as 'live'
        COMPILATION_NAME=$(cat /workspace/compilation_result_name.txt)
        echo "Updating release config to set $$COMPILATION_NAME as live..."
        PATCH_PAYLOAD="{\"releaseCompilationResult\": \"$$COMPILATION_NAME\", \"gitCommitish\": \"$BRANCH_NAME\"}"

        RELEASE_CONFIG_RESOURCE="projects/${_PROJECT_ID}/locations/${_DATAFORM_LOCATION}/repositories/${_DATAFORM_REPO_ID}/releaseConfigs/${_RELEASE_CONFIG_ID}"
        RELEASE_CONFIG_PATCH_API="https://dataform.googleapis.com/v1/$${RELEASE_CONFIG_RESOURCE}"
        curl --fail-with-body -X PATCH \
          -H "Authorization: Bearer $(gcloud auth print-access-token)" \
          -H "Content-Type: application/json" \
          -d "$$PATCH_PAYLOAD" \
          "$$RELEASE_CONFIG_PATCH_API?updateMask=releaseCompilationResult"

        echo "Successfully updated release config."

  - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk:latest'
    entrypoint: 'bash'
    args:
      - '-c'
      - |
        set -e # Exit script on any error
        # 6. Launch a workflow config after recompiling the release config
        WORKFLOW_CONFIG_RESOURCE="projects/${_PROJECT_ID}/locations/${_DATAFORM_LOCATION}/repositories/${_DATAFORM_REPO_ID}/workflowConfigs/${_WORKFLOW_CONFIG_ID}"
        CREATE_WORKFLOW_PAYLOAD="{\"workflowConfig\": \"$$WORKFLOW_CONFIG_RESOURCE\"}"

        WORKFLOW_INVOCATIONS_API="https://dataform.googleapis.com/v1/projects/${_PROJECT_ID}/locations/${_DATAFORM_LOCATION}/repositories/${_DATAFORM_REPO_ID}/workflowInvocations"
        curl --fail-with-body -X POST \
          -H "Authorization: Bearer $(gcloud auth print-access-token)" \
          -H "Content-Type: application/json" \
          -d "$$CREATE_WORKFLOW_PAYLOAD" \
          "$$WORKFLOW_INVOCATIONS_API"

        echo "Successfully created a new workflow invocation."

# Define substitution variables that can be set in the trigger
substitutions:
  _DATAFORM_LOCATION: 'us-central1'  # Default, change if needed
  _DATAFORM_REPO_ID: ''              # Required: Set this in the trigger
  _RELEASE_CONFIG_ID: ''             # Required: Set this in the trigger
  _WORKFLOW_CONFIG_ID: ''            # Required: Set this in the trigger
  _PROJECT_ID: ${PROJECT_ID}         # Automatically uses the build's Project ID

options:
  logging: CLOUD_LOGGING_ONLY

Cloud Build トリガーを作成する

コードがリポジトリに push されたときにビルド構成を実行するトリガーを作成する手順は次のとおりです。

  1. Google Cloud コンソールで、Cloud Build の [トリガー] ページを開きます。

    [トリガー] に移動

  2. Git リポジトリを接続していない場合は、[リポジトリを接続] をクリックして、手順に沿って操作します。

  3. [トリガーを作成] をクリックします。

  4. トリガーの名前を入力します。

  5. トリガーのリージョンを選択します。

  6. トリガーのイベントを選択します。

  7. [ソース] セクションで、リポジトリを接続済みの Git リポジトリに設定します。

  8. ブランチをリポジトリのメインブランチに設定します。

  9. [構成] セクションで、Cloud Build 構成ファイル(YAML ファイルまたは JSON ファイル)を選択します。

  10. ファイルの場所を /cloudbuild.yaml またはファイルへのパスに設定します。

  11. [代入変数] セクションで、次の変数と値を追加します。

    • _DATAFORM_REPO_ID: Dataform リポジトリ ID
    • _RELEASE_CONFIG_ID: Dataform リリース構成 ID
    • _WORKFLOW_CONFIG_ID: Dataform ワークフロー構成 ID
    • 省略可: _DATAFORM_LOCATION: Dataform リポジトリのリージョン(例: us-central1
  12. [サービス アカウント] セクションで、カスタム サービス アカウントを選択します。

  13. [作成] をクリックします。

詳細については、ビルドトリガーを作成するをご覧ください。

トリガーをテストする

  1. cloudbuild.yaml ファイルを commit して、トリガーがモニタリングしているブランチに push します。
  2. Cloud Build ビルドを表示するには、 Google Cloud コンソールで [ビルド履歴] ページを開きます。

    [ビルド履歴] に移動

  3. ビルドが成功したら、[Dataform] ページに移動します。

    Dataform に移動

  4. リポジトリを選択します。

  5. [リリースとスケジュール] をクリックして、リリース構成を選択します。

  6. [手動 / API のコンパイル結果] リストで、新しいエントリを探します。最新の正常なコンパイルは、リリース構成のライブ コンパイル結果としてマークされます。

  7. [ワークフローの実行ログ] をクリックします。

  8. 選択したワークフロー構成を使用して、新しいワークフロー呼び出しが起動されます。

次のステップ