概要
コマンドライン パラメータを受け入れるパイプラインは、ハードコードしたパラメータを使うパイプラインよりもはるかに便利です。しかし、そのようなパイプラインを実行するには、開発環境を作成する必要があります。さまざまなユーザーによる再実行や、多種多様なコンテキストでの再実行が想定されるパイプラインには、さらに便利な選択肢があります。それは、Dataflow テンプレートを使うことです。
Google Cloud Platform には、あらかじめ作成された Dataflow テンプレートが多数用意されていて、Google のスタートガイド ドキュメントで確認できます。しかし、それらのテンプレートの中には、このラボのパイプラインと同じ機能を果たすものはありません。そこで、このパートでは、パイプラインを(従来のカスタム テンプレートではなく)新しいカスタム Dataflow Flex テンプレートに変換します。
パイプラインをカスタム Dataflow Flex テンプレートに変換するには、コードと依存関係をパッケージ化する Uber JAR、ビルド対象のコードを記述する Dockerfile、実際のジョブの作成を実行するための基盤となるコンテナをビルドする Cloud Build、ジョブ パラメータを記述するメタデータ ファイルを使用する必要があります。
前提条件
Java に関する基本的な知識。
学習内容
このラボの内容:
- カスタム パイプラインをカスタム Dataflow Flex テンプレートに変換する。
- Dataflow Flex テンプレートを実行する。
設定と要件
各ラボでは、新しい Google Cloud プロジェクトとリソースセットを一定時間無料で利用できます。
-
シークレット ウィンドウを使用して Google Skills にログインします。
-
ラボのアクセス時間(例: 1:15:00)に注意し、時間内に完了できるようにしてください。
一時停止機能はありません。必要な場合はやり直せますが、最初からになります。
-
準備ができたら、[ラボを開始] をクリックします。
-
ラボの認証情報(ユーザー名とパスワード)をメモしておきます。この情報は、Google Cloud コンソールにログインする際に使用します。
-
[Google コンソールを開く] をクリックします。
-
[別のアカウントを使用] をクリックし、このラボの認証情報をコピーしてプロンプトに貼り付けます。
他の認証情報を使用すると、エラーや料金が発生します。
-
利用規約に同意し、再設定用のリソースページをスキップします。
Google Cloud Shell の有効化
Google Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。
Google Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
-
Google Cloud コンソールで、右上のツールバーにある [Cloud Shell をアクティブにする] ボタンをクリックします。

-
[続行] をクリックします。
環境がプロビジョニングされ、接続されるまでしばらく待ちます。接続した時点で認証が完了しており、プロジェクトに各自のプロジェクト ID が設定されます。次に例を示します。

gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
- 次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
出力:
Credentialed accounts:
- @.com (active)
出力例:
Credentialed accounts:
- google1623327_student@qwiklabs.net
- 次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project
出力:
[core]
project =
出力例:
[core]
project = qwiklabs-gcp-44776a13dea667a6
注:
gcloud ドキュメントの全文については、
gcloud CLI の概要ガイド
をご覧ください。
プロジェクトの権限を確認する
Google Cloud で作業を開始する前に、Identity and Access Management(IAM)内で適切な権限がプロジェクトに付与されていることを確認する必要があります。
-
Google Cloud コンソールのナビゲーション メニュー(
)で、[IAM と管理] > [IAM] を選択します。
-
Compute Engine のデフォルトのサービス アカウント {project-number}-compute@developer.gserviceaccount.com が存在し、編集者のロールが割り当てられていることを確認します。アカウントの接頭辞はプロジェクト番号で、ナビゲーション メニュー > [Cloud の概要] > [ダッシュボード] から確認できます。
![Compute Engine のデフォルトのサービス アカウント名と編集者のステータスがハイライト表示された [権限] タブページ](https://cdn.qwiklabs.com/1nytD9OUuNUV9undyjUWeOS7LJmekReBDmkUjveCjcU%3D)
注: アカウントが IAM に存在しない場合やアカウントに編集者のロールがない場合は、以下の手順に沿って必要なロールを割り当てます。
- Google Cloud コンソールのナビゲーション メニューで、[Cloud の概要] > [ダッシュボード] をクリックします。
- プロジェクト番号(例:
729328892908)をコピーします。
-
ナビゲーション メニューで、[IAM と管理] > [IAM] を選択します。
- ロールの表の上部で、[プリンシパル別に表示] の下にある [アクセスを許可] をクリックします。
- [新しいプリンシパル] に次のように入力します。
{project-number}-compute@developer.gserviceaccount.com
-
{project-number} はプロジェクト番号に置き換えてください。
- [ロール] で、[Project](または [基本])> [編集者] を選択します。
- [保存] をクリックします。
IDE を設定する
このラボでは、Google Compute Engine でホストされる Theia Web IDE を主に使用します。これには、事前にクローンが作成されたラボリポジトリが含まれます。Java 言語サーバーがサポートされているとともに、Cloud Shell に似た仕組みで、gcloud コマンドライン ツールを通じて Google Cloud API へのプログラムによるアクセスが可能なターミナルも使用できます。
- Theia IDE にアクセスするには、Google Skills に表示されたリンクをコピーして新しいタブに貼り付けます。
注: URL が表示された後も、環境が完全にプロビジョニングされるまで 3~5 分待つ必要がある場合があります。その間はブラウザにエラーが表示されます。

ラボリポジトリのクローンが環境に作成されました。各ラボは、完成させるコードが格納される labs フォルダと、ヒントが必要な場合に完全に機能するサンプルを参照できる solution フォルダに分けられています。
-
ファイル エクスプローラ ボタンをクリックして確認します。

Cloud Shell で行うように、この環境で複数のターミナルを作成することも可能です。
![[ターミナル] メニューでハイライト表示されている [新しいターミナル] オプション](https://cdn.qwiklabs.com/o3Hxy07QcEZ%2FwAucqGRJPFyRJWB0negMcYJph7S%2FDh4%3D)
提供されたサービス アカウント(ラボのユーザー アカウントとまったく同じ権限がある)でログインしたターミナルで gcloud auth list を実行すれば、以下を確認できます。

環境が機能しなくなった場合は、IDE をホストしている VM を GCE コンソールから次のようにリセットしてみてください。
![[VM インスタンス] ページで、リセットボタンと VM インスタンス名の両方がハイライト表示されている](https://cdn.qwiklabs.com/jDH1qGTOJ%2B1Hy2nxOPm1DPmO1JgUCjOmBvwycVWgqEk%3D)
タスク 1. パイプラインを設定する
このラボでは、分岐するパイプライン ラボ(ソリューション フォルダ)にある既存のパイプライン コードを利用します。
適切なラボを開く
- IDE 環境に新しいターミナルをまだ作成していない場合は作成し、次のコマンドをコピーして貼り付けます。
# ディレクトリをラボに変更する
cd 2_Branching_Pipelines/labs
# 依存関係をダウンロードする
mvn clean dependency:resolve
export BASE_DIR=$(pwd)
- データ環境を設定します。
# GCS バケットと BQ データセットを作成する
cd $BASE_DIR/../..
source create_batch_sinks.sh
# イベント データフローを生成する
source generate_batch_events.sh
# 練習用コードが含まれているディレクトリに移動する
cd $BASE_DIR
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
データ環境を設定する
パイプライン コードを更新する
- IDE で、
2_Branching_Pipelines/solution/src/main/java/com/mypackage/pipeline にあるソリューション ファイルを使用して MyPipeline.java を更新します。
cp /home/project/training-data-analyst/quests/dataflow/2_Branching_Pipelines/solution/src/main/java/com/mypackage/pipeline/MyPipeline.java $BASE_DIR/src/main/java/com/mypackage/pipeline/
タスク 2. カスタム Dataflow Flex テンプレート コンテナ イメージを作成する
- このタスクを完了するために、最初に次のプラグインを
pom.xml ファイルに追加して、Uber JAR をビルドできるようにします。まず、properties タグに以下を追加します。
<maven-shade-plugin.version>3.2.3</maven-shade-plugin.version>
- 次に、build plugins タグに以下を追加します。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>${maven-shade-plugin.version}</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
</transformers>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
- これで、次のコマンドを使用して Uber JAR ファイルをビルドできます。
cd $BASE_DIR
mvn clean package
サイズに注意してください。この Uber JAR ファイルにはすべての依存関係が含まれます。
- このファイルは、他のライブラリと外的な依存関係のない単独のアプリケーションとして実行できます。
ls -lh target/*.jar
-
pom.xml ファイルと同じディレクトリに、Dockerfile という名前のファイルを作成し、以下のテキストを含めます。FLEX_TEMPLATE_JAVA_MAIN_CLASS には自分の完全なクラス名、YOUR_JAR_HERE には作成した Uber JAR を設定してください。
FROM gcr.io/dataflow-templates-base/java11-template-launcher-base:latest
# Dataflow Flex テンプレートに必要な Java コマンド オプションを定義します。
ENV FLEX_TEMPLATE_JAVA_MAIN_CLASS="YOUR-CLASS-HERE"
ENV FLEX_TEMPLATE_JAVA_CLASSPATH="/template/pipeline.jar"
# すべての依存関係を含んだ uber-jar としてパッケージ化します。
COPY target/YOUR-JAR-HERE.jar ${FLEX_TEMPLATE_JAVA_CLASSPATH}
- 次は、このコンテナをビルドしますが、ローカルでビルドするのではなく、Cloud Build にビルドをオフロードします。まず、今後のビルド時間を短縮するためにキャッシュを有効にします。
gcloud config set builds/use_kaniko True
- 次に、実際のビルドを実行します。これで、実際のビルド内容についての指示が記述された
Dockerfile を含むディレクトリ全体が tar ファイルにまとめられ、サービスにアップロードされます。さらに、コンテナがビルドされてプロジェクトの Artifact Registry に push され、今後使用できるようになります。
export TEMPLATE_IMAGE="gcr.io/$PROJECT_ID/my-pipeline:latest"
gcloud builds submit --tag $TEMPLATE_IMAGE .
Cloud Build UI でビルドのステータスをモニタリングすることもできます。また、ビルドされたコンテナが Artifact Registry にアップロードされたことも確認できます。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
カスタム Dataflow Flex テンプレート コンテナ イメージを作成する
タスク 3. Flex テンプレートを作成してステージングする
テンプレートを実行するには、SDK 情報やメタデータなど、ジョブの実行に必要なすべての情報を含むテンプレート仕様ファイルを Cloud Storage に作成する必要があります。
- このタスクを完了するには、パイプラインで想定している入力パラメータすべてを考慮した以下の形式で
metadata.json ファイルを作成します。
必要な場合は、ソリューションを参照してください。独自のパラメータ正規表現チェックを記述する必要があります。おすすめの方法ではありませんが、".*" はあらゆる入力に一致します。
{
"name": "Your pipeline name",
"description": "Your pipeline description",
"parameters": [
{
"name": "inputSubscription",
"label": "Pub/Sub input subscription.",
"helpText": "Pub/Sub subscription to read from.",
"regexes": [
"[-_.a-zA-Z0-9]+"
]
},
{
"name": "outputTable",
"label": "BigQuery output table",
"helpText": "BigQuery table spec to write to, in the form 'project:dataset.table'.",
"is_optional": true,
"regexes": [
"[^:]+:[^.]+[.].+"
]
}
]
}
- 次に、実際のテンプレートをビルドしてステージングします。
export TEMPLATE_PATH="gs://${PROJECT_ID}/templates/mytemplate.json"
# テンプレートをビルドして GCS にアップロードする
gcloud dataflow flex-template build $TEMPLATE_PATH \
--image "$TEMPLATE_IMAGE" \
--sdk-language "JAVA" \
--metadata-file "metadata.json"
- ファイルが Cloud Storage のテンプレート用の場所にアップロードされていることを確認します。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Flex テンプレートを作成してステージングする
タスク 4. UI からテンプレートを実行する
このタスクを完了するには、以下の手順を実行します。
- Google Cloud コンソールで [Dataflow] ページに移動します。
- [テンプレートからジョブを作成] をクリックします。
- [ジョブ名] フィールドに有効なジョブ名を入力します。
- [Dataflow テンプレート] プルダウン メニューから [カスタム テンプレート] を選択します。
- テンプレートの Cloud Storage パスのフィールドに、テンプレート ファイルへの Cloud Storage パスを入力します。
- [必須パラメータ] に適切な項目を入力します。
- [ジョブを実行] をクリックします。
注: ステージング バケットを指定する必要はありません。gs://dataflow-staging--/staging のような、プロジェクト番号を使用した限定公開のバケットが DataFlow によってプロジェクトに作成されます。
-
Compute Engine コンソールを確認すると、コンテナを実行して指定のパラメータでパイプラインを開始するための一時的なランチャー VM があるのがわかります。
タスク 5. gcloud を使用してテンプレートを実行する
Dataflow テンプレートを使用する利点の一つは、開発環境以外の幅広いコンテキストから実行できることです。それを実際に確かめるために、gcloud を使用してコマンドラインから Dataflow テンプレートを実行します。
- このタスクを完了するには、以下のコマンドを、適宜パラメータを変更してターミナルで実行します。
export PROJECT_ID=$(gcloud config get-value project)
export REGION={{{project_0.default_region | Region}}}
export JOB_NAME=mytemplate-$(date +%Y%m%H%M$S)
export TEMPLATE_LOC=gs://${PROJECT_ID}/templates/mytemplate.json
export INPUT_PATH=gs://${PROJECT_ID}/events.json
export OUTPUT_PATH=gs://${PROJECT_ID}-coldline/
export BQ_TABLE=${PROJECT_ID}:logs.logs_filtered
gcloud dataflow flex-template run ${JOB_NAME} \
--region=$REGION \
--template-file-gcs-location ${TEMPLATE_LOC} \
--parameters "inputPath=${INPUT_PATH},outputPath=${OUTPUT_PATH},tableName=${BQ_TABLE}"
- パイプラインが正常に完了することを確認します。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
UI と gcloud を使用してテンプレートを実行する
ラボを終了する
ラボが完了したら、[ラボを終了] をクリックします。ラボで使用したリソースが Google Skills から削除され、アカウントの情報も消去されます。
ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信] をクリックします。
星の数は、それぞれ次の評価を表します。
- 星 1 つ = 非常に不満
- 星 2 つ = 不満
- 星 3 つ = どちらともいえない
- 星 4 つ = 満足
- 星 5 つ = 非常に満足
フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。
フィードバックやご提案の送信、修正が必要な箇所をご報告いただく際は、[サポート] タブをご利用ください。
Copyright 2026 Google LLC All rights reserved. Google および Google のロゴは、Google LLC の商標です。その他すべての社名および製品名は、それぞれ該当する企業の商標である可能性があります。