🐶

EventarcでBigQueryのテーブル挿入をトリガーにworkflowsを動作させる

2023/11/24に公開

今回はEventarcでBigQueryのテーブルにデータが挿入されたときにworkflowsをキックするということをやってみたいと思います。
従来はEvetarcでGCSのデータ更新をトリガーにCloud Functionsを実行する。のような構成はとれていたのですが、BigQueryのデータ挿入をトリガーに実行できるようになっていますので、少し試してみたいと思います。

Workflowsの設定

以下のようにWorkflowsを設定していきます。
ここで躓きやすいのはService Accountの指定です。ここでのSAはWorkflows実行用のSAを用意しておくといいでしょう。
ここでのSAにはworkflowsで実際に呼び出すAPIへのアクセス権を付与しておく必要があります。例えば、BigQueryをworkflowsで実行する場合はBigQueryへのアクセス権を付与しておく必要があります。

Nextを押すと、実際にYamlファイルを作っていきます。最初はwikipediaの情報を取得するサンプルコードが記載されていますが、以下のように書き換えていきます。

サンプルyamlファイル :

main:
  params: [args]
  steps:
    - init:
        assign:
          - project: "MYPROJECT"
          - dataset: "DATASET"
          - table: "TABLE"
          - insertBody:
              rows:
                - json: 
                    id: 123
                    name: "Sample Name"
                    date: "2023-01-01"

    - insertRow:
        call: googleapis.bigquery.v2.tabledata.insertAll
        args:
            projectId: ${project}
            datasetId: ${dataset}
            tableId: ${table}
            body: ${insertBody}
        result: insertResult

    - returnResult:
        return: ${insertResult}

Deployを押して、一旦workflowsの設定は完了です。

Eventarcの設定

続いて、Evetarc側の設定をしていきます。

Evetarcのコンソールから、Create Triggerを押下して、以下のような設定項目を入力していきます。
今回はBigQueryのテーブルアップデートをトリガーにしたいので、GoogleリソースにBigQueryを指定していきます。

また、特定のデータセットの中のテーブルの更新のみに絞りたいので、Path Patternをチェックして、以下のように指定します。

MYPROJECTとDATASETNAMEの箇所にはご自身の環境の情報を入れてください。

/bigquery.googleapis.com/projects/MYROJECTS/datasets/DATASETNAME

実際にBigQueryにデータ更新してみてトリガーされるか試してみる

これで試しに、BigQueryにデータを挿入するINSERT SQLを実行するとどうなるのかみてみましょう。

実際にWorkflowsが実行されているのが、WorkflowsのEXECUTIONSの画面から確認することができました。

残る問題点

BigQueryのテーブルをトリガーにすることができるのですが、監査ログには一回のジョブで複数のログが出力されてしまうので、それを回避するための方法は別途考えたいと思います。

Discussion