Dataflow テンプレート

Dataflow テンプレートを使用すると、Dataflow パイプラインをデプロイ用にパッケージ化できます。適切な権限を持つユーザーであれば、テンプレートを使用してパッケージ化されたパイプラインをデプロイできます。独自のカスタム Dataflow テンプレートを作成できます。また、Google では、一般的なシナリオ用に事前構築されたテンプレートを用意しています。

利点

テンプレートには、パイプラインを Dataflow に直接デプロイする場合と比べて、いくつかのメリットがあります。

  • テンプレートは、パイプライン設計とデプロイを区別します。たとえば、デベロッパーがテンプレートを作成し、データ サイエンティストが後でテンプレートをデプロイできます。
  • テンプレートをデプロイする際、テンプレートには、パイプラインをカスタマイズできるパラメータを指定できます。
  • テンプレートのデプロイには、Google Cloud コンソール、Google Cloud CLI、または REST API 呼び出しを使用できます。開発環境やパイプラインの依存関係をローカルマシンにインストールする必要はありません。
  • テンプレートは、ソース管理リポジトリに格納され、継続的インテグレーション(CI / CD)パイプラインで使用できるコード アーティファクトです。

Google 提供のテンプレート

Google では、一般的なシナリオに使用できる、さまざまなビルド済みのオープンソース Dataflow テンプレートを提供しています。利用可能なテンプレートの詳細については、Google 提供のテンプレートをご覧ください。

Flex テンプレートとクラシック テンプレートを比較する

Dataflow では、2 種類のテンプレート(新しい Flex テンプレートとクラシック テンプレート)がサポートされています。新規に Dataflow テンプレートを作成する場合は、Flex テンプレートとして作成することをおすすめします。

Flex テンプレートの場合、パイプラインは Artifact Registry 内の Docker イメージとして、Cloud Storage にあるテンプレート仕様ファイルとともにパッケージ化されます。テンプレート仕様には、Docker イメージへのポインタが含まれています。テンプレートを実行すると、Dataflow サービスはランチャー VM を起動し、Docker イメージを pull してパイプラインを実行します。実行グラフは、ユーザーから指定されたランタイム パラメータに基づいて動的に作成されます。API を使用して、Flex テンプレートを使用するジョブを起動するには、projects.locations.flexTemplates.launch メソッドを使用します。

従来のテンプレートには、Dataflow ジョブグラフの JSON のシリアル化が含まれています。パイプラインのコードは、ValueProvider インターフェースのすべてのランタイム パラメータをラップする必要があります。このインターフェースでは、テンプレートをデプロイするときにパラメータ値を指定できます。API を使用してクラシック テンプレートを操作する場合は、projects.locations.templates API のリファレンス ドキュメントをご覧ください。

Flex テンプレートには、従来のテンプレートと比較して次のような利点があります。

  • ジュライのテンプレートとは異なり、Flex テンプレートでは、入力パラメータに ValueProvider インターフェースを必要としません。すべての Dataflow ソースとシンクが ValueProvider をサポートしているわけではありません。
  • クラシック テンプレートには静的なジョブグラフがありますが、Flex テンプレートではジョブグラフを動的に作成できます。たとえば、テンプレートで入力パラメータに基づいて別の I/O コネクタを選択できます。
  • Flex テンプレートは、パイプラインの作成中に仮想マシン(VM)で前処理を実行します。たとえば、入力パラメータ値の検証などを行います。

テンプレートのワークフロー

Dataflow テンプレートを使用する際の大まかな流れは次のとおりです。

  1. デベロッパーは、開発環境を設定し、パイプラインを開発します。その環境には、Apache Beam SDK や他の依存関係が含まれます。
  2. テンプレートの種類(Flex またはクラシック)に応じて、次のことを行います。
    • Flex テンプレートの場合、デベロッパーはパイプラインを Docker イメージにパッケージ化し、そのイメージを Artifact Registry に push して、テンプレート仕様ファイルを Cloud Storage にアップロードします。
    • クラシック テンプレートの場合、デベロッパーはパイプラインを実行し、テンプレート ファイルを作成して、そのテンプレートを Cloud Storage にステージングします。
  3. 他のユーザーは、テンプレートの実行リクエストを Dataflow サービスに送信します。
  4. Dataflow はテンプレートからパイプラインを作成します。パイプラインの実行が開始されるまでには最大で 5~7 分かかります。

IAM 権限を設定する

Dataflow ジョブ(テンプレートから実行されるジョブを含む)は、次の 2 つの IAM サービス アカウントを使用します。

  • Dataflow サービスは、Dataflow サービス アカウントを使用して Google Cloud リソースを操作します(VM の作成など)。
  • Dataflow ワーカー VM は、ワーカー サービス アカウントを使用してパイプラインのファイルとその他のリソースにアクセスします。このサービス アカウントには、テンプレートで使用されるソースやシンクなど、パイプライン ジョブが参照するリソースへのアクセス権が必要です。詳細については、Google Cloud リソースにアクセスするをご覧ください。

これら 2 つのサービス アカウントに適切なロールがあることを確認してください。詳細については、Dataflow のセキュリティと権限をご覧ください。

Apache Beam SDK バージョンの要件

独自のテンプレートを作成する際は、使用している Apache Beam SDK のバージョンでテンプレートの作成がサポートされていることを確認します。

Java

Apache Beam SDK 2.x for Java を使用してテンプレートを作成するには、バージョン 2.0.0-beta3 以降が必要です。

Python

Apache Beam SDK 2.x for Python を使用してテンプレートを作成するには、バージョン 2.0.0 以降が必要です。

Google Cloud CLI を使用してテンプレートを実行するには、Google Cloud CLI バージョン 138.0.0 以降が必要です。

テンプレートを拡張する

オープンソースの Dataflow テンプレートを拡張することで、独自のパイプラインを構築できます。たとえば、固定のウィンドウ期間を使用するテンプレートの場合、ウィンドウ外に届いたデータは破棄されることがあります。この動作を回避するには、テンプレート コードをベースとして使用し、.withAllowedLateness オペレーションを呼び出すようにコードを変更します。

次のステップ