🆕

GAになった Pub/Sub の Cloud Storage サブスクリプションを試してみた

2023/09/06に公開

はじめに

こんにちは、クラウドエース データML ディビジョン所属のZUMA SEAです。
クラウドエースのITエンジニアリングを担うシステム開発部の中で、特にデータ基盤構築・分析基盤構築からデータ分析までを含む一貫したデータ課題の解決を専門とするのがデータML ディビジョンです。
データML ディビジョンでは活動の一環として、毎週Google Cloud の新規リリースを調査・発表し、データ領域のプロダクトのキャッチアップをしています。
その中でも重要と考えるリリースを本ページ含め記事として公開しています。
本記事では、皆様にPub/Sub の Cloud Storage サブスクリプション がGAになったことをお知らせします!
また、実際にPub/Sub のCloud Storage サブスクリプションを試してみたいと思います!
個人的に、Pub/Sub の BigQuery サブスクリプションがとても便利な機能なので、Cloud Storage サブスクリプションにも期待しています。

1.リリース概要

Pub/Sub のサブスクリプションに Cloud Storage サブスクリプション がGAになりました。
Cloud Storageサブスクリプションで、Pub/Sub のトピックに送信したメッセージ(データ)をCloud Storage バケットに直接保存できるようになりました!

https://cloud.google.com/pubsub/docs/release-notes#July_28_2023

2.[前提知識の紹介] Pub/Sub の基本コンセプトについて

Pub/Sub とは、メッセージというデータと属性のまとまりを取り込み、リアルタイムに後続のストレージやデータベースなどへメッセージを送信することができるサービスです。
Pub/Sub では以下の処理が行われ、メッセージを受け取っています。

  1. アプリケーションなどのパブリッシャーがトピックにデータを送信する
  2. トピックが新しいデータを保持する
  3. トピックに紐づいているサブスクリプションがトピックからデータを受け取る
  4. 受け取ったデータを Dataflow や BigQuery などのサブスクライバーに送信する

0
詳細は、次のドキュメントをご覧ください。
https://cloud.google.com/pubsub/docs/overview?hl=ja

3.Cloud Storage サブスクリプションの概要

こちらの公式ドキュメントに沿って紹介します。
https://cloud.google.com/pubsub/docs/cloudstorage?hl=ja

Cloud Storageサブスクリプションは、Pub/Sub で提供されているサブスクリプションの一つで、Pub/Sub のトピックに送信したメッセージをCloud Storage バケットに直接保存できる機能です。

4.Cloud Storage サブスクリプションの影響範囲

4.1.Cloud Storage サブスクリプションリリース前のパイプライン構成について

本機能がリリース以前は、Pub/Sub からCloud Storageに直接保存する際は、主に次の手法を取る必要がありました。

  • 独自のカスタム Cloud Storage サブスクライバーを作成
  • Dataflow ジョブを使用したパイプラインを構築

そして、上記の手法では次の点が課題となっていました。

  • 独自のカスタム Cloud Storage サブスクライバーの作成が必要
    • コードの設計、開発、メンテナンスなどの工程が必要
  • Dataflowジョブが必要
    • 柔軟なデータ加工が可能などが便利な反面、生データを Cloud Storage に直接保存したいときに必要以上のコストが発生する

4.2.Cloud Storage サブスクリプションリリース後のパイプライン構成について

そして、4.1で挙げた課題を解決したのがCloud Storage サブスクリプションです!
本機能を使うと、次のメリットがあります。

  • 独自のカスタム Cloud Storage サブスクライバーの作成が不要
    • ノーコードで構築できる
  • Dataflow の処理で使用するリソースが不要
    • データ加工ができない反面、生データをCloud Storage に直接保存したいときに最小限のコストで抑えられる

4.3.まとめ

4.3.1.リリース前後の構成比較

Cloud Storage サブスクリプションDataflow 構成の比較表となります。

Dataflow構成 Cloud Storage サブスクリプション
データ加工 可能 不可能
コーディング 必要 不要

4.3.2.Cloud Storage サブスクリプションのユースケース

Cloud Storage サブスクリプションを有効活用できそうなケースは次のようなケースだと思います。

  • リアルタイムで大量に送られてくるログを Cloud Storage へ保存
  • json 形式のリアルタイムデータを Cloud Storage へ保存

4.3.3.Dataflow構成のユースケース

逆に以下のケースは、Dataflow を用いた従来の構成を取ったほうが良いでしょう。

  • データに対して変換が必要なとき
    • 非構造データのバイナリデータをもとに戻す処理
    • 複数の入力に対して、まとめて処理を実施

5.検証:本機能を使って、位置情報等のリアルタイムデータを Cloud Storage へ取り込む

5.1.検証の背景

