Cloud Dataflow がテンプレートにより気軽に使えるサーバーレスのサービスに進化した話

Yuta Hono
google-cloud-jp
Published in
10 min readMar 23, 2018

--

よく、 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) を習得する必要があり、ちょっと試してみたいだけのユーザや、わたしのような面倒くさがり開発者には正直ちょっとハードルが高い感がありました。

GCPでのデータ処理リファレンスアーキテクチャ。Cloud Dataflowを使うとすべてサーバーレスで完結ができます。

そんな認識を覆す機能がさり気なく 2017 年 10 月に Cloud Dataflow に実装されました。その名も Google-Provided Template です。これは読んで字のごとく、ある程度のデータ処理ができるテンプレートを Google が提供します、というものです。もともとあったユーザーが定義できるテンプレートの機能を用いて、デフォルトで提供されています。これを用いると、画面上でパラメータを入力するだけで、データ処理が簡単にできるようになります。それが Cloud Dataflow で動作することにより、そのままスケーラブルに使うことが出来ます。今回はこの機能をご紹介します。このポストが、初めて Cloud Dataflow を触ってみる方への参考になればと思っています。 GCP でデータを収集して保存するときにできるだけ運用を最小限にしてやりたい、みたいな方におすすめの内容です。

Cloud Dataflow 自体の詳しい紹介はドキュメントに任せるとして、今回実装されたテンプレートの一部を見てみましょう。

そもそもテンプレートを使うとどうなるの?

Google Provided Template を利用すると、以下のような画面が出てきます。例えばストリーミングでデータを受け取って、 BigQuery にストリーミング挿入してニアリアルタイムで分析したいという場合には、「テンプレートからジョブを作成」をクリックして下記のような画面でパラメーターを入力していくだけです。全部 GUI でも出来てしまいます。

Cloud Dataflow のテンプレートからジョブを作成する。パラメーターを画面で入力するだけ。

ここからジョブを作成すると画面上でジョブの流れが可視化され、モニタリングやジョブのアップデートも簡単にできます。

Cloud Dataflow のジョブ

これらのテンプレートの内容はオープンソースとして Github で公開されているため、このクラスを拡張して使いたい、この動作を参考にしてカスタマイズしたいなどと言う場合にも利用できます。

ちなみに、 Cloud Pub/Sub のトピック画面上にもさり気なく「BigQuery にエクスポート」というボタンが出現しており、こちらからも同じ様に Cloud Dataflow のテンプレートを起動することができます。

それでは、以下ではどのようなテンプレートがデフォルトで提供されるようになったのか、一部だけ見てみたいと思います。

Cloud Pub/Sub to BigQuery

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 Cloud Storage Text

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 Text to BigQuery テンプレートの処理イメージ

これは実は非常に強力な機能です。 Cloud Storage からデータを BigQuery に読み込むだけでなく、UDF (User Defined Function, ユーザー定義関数) を用いて、 JavaScript で記述した任意のデータ変換処理を行うことができます。この処理は Cloud Dataflow の分散環境で行われるので非常に大容量なデータでも高速に処理が可能です。

Bulk Decompress Cloud Storage Files

Bulk Decompress Cloud Storage Files テンプレートの処理イメージ

Cloud Storage に置いてある .bzip2, .deflate, .gz, .zipファイルを展開し、Cloud Storage に書き戻します。例えば大量のデータ転送の際には圧縮しておき、あとで Cloud Storage を経由してBigQuery や Bigtable と言った複数の場所に読み込ませる際や BigQuery の外部データソース機能を用いて Cloud Storage のデータを直接 BigQuery で分析する際にも利用できます。

上記で紹介した以外にも、以下のようなテンプレートが提供されています。

ストリーミング :

バッチ :

その他 :

紹介したとおり、 Cloud Dataflow はデータ処理を非常に簡単に扱えますので、ぜひみなさんお試しください。

最後に

最後に個人的な宣伝となります。この Cloud Dataflow のテンプレート機能を用いて BigQuery へデータを書き込むストリーミングのパイプラインを作るハンズオンを、 2018 年 3月 14日に技術評論社さんより発売された「クラウドエンジニア養成読本」に収録しています。興味がある方はぜひご覧になっていただければと思います。

Disclaimer この記事は個人的なものです。ここで述べられていることは私の個人的な意見に基づくものであり、私の雇用者には関係はありません。

2019 年 6 月 19 日 追記 : テンプレートの一覧を更新しました

--

--

Yuta Hono
google-cloud-jp

Solutions Eng at @Google, @GoogleCloud. Opinions are my own, NOT the views of my employer. All posts here are my personal opinion.