Cloud StorageへのファイルアップロードをPub/Subで受け取る
今回はCloud StorageにファイルがアップロードされたときにPub/Subdで受け取る方法についてまとめてみます。
システム構成
今回の検証の環境はざっくり以下になります。
- Cloud Storageではファイルアップロードを受け付けます
- Cloud Storageにファイルがアップロードされると、Pub/Subトピックに向けて通知が投げられます
- Pub/Subが通知を受け取るとBigQueryに対して通知を配信します
- BigQueryではテーブルにPub/Subから受け取った通知を蓄積します
実装
Cloud Storage
まずはCloud Storageのバケットを作成します。バスケットはシングルリージョン(asia-northeast2
)で作成しました。名前はpubsub-topic-test
としました。
次に、Pub/Subに通知を投げるための設定をします。Pub/Subとの連携はWebコンソールからできないということで以下のコマンドを実行します。
gsutil notification create -t cloud-storage-pubsub-bigquery -f json -e OBJECT_FINALIZE gs://pubsub-topic-test
これを実行するとログとして以下が作成されました。
Created Cloud Pub/Sub topic projects/tech-blog-458911/topics/cloud-storage-pubsub-bigquery
Created notification config projects/_/buckets/pubsub-topic-test/notificationConfigs/2
ログから
-
cloud-storage-pubsub-bigquery
という名前でPub/Subトピックを作成 -
projects/_/buckets/pubsub-topic-test/notificationConfigs/2
としてバケットからの通知を設定
これを実行するとPub/Subのトピック画面では以下のように表示されます。
BigQueryへのシンクの設定
次に作成したトピックへのバケット通知をBigQueryにシンクする設定をします。
まずはBigQueryにてテーブルを作成します。今回はデータセット名、テーブル名両方にcloud_storage_pubsub
という名前を設定しました。
なおこの設定で実行すると
BiqQuery tableスキーマにフィールドdataが見つかりません。「トピックスキーマを使用する」オプションが選択されていない場合、BigQueryテーブルには「data」というフィールドが必要です。
というエラーが出る場合があります。その際は、データセットのスキーマにdata
という項目を追加してください。
データをアップロードしてみる
いくつかバケットにファイルをアップロードしました。
その後BigQueryに移動してクエリを実行すると、二つのファイルがアップロードされたことが通知されているのを確認できました。
まとめ
今回は、今までPub/Subを使ったことがなかったので、Cloud Storageへのアップロード通知をBigQueryにシンクするテストをしてみました。認定資格勉強中にも度々出てくる内容ですが、今回はその一端を体験できて、知識を具体化することができました。
みなさんもぜひお試しいただければと思います。
Discussion