Cloud Dataflow がテンプレートにより気軽に使えるサーバーレスのサービスに進化した話
よく、 Google Cloud Platform (GCP) のサーバーレスサービスって、 Cloud Functions ですよね? *** ってどうやってやればいいんですか?
とか質問をいただくことがあります。この場合の「サーバーレス」の文脈は Function as a Service (FaaS) を指していることが多いと思うんですが、やりたいことをよくよく聞いてみると、「それ、 Cloud Dataflow で、もっと簡単にサーバーレスで出来ますね〜。」、「Google App Engine でももっと簡単に、複雑なことまで出来ますよ〜。」という話になることが多いです。(注:このポストの中では便宜上 Serverless ∋ FaaS とします。)
Cloud Dataflow は個人的には超イチオシサービスで、データ処理特化のサーバーレスサービスです。GCP 以外もサポートする様々なデータソースとデータのシンク (例: Kafka, S3 等) に対してコネクタがあり、簡単に ETL 処理ができます。ただし、新しいプログラミングモデル (Apache Beam) を習得する必要があり、ちょっと試してみたいだけのユーザや、わたしのような面倒くさがり開発者には正直ちょっとハードルが高い感がありました。
そんな認識を覆す機能がさり気なく 2017 年 10 月に Cloud Dataflow に実装されました。その名も Google-Provided Template です。これは読んで字のごとく、ある程度のデータ処理ができるテンプレートを Google が提供します、というものです。もともとあったユーザーが定義できるテンプレートの機能を用いて、デフォルトで提供されています。これを用いると、画面上でパラメータを入力するだけで、データ処理が簡単にできるようになります。それが Cloud Dataflow で動作することにより、そのままスケーラブルに使うことが出来ます。今回はこの機能をご紹介します。このポストが、初めて Cloud Dataflow を触ってみる方への参考になればと思っています。 GCP でデータを収集して保存するときにできるだけ運用を最小限にしてやりたい、みたいな方におすすめの内容です。
Cloud Dataflow 自体の詳しい紹介はドキュメントに任せるとして、今回実装されたテンプレートの一部を見てみましょう。
そもそもテンプレートを使うとどうなるの?
Google Provided Template を利用すると、以下のような画面が出てきます。例えばストリーミングでデータを受け取って、 BigQuery にストリーミング挿入してニアリアルタイムで分析したいという場合には、「テンプレートからジョブを作成」をクリックして下記のような画面でパラメーターを入力していくだけです。全部 GUI でも出来てしまいます。
ここからジョブを作成すると画面上でジョブの流れが可視化され、モニタリングやジョブのアップデートも簡単にできます。
これらのテンプレートの内容はオープンソースとして Github で公開されているため、このクラスを拡張して使いたい、この動作を参考にしてカスタマイズしたいなどと言う場合にも利用できます。
ちなみに、 Cloud Pub/Sub のトピック画面上にもさり気なく「BigQuery にエクスポート」というボタンが出現しており、こちらからも同じ様に Cloud Dataflow のテンプレートを起動することができます。
それでは、以下ではどのようなテンプレートがデフォルトで提供されるようになったのか、一部だけ見てみたいと思います。
Cloud Pub/Sub to BigQuery
メッセージングサービスである Cloud Pub/Sub よりデータをストリーミングで受け付け、 BigQuery にストリーミングするテンプレートです。これは最もよく利用される処理の一つではないでしょうか。上でも使ったものですね。これを Cloud Pub/Sub のトピックと BigQuery のテーブル、あといくつかのパラメーターを指定するだけで簡単に実現できます。
このジョブを実行すると、 Cloud Pub/Sub に JSON 形式のデータが書き込まれると、そのまま BigQuery にもストリーミング挿入 され、ニアリアルタイムで分析ができるようになります。 BigQuery に直接ストリーミング挿入するよりも、 Cloud Pub/Sub が間に挟まることで、クオータの制限に引っかかった場合でも、後ほど自動的にリトライが試行されるようになります。これによりさらにストリーミング挿入のデータパイプラインの安定性を担保出来ます。
- 公式ドキュメント: Cloud Pub/Sub to BigQuery
Cloud Pub/Sub to Cloud Storage Text
こちらはストリーミングで Cloud Pub/Sub に受け付けたデータを、オブジェクトストレージである Google Cloud Storage (GCS) に 一定時間ごと (デフォルト5分)に書き込みます。データ収集はしたいが、とりあえずコスト安くデータを保管したい、という場合によく使われるアーキテクチャではないでしょうか。 IoT や Web のログのすぐに分析不要なもの等に利用されます。
これを利用すると、あとでゆっくりバッチで BigQuery にロード*をして、データ収集パイプライン全体のコストを下げたり、他のデータベースへのデータ取り込みのためのデータレイクとして Cloud Storage を利用することが出来ます。
*: BigQuery ではバッチのデータロードは無料で行えます
(Vasily さんがこのあたりの使いわけを書いたブログポストがあります)
Cloud Storage Text to BigQuery
これは実は非常に強力な機能です。 Cloud Storage からデータを BigQuery に読み込むだけでなく、UDF (User Defined Function, ユーザー定義関数) を用いて、 JavaScript で記述した任意のデータ変換処理を行うことができます。この処理は Cloud Dataflow の分散環境で行われるので非常に大容量なデータでも高速に処理が可能です。
- 公式ドキュメント: Cloud Storage Text to BigQuery
Bulk Decompress Cloud Storage Files
Cloud Storage に置いてある .bzip2
, .deflate
, .gz
, .zip
ファイルを展開し、Cloud Storage に書き戻します。例えば大量のデータ転送の際には圧縮しておき、あとで Cloud Storage を経由してBigQuery や Bigtable と言った複数の場所に読み込ませる際や BigQuery の外部データソース機能を用いて Cloud Storage のデータを直接 BigQuery で分析する際にも利用できます。
- 公式ドキュメント: Bulk Decompress Cloud Storage Files
上記で紹介した以外にも、以下のようなテンプレートが提供されています。
ストリーミング :
- Pub/Sub Subscription to BigQuery
- Pub/Sub Topic to BigQuery
- Pub/Sub to Pub/Sub
- Pub/Sub to Splunk
- Pub/Sub to Cloud Storage Avro
- Pub/Sub to Cloud Storage Text
- Cloud Storage Text to BigQuery (Stream)
- Cloud Storage Text to Pub/Sub (Stream)
- Data Masking/Tokenization using Cloud DLP from Cloud Storage to BigQuery (Stream)
バッチ :
- BigQuery to Cloud Storage TFRecords
- Cloud Bigtable to Cloud Storage Avro
- Cloud Bigtable to Cloud Storage SequenceFiles
- Datastore to Cloud Storage Text
- Cloud Spanner to Cloud Storage Avro
- Cloud Spanner to Cloud Storage Text
- Cloud Storage Avro to Cloud Bigtable
- Cloud Storage Avro to Cloud Spanner
- Cloud Storage SequenceFiles to Cloud Bigtable
- Cloud Storage Text to BigQuery
- Cloud Storage Text to Datastore
- Cloud Storage Text to Pub/Sub (Batch)
- Cloud Storage Text to Cloud Spanner
- Java Database Connectivity (JDBC) to BigQuery
- Apache Cassandra to Cloud Bigtable
その他 :
紹介したとおり、 Cloud Dataflow はデータ処理を非常に簡単に扱えますので、ぜひみなさんお試しください。
最後に
最後に個人的な宣伝となります。この Cloud Dataflow のテンプレート機能を用いて BigQuery へデータを書き込むストリーミングのパイプラインを作るハンズオンを、 2018 年 3月 14日に技術評論社さんより発売された「クラウドエンジニア養成読本」に収録しています。興味がある方はぜひご覧になっていただければと思います。
Disclaimer この記事は個人的なものです。ここで述べられていることは私の個人的な意見に基づくものであり、私の雇用者には関係はありません。
2019 年 6 月 19 日 追記 : テンプレートの一覧を更新しました