Dataflow Flex テンプレートを使用すると、Dataflow パイプラインをデプロイ用にパッケージ化できます。このチュートリアルでは、Dataflow Flex テンプレートを作成し、そのテンプレートを使用して Dataflow ジョブを実行する方法について説明します。
目標
- Dataflow Flex テンプレートを作成する。
- テンプレートを使用して Dataflow ジョブを実行する。
費用
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
始める前に
- Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
- Google Cloud CLI をインストールします。
-
gcloud CLI を初期化するには:
gcloud init
-
Google Cloud プロジェクトを作成または選択します。
-
Google Cloud プロジェクトを作成します。
gcloud projects create PROJECT_ID
PROJECT_ID
は、作成する Google Cloud プロジェクトの名前に置き換えます。 -
作成した Google Cloud プロジェクトを選択します。
gcloud config set project PROJECT_ID
PROJECT_ID
は、実際の Google Cloud プロジェクト名に置き換えます。
-
-
Dataflow, Compute Engine, Logging, Cloud Storage, Cloud Storage JSON, Resource Manager, Artifact Registry, and Cloud Build API を有効にします。
gcloud services enable dataflow compute_component logging storage_component storage_api cloudresourcemanager.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com
-
Google アカウントのローカル認証情報を作成します。
gcloud auth application-default login
-
Google アカウントにロールを付与します。次の IAM ロールごとに次のコマンドを 1 回実行します。
roles/iam.serviceAccountUser
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
PROJECT_ID
は、実際のプロジェクト ID に置き換えます。EMAIL_ADDRESS
は実際のメールアドレスに置き換えます。ROLE
は、個々のロールに置き換えます。
- Google Cloud CLI をインストールします。
-
gcloud CLI を初期化するには:
gcloud init
-
Google Cloud プロジェクトを作成または選択します。
-
Google Cloud プロジェクトを作成します。
gcloud projects create PROJECT_ID
PROJECT_ID
は、作成する Google Cloud プロジェクトの名前に置き換えます。 -
作成した Google Cloud プロジェクトを選択します。
gcloud config set project PROJECT_ID
PROJECT_ID
は、実際の Google Cloud プロジェクト名に置き換えます。
-
-
Dataflow, Compute Engine, Logging, Cloud Storage, Cloud Storage JSON, Resource Manager, Artifact Registry, and Cloud Build API を有効にします。
gcloud services enable dataflow compute_component logging storage_component storage_api cloudresourcemanager.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com
-
Google アカウントのローカル認証情報を作成します。
gcloud auth application-default login
-
Google アカウントにロールを付与します。次の IAM ロールごとに次のコマンドを 1 回実行します。
roles/iam.serviceAccountUser
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
PROJECT_ID
は、実際のプロジェクト ID に置き換えます。EMAIL_ADDRESS
は実際のメールアドレスに置き換えます。ROLE
は、個々のロールに置き換えます。
Compute Engine のデフォルト サービス アカウントにロールを付与します。次の IAM ロールごとに次のコマンドを 1 回実行します。
roles/dataflow.admin
roles/dataflow.worker
roles/storage.objectAdmin
roles/artifactregistry.reader
gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" --role=SERVICE_ACCOUNT_ROLE
次のように置き換えます。
PROJECT_ID
: プロジェクト IDPROJECT_NUMBER
: プロジェクトの番号SERVICE_ACCOUNT_ROLE
: 個々のロール
環境を準備する
SDK と開発環境のすべての要件をインストールします。
Java
Java Development Kit(JDK)バージョン 11 をダウンロードしてインストールします
JAVA_HOME
環境変数が設定され、ご使用の JDK インストールをポイントしていることを確認します。ご使用のオペレーティング システムに対応した Maven のインストール ガイドに従って、Apache Maven のダウンロードとインストールを行います。
Python
Apache Beam SDK for Python をインストールします。
Go
Go のダウンロードとインストール ガイドに従って、ご使用のオペレーティング システム用の Go をダウンロードしてインストールします。Apache Beam でサポートされている Go ランタイム環境については、Apache Beam ランタイム サポートをご覧ください。
コードサンプルをダウンロードします。
Java
java-docs-samples
リポジトリのクローンを作成します。git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
このチュートリアルのコードサンプルに移動します。
cd java-docs-samples/dataflow/flex-templates/getting_started
Java プロジェクトから Uber JAR ファイルをビルドします。
mvn clean package
この Uber JAR ファイルにはすべての依存関係が含まれます。このファイルは、他のライブラリで外部依存関係のないスタンドアロン アプリケーションとして実行できます。
Python
python-docs-samples
リポジトリのクローンを作成します。git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
このチュートリアルのコードサンプルに移動します。
cd python-docs-samples/dataflow/flex-templates/getting_started
Go
golang-samples
リポジトリのクローンを作成します。git clone https://github.com/GoogleCloudPlatform/golang-samples.git
このチュートリアルのコードサンプルに移動します。
cd golang-samples/dataflow/flex-templates/wordcount
Go バイナリをコンパイルします。
GOOS=linux GOARCH=amd64 go build -o wordcount .
Cloud Storage バケットを作成する
Cloud Storage バケットの作成には、gcloud storage buckets create
コマンドを使用します。
gcloud storage buckets create gs://BUCKET_NAME
BUCKET_NAME
は、Cloud Storage バケットの名前に置き換えます。Cloud Storage バケット名はグローバルに一意であり、バケットの命名要件を満たしている必要があります。
Artifact Registry リポジトリを作成する
テンプレートの Docker コンテナ イメージを push する Artifact Registry リポジトリを作成します。
gcloud artifacts repositories create
コマンドを使用して、新しい Artifact Registry リポジトリを作成します。gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=LOCATION
次のように置き換えます。
- REPOSITORY: リポジトリの名前。リポジトリ名は、プロジェクト内のリポジトリのロケーションごとに一意である必要があります。
- LOCATION: リポジトリのリージョンまたはマルチリージョンのロケーション。
gcloud auth configure-docker
コマンドを使用して、Artifact Registry のリクエストを認証するように Docker を構成します。このコマンドを実行すると、Docker の構成が更新され、Artifact Registry に接続してイメージを push できるようになります。gcloud auth configure-docker LOCATION-docker.pkg.dev
Flex テンプレートでは、非公開レジストリに保存されているイメージも使用できます。詳細については、非公開レジストリのイメージを使用するをご覧ください。
Flex テンプレートを作成する
このステップでは、gcloud dataflow flex-template build
コマンドを使用して Flex テンプレートを作成します。
Flex テンプレートは、次のコンポーネントで構成されています。
- パイプライン コードをパッケージ化する Docker コンテナ イメージ。
テンプレート仕様ファイル。このファイルは、コンテナ イメージの場所とテンプレートに関するメタデータ(パイプライン パラメータなど)を含む JSON ドキュメントです。
Java
gcloud dataflow flex-template build gs://BUCKET_NAME/getting_started-java.json \ --image-gcr-path "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/getting-started-java:latest" \ --sdk-language "JAVA" \ --flex-template-base-image JAVA11 \ --metadata-file "metadata.json" \ --jar "target/flex-template-getting-started-1.0.jar" \ --env FLEX_TEMPLATE_JAVA_MAIN_CLASS="com.example.dataflow.FlexTemplateGettingStarted"
次のように置き換えます。
- BUCKET_NAME: 前に作成した Cloud Storage バケットの名前
- LOCATION: ロケーション
- PROJECT_ID: Google Cloud プロジェクト ID
- REPOSITORY: 前に作成した Artifact Registry リポジトリの名前
Python
gcloud dataflow flex-template build gs://BUCKET_NAME/getting_started-py.json \ --image-gcr-path "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/getting-started-python:latest" \ --sdk-language "PYTHON" \ --flex-template-base-image "PYTHON3" \ --metadata-file "metadata.json" \ --py-path "." \ --env "FLEX_TEMPLATE_PYTHON_PY_FILE=getting_started.py" \ --env "FLEX_TEMPLATE_PYTHON_REQUIREMENTS_FILE=requirements.txt"
次のように置き換えます。
- BUCKET_NAME: 前に作成した Cloud Storage バケットの名前
- LOCATION: ロケーション
- PROJECT_ID: Google Cloud プロジェクト ID
- REPOSITORY: 前に作成した Artifact Registry リポジトリの名前
Go
gcloud builds submit
コマンドを使用して、Cloud Build で Dockerfile を使用して Docker イメージをビルドします。このコマンドは、ファイルをビルドして Artifact Registry リポジトリに push します。gcloud builds submit --tag LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/dataflow/wordcount-go:latest .
次のように置き換えます。
- LOCATION: ロケーション
- PROJECT_ID: Google Cloud プロジェクト ID
- REPOSITORY: 前に作成した Artifact Registry リポジトリの名前
gcloud dataflow flex-template build
コマンドを使用して、Cloud Storage バケット内にwordcount-go.json
という名前の Flex テンプレートを作成します。gcloud dataflow flex-template build gs://BUCKET_NAME/samples/dataflow/templates/wordcount-go.json \ --image "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/dataflow/wordcount-go:latest" \ --sdk-language "GO" \ --metadata-file "metadata.json"
BUCKET_NAME は、前に作成した Cloud Storage バケットの名前に置き換えます。
Flex テンプレートを実行する
このステップでは、テンプレートを使用して Dataflow ジョブを実行します。
Java
gcloud dataflow flex-template run
コマンドを使用して、Flex テンプレートを使用する Dataflow ジョブを実行します。gcloud dataflow flex-template run "getting-started-`date +%Y%m%d-%H%M%S`" \ --template-file-gcs-location "gs://BUCKET_NAME/getting_started-java.json" \ --parameters output="gs://BUCKET_NAME/output-" \ --region "REGION"
次のように置き換えます。
- BUCKET_NAME: 前に作成した Cloud Storage バケットの名前
- REGION: リージョン
Google Cloud コンソールで Dataflow ジョブのステータスを確認するには、Dataflow の [ジョブ] ページに移動します。
ジョブが正常に実行されると、Cloud Storage バケット内の gs://BUCKET_NAME/output--00000-of-00001.txt
という名前のファイルに出力が書き込まれます。
Python
gcloud dataflow flex-template run
コマンドを使用して、Flex テンプレートを使用する Dataflow ジョブを実行します。gcloud dataflow flex-template run "getting-started-`date +%Y%m%d-%H%M%S`" \ --template-file-gcs-location "gs://BUCKET_NAME/getting_started-py.json" \ --parameters output="gs://BUCKET_NAME/output-" \ --region "REGION"
次のように置き換えます。
- BUCKET_NAME: 前に作成した Cloud Storage バケットの名前
- REGION: リージョン
Google Cloud コンソールで Dataflow ジョブのステータスを確認するには、Dataflow の [ジョブ] ページに移動します。
ジョブが正常に実行されると、Cloud Storage バケット内の gs://BUCKET_NAME/output--00000-of-00001.txt
という名前のファイルに出力が書き込まれます。
Go
gcloud dataflow flex-template run
コマンドを使用して、Flex テンプレートを使用する Dataflow ジョブを実行します。gcloud dataflow flex-template run "wordcount-go-`date +%Y%m%d-%H%M%S`" \ --template-file-gcs-location "gs://BUCKET_NAME/samples/dataflow/templates/wordcount-go.json" \ --parameters output="gs://BUCKET_NAME/samples/dataflow/templates/counts.txt" \ --region "REGION"
次のように置き換えます。
- BUCKET_NAME: 前に作成した Cloud Storage バケットの名前
- REGION: リージョン
Google Cloud コンソールで Dataflow ジョブのステータスを確認するには、Dataflow の [ジョブ] ページに移動します。
ジョブが正常に実行されると、Cloud Storage バケット内の gs://BUCKET_NAME/samples/dataflow/templates/count.txt
という名前のファイルに出力が書き込まれます。
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
プロジェクトの削除
Google Cloud プロジェクトを削除します。
gcloud projects delete PROJECT_ID
リソースを個別に削除する
-
Cloud Storage バケットとバケット内のすべてのオブジェクトを削除します。
gcloud storage rm gs://BUCKET_NAME --recursive
-
Artifact Registry リポジトリを削除します。
gcloud artifacts repositories delete REPOSITORY \ --location=LOCATION
-
Compute Engine のデフォルト サービス アカウントに付与したロールを取り消します。次の IAM ロールごとに次のコマンドを 1 回実行します。
roles/dataflow.admin
roles/dataflow.worker
roles/storage.objectAdmin
roles/artifactregistry.reader
gcloud projects remove-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=SERVICE_ACCOUNT_ROLE
-
作成した認証情報を取り消して、ローカル認証情報ファイルを削除します。
gcloud auth application-default revoke
-
(省略可)gcloud CLI から認証情報を取り消します。
gcloud auth revoke
次のステップ
- Flex テンプレートの構成方法を学習する。
- Google 提供のテンプレートのリストを確認する。