💨

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