BigQuery DTS のイベント ドリブン取込をコンソールから設定する(きれいな削除の方法も)
エヌデーデー関口です。
今回は以前ご紹介した BigQuery Data Transfer Service(DTS) のイベント ドリブン転送が Google Cloud コンソールから設定できるようになっていました。(気づくの遅い)
今回はコンソールでの作り方、以前の方法と結果が異なる部分、それから BigQuery DTS を削除した時に自動では消えないリソースについて説明します。
BigQuery Data Transfer Service のイベント ドリブン転送については次の記事をご覧ください。
コンソールから BigQuery DTS のイベントドリブンを設定する
上記の記事では gcloud コマンドで Cloud Storage の通知設定を事前に作成していました。Google Cloud 公式ドキュメントにも同じ方法が掲載されています。しかし、公式ドキュメントには掲載されていませんが、Google Cloud コンソールから、事前に gcloud コマンドを実行しなくても設定できました。
やり方は次の通りで、Cloud Strage のバケット、BigQuery のデータセットとテーブルは既に作成済みの状態で、次の操作を行います。
- Google Cloud コンソールで BigQuery の [データ転送] ページに移動します
- [転送を作成] をクリックします
- [ソース] から [Google Cloud Storage] を選択します
- [表示名] を入力します
- [スケジュール オプション] から [イベント ドリブン] を選択します
- [Pub/Sub サブスクリプション] で [サブスクリプション の作成] をクリックします
- 表示されたダイアログの内容「サブスクリプション ID」「トピック ID」の内容は自動的に入力差rていますが任意に決めても問題ありません
- この操作によって自動的に Cloud Storage の通知先となるトピックとサブスクリプションのペアを作る事になります
- [データセット] には転送先の BigQuery のデータセット名、[Destination table] にはテーブル名を入力します
- [Cloud Storage URI] には転送元となる Cloud Storage の URI を取り込むオブジェクトの名称パターンと共に入力します(例:gs://abc-1234567890/*.csv)
- その他の設定を適宜入力して [保存] します
これだけで Cloud Storage の通知設定を事前に作らずに BigQuery DTS のイベント ドリブン転送が設定できました。簡単ですね。
Cloud Storage の通知設定を確認してみた
最初に書いた記事では予め Cloud Storage の通知設定を作る手順が含まれていました。今回のようにコンソールから作成した場合はどうなっているでしょうか?確認してみます。
# 通知設定を確認するコマンド
gcloud storage buckets notifications list gs://ndd-dts-xxxxxxxxx/
---
Bucket URL: gs://ndd-dts-xxxxxxxxx/
Notification Configuration:
etag: dts_16d47b5c-a942-4e54-a2ca-dada6dc7148e
event_types:
- OBJECT_FINALIZE
id: dts_16d47b5c-a942-4e54-a2ca-dada6dc7148e
kind: storage#notification
payload_format: JSON_API_V1
selfLink: https://www.googleapis.com/storage/v1/b/ndd-dts-xxxxxxxxx/notificationConfigs/dts_16d47b5c-a942-4e54-a2ca-dada6dc7148e
topic: //pubsub.googleapis.com/projects/xxxxxxxxxxxxxxx/topics/dts_16d47b5c-a942-4e54-a2ca-dada6dc7148e
このように自動的に Cloud Storage の通知が登録されていました。
予めコマンドを入力して作成した場合と異なるのは、id: dts_16d47b5c-a942-4e54-a2ca-dada6dc7148e
という具合に、作成した Pub/Sub トピックの名称が id
属性に設定されていることです。コマンドで作成した場合は 1 からの番号が登録されています。
ちなみに、この通知設定の内容を見ると、コンソール画面から BigQuery DTS を設定した場合 object_prefix
が設定できないというわかります。接頭文字を指定して特定のフォルダ以下のオブジェクトに関して BigQuery DTS を設定したい場合はコマンドからやるしかなさそうです。
BigQuery DTS を削除すると通知設定はどうなるのか
BigQuery DTS の設定は一度作成すると変更できない設定があるので、作成、削除を検証中に繰り返した後で、もう一度通知設定を確認してみます。
---
Bucket URL: gs://ndd-dts-xxxxxxxxx/
Notification Configuration:
etag: dts_16d47b5c-a942-4e54-a2ca-dada6dc7148e
event_types:
- OBJECT_FINALIZE
id: dts_16d47b5c-a942-4e54-a2ca-dada6dc7148e
kind: storage#notification
payload_format: JSON_API_V1
selfLink: https://www.googleapis.com/storage/v1/b/ndd-dts-xxxxxxxxx/notificationConfigs/dts_16d47b5c-a942-4e54-a2ca-dada6dc7148e
topic: //pubsub.googleapis.com/projects/xxxxxxxxxxxxxxx/topics/dts_16d47b5c-a942-4e54-a2ca-dada6dc7148e
---
Bucket URL: gs://ndd-dts-xxxxxxxxx/
Notification Configuration:
etag: dts_80243ee5-c6b4-48b9-b084-4b1183f768c5
event_types:
- OBJECT_FINALIZE
id: dts_80243ee5-c6b4-48b9-b084-4b1183f768c5
kind: storage#notification
payload_format: JSON_API_V1
selfLink: https://www.googleapis.com/storage/v1/b/ndd-dts-xxxxxxxxx/notificationConfigs/dts_80243ee5-c6b4-48b9-b084-4b1183f768c5
topic: //pubsub.googleapis.com/projects/xxxxxxxxxxxxxxx/topics/dts_80243ee5-c6b4-48b9-b084-4b1183f768c5
---
Bucket URL: gs://ndd-dts-xxxxxxxxx/
Notification Configuration:
etag: dts_488825b9-7cc7-4f9c-a144-327968108e72
event_types:
- OBJECT_FINALIZE
id: dts_488825b9-7cc7-4f9c-a144-327968108e72
kind: storage#notification
payload_format: JSON_API_V1
selfLink: https://www.googleapis.com/storage/v1/b/ndd-dts-xxxxxxxxx/notificationConfigs/dts_488825b9-7cc7-4f9c-a144-327968108e72
topic: //pubsub.googleapis.com/projects/xxxxxxxxxxxxxxx/topics/dts_488825b9-7cc7-4f9c-a144-327968108e72
このように、当然と言えば当然ですが、BigQuery DTS を削除しても、Cloud Storage の通知設定は、Cloud Storage と Pub/Sub に関係するものなので、自動的には削除されず作成を繰り返した分だけ通知設定が残っています。
また、Pub/Sub のトピック、サブスクリプションも消えていません。
Pub/Sub を消したら通知設定はどうなるのか
通知設定の内容を見ると topic
属性に Pub/Sub のトピックを示す値が入っていますので、続いて対象の Pub/Sub トピックとサブスクリプションを削除してみましたが、状況は変わらず通知設定は残ったままでした。
この状態だと Cloud Storage にオブジェクトを作ると通知先が無くなるわけですが、エラーが起こるということは無いようです。
通知設定の削除
Cloud Storage バケットごと削除すると、通知設定は消えますが、他の処理で利用しているケースもあります。そこで、コマンドでこれらの通知を削除することにします。
バケットの通知を削除するコマンドは次の通りです。
# gcloud ドキュメントより
# Delete a single notification configuration (with ID 3) in the bucket example-bucket:
gcloud storage buckets notifications delete projects/_/buckets/example-bucket/notificationConfigs/3
# Delete all notification configurations in the bucket example-bucket:
gcloud storage buckets notifications delete gs://example-bucket
バケットすべての通知を一気に削除するのも楽なのですが、これもまた他の目的で通知が設定されているケースを想定して、敢えて1つずつ消してみようと思います。
通知設定のIDをもう一度確認してみます。
- dts_16d47b5c-a942-4e54-a2ca-dada6dc7148e
- dts_80243ee5-c6b4-48b9-b084-4b1183f768c5
- dts_488825b9-7cc7-4f9c-a144-327968108e72
これらの id ごとに削除コマンドを3回繰り返します。
gcloud storage buckets notifications delete \
projects/_/buckets/ndd-dts-xxxxxxxxx/notificationConfigs/dts_16d47b5c-a942-4e54-a2ca-dada6dc7148e
Completed 1
gcloud storage buckets notifications delete \
projects/_/buckets/ndd-dts-xxxxxxxxx/notificationConfigs/dts_80243ee5-c6b4-48b9-b084-4b1183f768c5
Completed 1
gcloud storage buckets notifications delete \
projects/_/buckets/ndd-dts-xxxxxxxxx/notificationConfigs/dts_488825b9-7cc7-4f9c-a144-327968108e72
Completed 1
削除できました。
(実はこの記事を書くひと月前くらいまでは、トピック名を指定しても削除ができないというバグがあり、その対処法を見つけたので記事を書こうと思っていたのですが、バグが修正されて、急遽記事の方針転換をしたという背景があります・・・・)
まとめ
BigQuery DTS のイベント ドリブン転送を Google Cloud コンソール画面から行った場合、自動的に通知設定が作成され、その id
には Pub/Sub トピックの名前が設定されます。
自動的な通知設定には、Cloud Storage の対象オブジェクトのプリフィックスを設定することはできません。その場合はコマンドラインで事前に作成します。
BigQuery DTS を削除しても、関連する Pub/Sub のトピックとサブスクリプション、Cloud Storage の通知設定は削除されません。また、Cloud Storage の通知設定は Pub/Sub トピックを削除したとしても自動的に削除されることはありません。
Cloud Storage の通知設定は、自動的に作られた通知設定の id
を指定してコマンドラインで削除します。
すべて画面から BigQuery DTS のイベント ドリブン転送を設定できるのはコマンドラインは苦手なんだという方にも親切な設計ですね。是非お試しください。