EventarcでBigQueryのテーブル挿入をトリガーにworkflowsを動作させる
今回は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