このページでは、Dataflow パイプラインの Flex テンプレートを作成する方法について説明します。Flex テンプレートを使用すると、Apache Beam パイプライン コードをパッケージ化して、開発環境がなくてもパイプラインを実行できます。Flex テンプレートを作成すると、適切な権限を持つユーザーは誰でもパイプラインを Dataflow ジョブとして実行できます。
Flex テンプレートの作成と実行に関するエンドツーエンドのチュートリアルについては、Flex テンプレートの例を作成して実行するをご覧ください。
概要
Flex テンプレートは、次の要素で構成されています。
Artifact Registry に保存されているコンテナ イメージ。コンテナは Dataflow ジョブの起動を担当します。
Cloud Storage に保存されている JSON 仕様ファイル。このファイルには、コンテナ イメージへのポインタとその他のメタデータが含まれています。
Flex テンプレートを作成する前に、Apache Beam SDK を使用してパイプライン コードを記述する必要があります。詳細については、Apache Beam を使用してパイプラインを構築するをご覧ください。
パイプラインを開始するには、パイプラインを構築するプログラムが run の呼び出し後に終了する必要があります。waitUntilFinish(Java)または wait_until_finish(Python)を呼び出さないでください。これらの関数はブロックされ、Flex テンプレートの実行が妨げられます。
必要な権限
Flex テンプレートのビルドに必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
- ストレージ管理者(
roles/storage.admin) -
Cloud Build 編集者(
roles/cloudbuild.builds.editor) -
Artifact Registry 書き込み(
roles/artifactregistry.writer)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
テンプレート メタデータ
必要に応じて、テンプレートに追加のメタデータ(以下を含む)を指定できます。
パイプライン パラメータ: パイプラインで使用するカスタム パイプライン オプションを宣言します。Dataflow は、Flex テンプレート ジョブを送信するときにパラメータを検証します。Google Cloud コンソールを使用してテンプレートを実行すると、[テンプレートからジョブを作成] ダイアログに、メタデータで宣言されたパイプライン パラメータが含まれます。
ストリーミングのサポート: パイプラインがストリーミングをサポートするかどうかを指定できます。サポートする場合は、1 回限りモードと 1 回以上モードのどちらをサポートするかを指定できます。このメタデータにより、テンプレートの実行時に Google Cloud コンソールに関連するパイプライン オプションが表示されます。
追加のメタデータを含めるには、メタデータ パラメータを含む JSON ファイルを作成します。このファイルは、gcloud dataflow flex-template build コマンドの --metadata-file フラグで指定します。メタデータ ファイルの内容は、テンプレート仕様ファイルに統合されます。詳細については、Flex テンプレートをビルドするをご覧ください。
メタデータのパラメータ
| パラメータキー | 必須 | 値の説明 | |
|---|---|---|---|
name |
○ | テンプレートの名前。 | |
description |
× | テンプレートを説明する短い文章。 | |
streaming |
× | true の場合、このテンプレートはストリーミングをサポートします。デフォルト値は false です。 |
|
supportsAtLeastOnce |
× | true の場合、このテンプレートは 1 回以上の処理をサポートします。デフォルト値は false です。テンプレートが 1 回以上のストリーミング モードで動作するように設計されている場合は、このパラメータを true に設定します。 |
|
supportsExactlyOnce |
× | true の場合、このテンプレートは 1 回限りの処理をサポートします。デフォルト値は true です。 |
|
defaultStreamingMode |
× | 1 回以上モードと 1 回限りモードの両方をサポートするテンプレートのデフォルトのストリーミング モード。"AT_LEAST_ONCE"、"EXACTLY_ONCE" のいずれかの値を使用できます。指定しない場合、デフォルトのストリーミング モードは 1 回限りモードです。 |
|
parameters |
× | テンプレートで使用する追加のパラメータの配列。デフォルトで空の配列が使用されます。 | |
name |
○ | テンプレートで使用されるパラメータの名前。 | |
label |
○ | Google Cloud パラメータにラベルを付けるためにコンソールで使用される、人が読める文字列。 | |
helpText |
○ | パラメータを説明する短い文章。 | |
isOptional |
× | パラメータが必須の場合は false、パラメータが省略可能な場合は true。値が設定されていない場合、isOptional はデフォルトで false に設定されます。このパラメータキーをメタデータに含めない場合、メタデータが必須パラメータになります。 |
|
regexes |
× | パラメータの値を検証するために使用される文字列形式の POSIX-egrep 正規表現の配列。たとえば、["^[a-zA-Z][a-zA-Z0-9]+"] は、値がアルファベットで始まり、その後に文字が 1 つ以上続くことを検証する単独の正規表現です。デフォルトで空の配列が使用されます。 |
メタデータ ファイルの例
Java
{ "name": "Streaming Beam SQL", "description": "An Apache Beam streaming pipeline that reads JSON encoded messages from Pub/Sub, uses Beam SQL to transform the message data, and writes the results to a BigQuery", "parameters": [ { "name": "inputSubscription", "label": "Pub/Sub input subscription.", "helpText": "Pub/Sub subscription to read from.", "regexes": [ "[a-zA-Z][-_.~+%a-zA-Z0-9]{2,}" ] }, { "name": "outputTable", "label": "BigQuery output table", "helpText": "BigQuery table spec to write to, in the form 'project:dataset.table'.", "isOptional": true, "regexes": [ "[^:]+:[^.]+[.].+" ] } ] }
Python
{ "name": "Streaming beam Python flex template", "description": "Streaming beam example for python flex template.", "parameters": [ { "name": "input_subscription", "label": "Input PubSub subscription.", "helpText": "Name of the input PubSub subscription to consume from.", "regexes": [ "projects/[^/]+/subscriptions/[a-zA-Z][-_.~+%a-zA-Z0-9]{2,}" ] }, { "name": "output_table", "label": "BigQuery output table name.", "helpText": "Name of the BigQuery output table name.", "isOptional": true, "regexes": [ "([^:]+:)?[^.]+[.].+" ] } ] }
Google 提供のテンプレートのメタデータ ファイルは、Dataflow のテンプレート ディレクトリからダウンロードできます。
環境変数
Flex テンプレートをビルドするときは、gcloud dataflow flex-template build コマンドの --env フラグで次の環境変数を指定します。カスタム イメージを使用している場合は、Dockerfile でこれらの環境変数を設定します。
Java
| ENV | 説明 | 必須 |
|---|---|---|
FLEX_TEMPLATE_JAVA_MAIN_CLASS |
Flex テンプレートを起動するために、実行する Java クラスを指定します。 | ○ |
FLEX_TEMPLATE_JAVA_CLASSPATH |
クラスファイルの場所を指定します。 | ○ |
FLEX_TEMPLATE_JAVA_OPTIONS |
Flex テンプレートの起動時に渡す Java のオプションを指定します。 | × |
Dockerfile で FLEX_TEMPLATE_JAVA_MAIN_CLASS と FLEX_TEMPLATE_JAVA_CLASSPATH を指定します。
Python
| ENV | 説明 | 必須 |
|---|---|---|
FLEX_TEMPLATE_PYTHON_PY_FILE |
Flex テンプレートを起動するために、実行する Python ファイルを指定します。 | ○ |
FLEX_TEMPLATE_PYTHON_REQUIREMENTS_FILE |
パイプラインの依存関係を含む要件ファイルを指定します。詳細については、Apache Beam ドキュメントの PyPI の依存関係をご覧ください。 | × |
FLEX_TEMPLATE_PYTHON_SETUP_FILE |
パイプライン パッケージ setup.py ファイルのパスを指定します。詳細については、Apache Beam ドキュメントの複数ファイルの依存関係をご覧ください。 | × |
FLEX_TEMPLATE_PYTHON_EXTRA_PACKAGES |
一般公開されていないパッケージを指定します。追加のパッケージの使用方法については、ローカルまたは PyPI 以外の依存関係をご覧ください。 |
× |
FLEX_TEMPLATE_PYTHON_PY_OPTIONS |
Flex テンプレートの起動時に渡す Python のオプションを指定します。 | × |
Dockerfile で FLEX_TEMPLATE_PYTHON_PY_FILE を指定します。
パイプラインの依存関係を管理するには、次のように Dockerfile で変数を設定します。
FLEX_TEMPLATE_PYTHON_REQUIREMENTS_FILEFLEX_TEMPLATE_PYTHON_PY_OPTIONSFLEX_TEMPLATE_PYTHON_SETUP_FILEFLEX_TEMPLATE_PYTHON_EXTRA_PACKAGES
たとえば、GitHub の Python Flex テンプレートでのストリーミングのチュートリアルでは、次の環境変数が設定されています。
ENV FLEX_TEMPLATE_PYTHON_REQUIREMENTS_FILE="${WORKDIR}/requirements.txt"
ENV FLEX_TEMPLATE_PYTHON_PY_FILE="${WORKDIR}/streaming_beam.py"
Go
| ENV | 説明 | 必須 |
|---|---|---|
FLEX_TEMPLATE_GO_BINARY |
実行する Go バイナリ ファイルを指定します。 | ○ |
Dockerfile で FLEX_TEMPLATE_GO_BINARY を指定します。
Flex テンプレート イメージ
Flex テンプレートには、Dataflow パイプラインを起動するコンテナ イメージが含まれています。Flex テンプレート ジョブを実行すると、Dataflow サービスは Artifact Registry からコンテナ イメージをダウンロードしてコンテナを起動します。コンテナは Dataflow ジョブの起動を担当します。
Google は、使用可能な Flex テンプレートのベースイメージのセットを保持しています。ただし、パイプラインでカスタム コンテナ イメージが必要な場合は、Flex テンプレートに同じイメージを使用することをおすすめします。これにより、Flex テンプレート ランチャーには、パイプラインのランタイム コンテナと同じ依存関係が含まれます。
カスタム コンテナ イメージ
カスタム Flex テンプレート イメージを作成するには、Dockerfile に次の手順を含めます。
Flex テンプレート ランチャー バイナリを、Google 提供のベースイメージのいずれかからイメージにコピーします。ランチャー バイナリは次のパスにあります。
Java
/opt/google/dataflow/java_template_launcherPython
/opt/google/dataflow/python_template_launcherGo
/opt/google/dataflow/go_template_launcherパイプライン ジョブの起動に必要なアーティファクト(Python ファイル、JAR ファイル、Go バイナリなど)をコピーします。
環境変数に記載されている環境変数を設定します。
次の例は、Python パイプラインの Dockerfile を示しています。
# Flex Template base image. Used here to get the launcher binary.
FROM gcr.io/dataflow-templates-base/IMAGE_NAME:TAG as template_launcher
# Apache Beam SDK image. This is the base image for the pipeline job.
FROM apache/beam_python3.10_sdk:2.69.0
# Customize the image for your pipeline.
# [...]
# Configure the Flex Template.
COPY --from=template_launcher /opt/google/dataflow/python_template_launcher /opt/google/dataflow/python_template_launcher
COPY my_pipeline.py /template/
ENV FLEX_TEMPLATE_PYTHON_PY_FILE="/template/my_pipeline.py"
次のように置き換えます。
IMAGE_NAME: Google が提供するベースイメージ。例:python311-template-launcher-base。TAG: Flex テンプレートのベースイメージに記載されているベースイメージのバージョンタグ。安定性の向上とトラブルシューティングのために、latestは使用しないでください。代わりに、具体的なバージョンタグに固定してください。
この方法に沿ったチュートリアルについては、依存関係のあるパイプラインとカスタム コンテナ イメージの Flex テンプレートをご覧ください。
Flex テンプレートをビルドする
Flex テンプレートをビルドするには、gcloud dataflow flex-template build コマンドを使用します。このコマンドは、次のアーティファクトを作成します。
- Cloud Storage に保存されているテンプレート仕様ファイル
- Artifact Registry に保存されているランチャー コンテナ イメージ
Google 提供のベースイメージを使用する
Google 提供のベースイメージを使用して Flex テンプレートを実行するには、次のコマンドを実行します。
Java
gcloud dataflow flex-template build gs://BUCKET_NAME/TEMPLATE_FILE_NAME \ --image-gcr-path "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE:TAG" \ --sdk-language "JAVA" \ --flex-template-base-image "BASE_IMAGE" \ --metadata-file "METADATA_FILE" \ --jar "JAR_FILE" \ --env "FLEX_TEMPLATE_JAVA_MAIN_CLASS=JAVA_MAIN_CLASS"
次のように置き換えます。
-
BUCKET_NAME: テンプレート仕様ファイルを保存する Cloud Storage バケットの名前 -
TEMPLATE_FILE_NAME: 作成するテンプレート仕様ファイルの名前。例:my_template.json -
LOCATION: Artifact Registry リポジトリのロケーション。 -
PROJECT_ID: Google Cloud プロジェクト ID -
REPOSITORY: Artifact Registry リポジトリの名前。 -
IMAGE: Flex テンプレート コンテナ イメージの名前 -
TAG: Flex テンプレート コンテナ イメージのタグ -
<p
BASE_IMAGE: the base image to use. Specify one of the following:-
A predefined label, such as "JAVA17". For more information, see the documentation
for the
--flex-template-base-imageflag. -
The full
gcr.iopath to a specific container version, in the following format:gcr.io/dataflow-templates-base/IMAGE:TAG.
-
A predefined label, such as "JAVA17". For more information, see the documentation
for the
-
METADATA_FILE: メタファイル ファイルのローカルパス。詳細については、テンプレート メタデータをご覧ください。 -
JAR_FILE: パイプライン コードの JAR ファイルのローカルパス。複数の JAR ファイルがある場合は、カンマ区切りのリストとしてフォーマットするか、個別の--jarフラグで指定します。 -
JAVA_MAIN_CLASS: 実行する Java クラスの名前。詳細については、環境変数をご覧ください。
Python
gcloud dataflow flex-template build gs://BUCKET_NAME/TEMPLATE_FILE_NAME \ --image-gcr-path "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE:TAG" \ --sdk-language "PYTHON" \ --flex-template-base-image "BASE_IMAGE" \ --metadata-file "METADATA_FILE" \ --py-path "PYTHON_FILE_PATH" \ --env "FLEX_TEMPLATE_PYTHON_PY_FILE=PYTHON_FILE"
次のように置き換えます。
-
BUCKET_NAME: テンプレート仕様ファイルを保存する Cloud Storage バケットの名前 -
TEMPLATE_FILE_NAME: 作成するテンプレート仕様ファイルの名前。例:my_template.json -
LOCATION: Artifact Registry リポジトリのロケーション。 -
PROJECT_ID: Google Cloud プロジェクト ID -
REPOSITORY: Artifact Registry リポジトリの名前。 -
IMAGE: Flex テンプレート コンテナ イメージの名前 -
TAG: Flex テンプレート コンテナ イメージのタグ -
<p
BASE_IMAGE: the base image to use. Specify one of the following:-
A predefined label, such as "PYTHON3". For more information, see the documentation
for the
--flex-template-base-imageflag. -
The full
gcr.iopath to a specific container version, in the following format:gcr.io/dataflow-templates-base/IMAGE:TAG.
-
A predefined label, such as "PYTHON3". For more information, see the documentation
for the
-
METADATA_FILE: メタファイル ファイルのローカルパス。詳細については、テンプレート メタデータをご覧ください。 -
PYTHON_FILE_PATH: パイプラインの Python ファイルとそのすべての依存ファイルへのローカルパス。複数のパスは、カンマ区切りのリストまたは個別の--py-pathフラグとして指定できます。 -
PYTHON_FILE: 実行する Python ファイル。詳細については、環境変数をご覧ください。
Go
gcloud dataflow flex-template build gs://BUCKET_NAME/TEMPLATE_FILE_NAME \ --image-gcr-path "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE:TAG" \ --sdk-language "GO" \ --flex-template-base-image "BASE_IMAGE" \ --metadata-file "METADATA_FILE" \ --go-binary-path="GO_FILE_PATH" \ --env "FLEX_TEMPLATE_GO_BINARY=GO_BINARY"
次のように置き換えます。
-
BUCKET_NAME: テンプレート仕様ファイルを保存する Cloud Storage バケットの名前 -
TEMPLATE_FILE_NAME: 作成するテンプレート仕様ファイルの名前。例:my_template.json -
LOCATION: Artifact Registry リポジトリのロケーション。 -
PROJECT_ID: Google Cloud プロジェクト ID -
REPOSITORY: Artifact Registry リポジトリの名前。 -
IMAGE: Flex テンプレート コンテナ イメージの名前 -
TAG: Flex テンプレート コンテナ イメージのタグ -
<p
BASE_IMAGE: the base image to use. Specify one of the following:-
A predefined label, such as "GO". For more information, see the documentation
for the
--flex-template-base-imageflag. -
The full
gcr.iopath to a specific container version, in the following format:gcr.io/dataflow-templates-base/IMAGE:TAG.
-
A predefined label, such as "GO". For more information, see the documentation
for the
-
METADATA_FILE: メタファイル ファイルのローカルパス。詳細については、テンプレート メタデータをご覧ください。 -
GO_FILE_PATH: パイプライン用にコンパイルされた Go バイナリのローカルパス -
GO_BINARY: 実行する Go バイナリ。詳細については、環境変数をご覧ください。
カスタム イメージを使用する
カスタム コンテナ イメージを使用して Flex テンプレートを実行するには、次のコマンドを実行します。
Java
gcloud dataflow flex-template build gs://BUCKET_NAME/TEMPLATE_FILE_NAME \
--image "CUSTOM_IMAGE" \
--sdk-language "JAVA" \
--metadata-file "METADATA_FILE"
Python
gcloud dataflow flex-template build gs://BUCKET_NAME/TEMPLATE_FILE_NAME \
--image "CUSTOM_IMAGE" \
--sdk-language "PYTHON" \
--metadata-file "METADATA_FILE"
Go
gcloud dataflow flex-template build gs://BUCKET_NAME/TEMPLATE_FILE_NAME \
--image "CUSTOM_IMAGE" \
--sdk-language "GO" \
--metadata-file "METADATA_FILE"
次のように置き換えます。
BUCKET_NAME: テンプレート仕様ファイルを保存する Cloud Storage バケットの名前。TEMPLATE_FILE_NAME: テンプレート仕様ファイルの名前。例:my_template.jsonCUSTOM_IMAGE: カスタム イメージのイメージ レジストリのロケーション。METADATA_FILE: メタファイル ファイルのローカルパス。
Python のパッケージ依存関係
Dataflow Python パイプラインで追加の依存関係を使用する場合は、Dataflow ワーカー VM に追加の依存関係をインストールするように Flex テンプレートを構成する必要があります。
インターネットへのアクセスが制限される環境で Flex テンプレートを使用する Python Dataflow ジョブを実行する場合は、テンプレートの作成時に依存関係をパッケージ化しておく必要があります。
Python 依存関係を事前にパッケージ化するには、次のいずれかのオプションを使用します。
- 要件ファイルを使用してテンプレートと一緒に依存関係を事前にパッケージ化する。
- パイプラインをパッケージとして構造化し、ローカル パッケージを使用する
- すべての依存関係をプリインストールするカスタム コンテナを使用する
Java パイプラインと Go パイプラインでのパイプライン依存関係の管理手順については、Dataflow でパイプラインの依存関係を管理するをご覧ください。
要件ファイルを使用してテンプレートと一緒に依存関係を事前にパッケージ化する
独自の Dockerfile を使用して Flex テンプレート イメージを定義する場合は、次の操作を行います。
requirements.txtファイルを作成してパイプラインの依存関係のリストを記述します。COPY requirements.txt /template/ ENV FLEX_TEMPLATE_PYTHON_REQUIREMENTS_FILE="/template/requirements.txt"Flex テンプレート イメージに依存関係をインストールします。
RUN pip install --no-cache-dir -r $FLEX_TEMPLATE_PYTHON_REQUIREMENTS_FILE依存関係をローカル要件のキャッシュにダウンロードします。このキャッシュは、テンプレートの起動時に Dataflow ワーカーにステージングされます。
RUN pip download --no-cache-dir --dest /tmp/dataflow-requirements-cache -r $FLEX_TEMPLATE_PYTHON_REQUIREMENTS_FILE
この方法を使用すると、requirements.txt ファイルの依存関係が実行時に Dataflow ワーカーにインストールされます。 Google Cloud コンソールの [推奨事項] タブの分析情報に、この動作が記録される場合があります。実行時に依存関係がインストールされないようにするには、カスタム コンテナ イメージを使用します。
次のコードサンプルは、Flex テンプレートで要件ファイルを使用しています。
パイプラインをパッケージとして構造化し、ローカル パッケージを使用する
複数の Python ローカル ファイルまたはモジュールを使用する場合は、パイプラインをパッケージとして構造化します。ファイル構造は次の例のようになります。
main.py
pyproject.toml
setup.py
src/
my_package/
__init__.py
my_custom_dofns_and_transforms.py
my_pipeline_launcher.py
other_utils_and_helpers.py
最上位のエントリ ポイント(
main.pyファイルなど)をルート ディレクトリに配置します。残りのファイルをsrcディレクトリの別のフォルダ(my_packageなど)に配置します。パッケージの詳細と要件を含むパッケージ構成ファイルをルート ディレクトリに追加します。
pyproject.toml
[project] name = "my_package" version = "package_version" dependencies = [ # Add list of packages (and versions) that my_package depends on. # Example: "apache-beam[gcp]==2.54.0", ]setup.py
"""An optional setuptools configuration stub for the pipeline package. Use pyproject.toml to define the package. Add this file only if you must use the --setup_file pipeline option or the FLEX_TEMPLATE_PYTHON_SETUP_FILE configuration option. """ import setuptools setuptools.setup()ローカル パッケージを構成する方法については、Python プロジェクトのパッケージ化をご覧ください。
パイプラインのローカル モジュールまたはファイルをインポートする場合は、インポートパスとして
my_packageパッケージ名を使用します。from my_package import word_count_transformパイプライン パッケージを Flex テンプレート イメージにインストールします。Flex テンプレートの Dockerfile には、次の例のような内容が含まれます。
Dockerfile
ENV FLEX_TEMPLATE_PYTHON_PY_FILE="${WORKDIR}/main.py" ENV FLEX_TEMPLATE_PYTHON_SETUP_FILE="${WORKDIR}/setup.py" # Copy pipeline, packages and requirements. WORKDIR ${WORKDIR} COPY main.py . COPY pyproject.toml . COPY setup.py . COPY src src # Install local package. RUN pip install -e .
この方法を使用すると、requirements.txt ファイルの依存関係が実行時に Dataflow ワーカーにインストールされます。 Google Cloud コンソールの [推奨事項] タブの分析情報に、この動作が記録される場合があります。実行時に依存関係がインストールされないようにするには、カスタム コンテナ イメージを使用します。
この推奨方法に従った例については、GitHub の依存関係のあるパイプラインとカスタム コンテナ イメージの Flex テンプレートのチュートリアルをご覧ください。
すべての依存関係をプリインストールするカスタム コンテナを使用する
実行時に依存関係がインストールされないようにするには、カスタム コンテナを使用します。このオプションは、インターネットにアクセスできない環境で実行されるパイプラインに適しています。
カスタム コンテナを使用する手順は次のとおりです。
必要な依存関係をプリインストールするカスタム コンテナ イメージを作成します。
Flex テンプレートの Dockerfile に同じ依存関係をプリインストールします。
実行時に依存関係がインストールされないようにするには、Flex テンプレートの構成で
FLEX_TEMPLATE_PYTHON_REQUIREMENTS_FILEオプションまたはFLEX_TEMPLATE_PYTHON_SETUP_FILEオプションを使用しないでください。変更後の Flex テンプレート
Dockerfileは、次のようになります。FROM gcr.io/dataflow-templates-base/python3-template-launcher-base ENV FLEX_TEMPLATE_PYTHON_PY_FILE="/template/main.py" COPY . /template # If you use a requirements file, pre-install the requirements.txt. RUN pip install --no-cache-dir -r /template/requirements.txt # If you supply the pipeline in a package, pre-install the local package and its dependencies. RUN pip install -e /templateこのアプローチを使用する手順は次のとおりです。
- Flex テンプレート イメージをビルドする
- カスタム SDK コンテナ イメージをビルドする
- 両方のイメージに同じ依存関係をインストールする
また、維持するイメージの数を減らすため、カスタム コンテナ イメージを Flex テンプレートのベースイメージとして使用します。
Apache Beam SDK バージョン 2.49.0 以前を使用している場合は、パイプライン ランチャーに
--sdk_location=containerパイプライン オプションを追加します。このオプションは、SDK をダウンロードするのではなく、カスタム コンテナから SDK を使用するようにパイプラインに指示します。options = PipelineOptions(beam_args, save_main_session=True, streaming=True, sdk_location="container")flex-template runコマンドでsdk_container_imageパラメータを設定します。例:gcloud dataflow flex-template run $JOB_NAME \ --region=$REGION \ --template-file-gcs-location=$TEMPLATE_PATH \ --parameters=sdk_container_image=$CUSTOM_CONTAINER_IMAGE \ --additional-experiments=use_runner_v2詳細については、Dataflow でカスタム コンテナを使用するをご覧ください。
Flex テンプレートで非公開 Docker レジストリを使用する
非公開レジストリが HTTPS を使用し、有効な証明書があれば、非公開の Docker レジストリに保存されている Flex テンプレート イメージをビルドできます。
非公開レジストリのイメージを使用するには、イメージのパスと、レジストリのユーザー名とパスワードを指定します。ユーザー名とパスワードは Secret Manager に保存する必要があります。シークレットは次のいずれかの形式で指定できます。
projects/{project}/secrets/{secret}/versions/{secret_version}projects/{project}/secrets/{secret}
2 つ目の形式を使用する場合はバージョンが指定されないため、Dataflow は最新バージョンを使用します。
レジストリが自己署名証明書を使用している場合は、Cloud Storage の自己署名証明書へのパスも指定する必要があります。
次の表に、非公開レジストリの構成に使用できる gcloud CLI オプションを示します。
| パラメータ | 説明 |
|---|---|
image
|
レジストリのアドレス。例: gcp.repository.example.com:9082/registry/example/image:latest |
image-repository-username-secret-id
|
非公開レジストリで認証するユーザー名の Secret Manager のシークレット ID。例: projects/example-project/secrets/username-secret |
image-repository-password-secret-id
|
非公開レジストリで認証するパスワードの Secret Manager のシークレット ID。例: projects/example-project/secrets/password-secret/versions/latest |
image-repository-cert-path
|
非公開レジストリの自己署名証明書の完全な Cloud Storage URL。この値は、レジストリが自己署名証明書を使用する場合にのみ必要です。例: gs://example-bucket/self-signed.crt |
次の Google Cloud CLI コマンドの例では、自己署名証明書がある非公開レジストリ内のイメージを使用して Flex テンプレートを作成します。
gcloud dataflow flex-template build gs://example-bucket/custom-pipeline-private-repo.json --sdk-language=JAVA --image="gcp.repository.example.com:9082/registry/example/image:latest" --image-repository-username-secret-id="projects/example-project/secrets/username-secret" --image-repository-password-secret-id="projects/example-project/secrets/password-secret/versions/latest" --image-repository-cert-path="gs://example-bucket/self-signed.crt" --metadata-file=metadata.json
独自の Flex テンプレートをビルドするには、上記の例の値を置き換える必要があります。また、異なるオプションや追加のオプションの指定が必要になることもあります。
次のステップ
- Flex テンプレートを実行する方法を学習する。
- サンプル Flex テンプレートをビルドして実行する。
- Dataflow テンプレートで、クラシック テンプレート、Flex テンプレート、そのユースケース シナリオの詳細を確認する。
- Flex テンプレートのトラブルシューティングで、Flex テンプレートのトラブルシューティング情報を確認する。
- Cloud アーキテクチャ センターで、リファレンス アーキテクチャ、図、ベスト プラクティスを確認する。