検証では、Pub/Sub から来る json 形式のリアルタイムデータを Cloud Storage に保存してみようと思います。
json 形式は比較的一般的なので、本機能を利用する際の参考になれば嬉しいです。

5.2.全体構成図

全体の構成は下図のようにしています。
1

5.3.準備

はじめに、本検証で必要な次のリソースを準備します。

  • Cloud Storage バケット
  • Pub/Subサービスアカウント
  • Cloud Storage サブスクリプション

5.3.1.Cloud Storage バケットを作成

[手順1]
Google Cloud コンソールのナビゲーションメニューでCloud Storageのバケットを選択します。
2

[手順2]
バケットの画面に遷移したら、作成のボタンを選択します。
3

[手順3]
今回は、バケット名とロケーション(asia-northeast1)のみ指定します。
4

詳細はこちらの公式ドキュメントをご覧ください。
https://cloud.google.com/storage/docs/creating-buckets?hl=ja#create_a_new_bucket

5.3.2.Pub/Sub サービスアカウントを作成

Pub/Sub と Cloud Storage バケットを連携するためにPub/Sub サービスアカウントを作成します。
[手順1]
5.1.1で作成した Cloud Storage バケットで、権限のタブ → アクセス権を付与を選択します。

5

[手順2]
サービスアカウントを作成のボタンを選択すると、画面がプリンシパルの追加に遷移します。
下図のように次の3つの項目を設定して保存することでサービスアカウントを作成できます。

6

[補足]
1.新しいプリンシパルの追加をする際に次のような命名規則に従う必要があります。
service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com
(PROJECT_NUMBERについては、Google Cloud コンソールのダッシュボードから確認ができます)

詳細はこちらの公式ドキュメントをご覧ください。
https://cloud.google.com/pubsub/docs/create-cloudstorage-subscription?hl=ja#assign_roles_cloudstorage

5.3.3.Cloud Storage サブスクリプションを作成

本検証では、公開トピックのメッセージを使用しています。
次のコマンドでサブスクリプションを作成します。

gcloud pubsub subscriptions create SUBSCRIPTION_ID \
#公開トピックを指定
--topic=projects/pubsub-public-data/topics/taxirides-realtime \
#バケットを指定
--cloud-storage-bucket=BUCKET_NAME

上記コマンドは、検証用として必要最低限のフラグを設定しています。
その他のフラグについては、こちらの公式ドキュメントをご覧ください。
https://cloud.google.com/pubsub/docs/create-cloudstorage-subscription?hl=ja#cloudstorage_sub_create

5.4.結果

リアルタイムで公開トピックからデータを Cloud Storage へ直接保存できました。
2

取り込んだデータを見ると、json 形式を保ったままテキストファイルで出力してくれました。
3

6.Cloud Storage サブスクリプションの料金

6.1.料金の内訳

Cloud Storage サブスクリプションは、大きく分けて5つの料金が発生します。

  1. スループット費用
    • サブスクリプションの読み取りとCloud Storageへの書き込みに対して、TiBあたり$50かかる
  2. ストレージ費用
    • ストレージクラスの料金、取得料金、レプリケーションの料金などが含まれている
  3. 下り(外向き)料金
    • ゾーンの下り(外向き)料金は発生しない
    • 他の Google サービスへの下り料金は発生する
  4. プロジェクト間のPub/Sub課金
    • 複数のプロジェクトに渡って Pub/Sub を使用している場合のみ、リクエストしたプロジェクトに料金が発生する
  5. フィルタされたメッセージの費用
    • フィルタリングされたメッセージには下り料金は発生しないが、フィルタに一致しないメッセージを自動確認応答した場合は、スループット料金が発生する

6.2.Dataflow構成との料金比較

Cloud Storage サブスクリプションと Dataflow 構成との料金比較をします。
2つの構成で大きく異なるところは、次の2点となります。

  1. Pub/Sub スループットコスト
  2. Dataflow コスト

下の表を見ると、 Pub/Sub スループットコストは Cloud Storage サブスクリプションのほうが少し割高となっています。
ただ、構築コストやDataflowのリソースのコストを踏まえると、結果的に安くなる場合が多いのではないかと思います。
ただコスト最適を考えている場合は、利用する際に試算する必要があると感じました。

Pub/Sub スループット料金
Dataflow構成 $40/TiB
Cloud Storage サブスクリプション $50/TiB

※どちらの構成にも同じだけ発生する料金は省略しています。

料金の詳細はこちらの公式ドキュメントをご覧ください。
https://cloud.google.com/pubsub/pricing?hl=ja#pubsub

7.まとめ

本記事では、Cloud Storage サブスクリプションについてのリリースを紹介しました。
ユースケースでも挙げたように、LOGシンク先を Cloud Storage にする場合などに便利な機能だと思います。

ぜひ活用してみてください!

Discussion