このドキュメントでは、Dataflow ジョブの実行時にネットワーク、サブネットワーク、またはその両方を指定する方法について説明します。
このドキュメントは、Google Cloud ネットワークとサブネットワークの作成方法を理解していることを前提としています。また、次のセクションで説明するネットワークの用語についても理解しておく必要があります。
default
ネットワークには、Dataflow ジョブの実行を許可する構成が含まれています。ただし、他のサービスもこのネットワークを使用する場合があります。default
ネットワークに対する変更が、すべてのサービスと互換性があることを確認してください。あるいは、Dataflow 用に別のネットワークを作成してください。
ネットワーキングの問題のトラブルシューティング方法の詳細については、Dataflow のネットワーキングに関する問題のトラブルシューティングをご覧ください。
Google Cloud ネットワークの用語
VPC ネットワーク。VPC ネットワークは、Google の本番環境ネットワーク内に仮想的に実装された物理ネットワークです。ネットワークと呼ばれることもあり、VPC は、プロジェクト内のリソースを接続します。
VPC の詳細については、VPC ネットワークの概要をご覧ください。
共有 VPC ネットワーク。共有 VPC を使用する場合は、1 つのプロジェクトをホスト プロジェクトとして指定して、そのホスト プロジェクトに他のサービス プロジェクトを接続します。ホスト プロジェクトの VPC ネットワークは、共有 VPC ネットワークと呼ばれます。共有 VPC 管理者からサービス プロジェクト管理者として指定されているユーザーには、少なくともホスト プロジェクトのネットワーク内にあるサブネットワークの一部を使用する権限があります。
共有 VPC の詳細については、共有 VPC の概要をご覧ください。
VPC Service Controls。Dataflow VPC Service Controls は、外部エンティティや内部エンティティによる意図しない操作や標的型の攻撃から保護します。これにより、不正なデータの引き出しリスクを最小限に抑えることができます。VPC Service Controls を使用すると、明示的に指定したサービスのリソースとデータを保護する境界を作成できます。
VPC Service Controls の詳細については、VPC Service Controls の概要をご覧ください。VPC Service Controls で Dataflow を使用する場合の制限事項については、サポートされているプロダクトと制限事項をご覧ください。
ファイアウォール ルール。ファイアウォール ルールを使用して、VM を送信先または送信元とするトラフィックを許可または拒否します。詳細については、インターネット アクセスとファイアウォール ルールを構成するをご覧ください。
Dataflow ジョブのネットワークとサブネットワーク
Dataflow ジョブを作成するときに、ネットワーク、サブネットワーク、またはその両方を指定できます。
次のガイドラインを参考にしてください。
どちらのパラメータを使用するかを判断できない場合は、サブネットワーク パラメータだけを指定してください。ネットワーク パラメータは暗黙的に指定されます。
サブネットワークとネットワークのどちらのパラメータも指定しない場合、Google Cloud では
default
という名前の自動モード VPC ネットワークの使用が想定されます。 プロジェクトにdefault
という名前のネットワークがない場合は、代替のネットワークまたはサブネットワークを指定する必要があります。
ネットワーク パラメータを指定するためのガイドライン
ネットワーク パラメータを使用すると、プロジェクト内の自動モード VPC ネットワークを選択できます。
完全な URL ではなく、名前のみを使用してネットワークを指定できます。
また、次の条件が両方とも該当すれば、ネットワーク パラメータを使用して共有 VPC ネットワークを選択できます。
選択した共有 VPC ネットワークが自動モードの VPC ネットワークである。
共有 VPC ホスト プロジェクト全体に対するプロジェクト レベルの権限を持つサービス プロジェクト管理者である。共有 VPC 管理者からホスト プロジェクト全体に対する Compute ネットワーク ユーザーのロールを与えられているので、ホスト プロジェクトのすべてのネットワークとサブネットワークを使用できます。
それ以外の場合はサブネットワークを指定する必要があります。
サブネットワーク パラメータを指定するためのガイドライン
サブネットワークを指定すると、ネットワークは自動的に選択されます。そのため、サブネットワークを指定した場合は、ネットワーク パラメータを省略できます。
ネットワーク内の特定のサブネットワークを選択するには、subnetwork パラメータを使用します。
サブネットワークを指定するには、URL 全体または短縮形のパスを指定します。 サブネットワークが共有 VPC ネットワーク内にある場合は、URL 全体を使用する必要があります。
Dataflow ワーカーを実行するゾーンと同じリージョンにあるサブネットワークを選択する必要があります。たとえば、subnetwork パラメータは次の状況で指定する必要があります。
指定するサブネットワークがカスタムモードの VPC ネットワークである。
共有 VPC ホスト プロジェクト内の特定のサブネットワークに対するサブネット レベルの権限を持つサービス プロジェクト管理者である。
サブネットワークのサイズは、使用可能な IP アドレスの数によってインスタンス数を制限するだけです。このサイズ設定は Dataflow VPC Service Controls のパフォーマンスに影響しません。
共有 VPC のサブネットワーク パラメータを指定するためのガイドライン
共有 VPC のサブネットワーク URL を指定する場合は、HOST_PROJECT_ID が VPC をホストしているプロジェクトであることを確認します。
サブネットワークが共有 VPC ネットワーク内にある場合は、URL 全体を使用する必要があります。サブネットワークを指定した完全な URL の例をご紹介します。
共有 VPC サブネットワークが Dataflow サービス アカウントと共有されていて、指定したサブネットに Compute ネットワーク ユーザーのロールが割り当てられていることを確認します。Compute ネットワーク ユーザーのロールは、ホスト プロジェクトの Dataflow サービス アカウントに割り当てる必要があります。
Google Cloud コンソールで、[共有 VPC] ページに移動します。
ホスト プロジェクトを選択します。
[個別のサブネットへのアクセス権] セクションで、サブネットを選択します。[サブネット レベルの権限] ペインに、このサブネットの権限が表示されます。VPC サブネットワークに Compute ネットワーク ユーザーのロールが割り当てられているかを確認できます。
権限を付与するには、[サブネット レベルの権限] ペインで [プリンシパルを追加] をクリックします。
ネットワークが共有されていない場合、ジョブを実行しようとすると、
Error: Message: Required 'compute.subnetworks.get' permission
というエラー メッセージが表示されます。詳細については、「Dataflow の権限のトラブルシューティング」の必要な compute.subnetworks.get 権限をご覧ください。
ネットワークとサブネットワークの仕様の例
サブネットワークを指定した完全な URL の例:
https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/REGION_NAME/subnetworks/SUBNETWORK_NAME
次のように置き換えます。
HOST_PROJECT_ID
: ホスト プロジェクト IDREGION_NAME
: Dataflow ジョブのリージョンSUBNETWORK_NAME
: Compute Engine サブネットワークの名前
次の URL の例では、ホスト プロジェクト ID が my-cloud-project
、リージョンが us-central1
、サブネットワーク名が mysubnetwork
です。
https://www.googleapis.com/compute/v1/projects/my-cloud-project/regions/us-central1/subnetworks/mysubnetwork
サブネットワークを指定した短い形式の例を以下に示します。
regions/REGION_NAME/subnetworks/SUBNETWORK_NAME
次のように置き換えます。
REGION_NAME
: Dataflow ジョブのリージョンSUBNETWORK_NAME
: Compute Engine サブネットワークの名前
ネットワークを指定してパイプラインを実行する
Google Cloud によって作成されたデフォルト ネットワーク以外のネットワークを使用する場合は、ほとんどの場合、サブネットワークを指定する必要があります。ネットワークは、指定したサブネットワークから自動的に推定されます。詳細については、このドキュメントのネットワーク パラメータを指定するためのガイドラインをご覧ください。
次の例は、コマンドラインまたは REST API を使用して、パイプラインを実行する方法を示しています。この例では、ネットワークを指定しています。
Java
mvn compile exec:java \ -Dexec.mainClass=INPUT_PATH \ -Dexec.args="--project=HOST_PROJECT_ID \ --stagingLocation=gs://STORAGE_BUCKET/staging/ \ --output=gs://STORAGE_BUCKET/output \ --region=REGION \ --runner=DataflowRunner \ --network=NETWORK_NAME"
Python
python -m INPUT_PATH \ --project HOST_PROJECT_ID \ --region=REGION \ --runner DataflowRunner \ --staging_location gs://STORAGE_BUCKET/staging \ --temp_location gs://STORAGE_BUCKET/temp \ --output gs://STORAGE_BUCKET/output \ --network NETWORK_NAME
Go
wordcount --project HOST_PROJECT_ID \ --region HOST_GCP_REGION \ --runner dataflow \ --staging_location gs://STORAGE_BUCKET/staging \ --temp_location gs://STORAGE_BUCKET/temp \ --input INPUT_PATH \ --output gs://STORAGE_BUCKET/output \ --network NETWORK_NAME
API
REST API を使用して Dataflow テンプレートを実行する場合は、network
と subnetwork
の一方または両方を environment
オブジェクトに追加します。
POST https://dataflow.googleapis.com/v1b3/projects/[YOUR_PROJECT_ID]/templates:launch?gcsPath=gs://dataflow-templates/wordcount/template_file
{
"jobName": "JOB_NAME",
"parameters": {
"inputFile" : "INPUT_PATH",
"output": "gs://STORAGE_BUCKET/output"
},
"environment": {
"tempLocation": "gs://STORAGE_BUCKET/temp",
"network": "NETWORK_NAME",
"zone": "us-central1-f"
}
}
次のように置き換えます。
JOB_NAME
: Dataflow ジョブの名前(API のみ)INPUT_PATH
: ソースのパスHOST_PROJECT_ID
: ホスト プロジェクト IDREGION
: Dataflow リージョン(us-central1
など)STORAGE_BUCKET
: ストレージ バケットNETWORK_NAME
: Compute Engine ネットワークの名前
サブネットワークを指定してパイプラインを実行する
共有 VPC ネットワーク内の特定のサブネットワークを使用する権限だけを持つサービス プロジェクト管理者は、その特定のサブネットワークを明示する subnetwork
パラメータを指定する必要があります。
次の例は、コマンドラインまたは REST API を使用して、パイプラインを実行する方法を示しています。この例では、サブネットワークを指定しています。ネットワークを指定することもできます。
Java
mvn compile exec:java \ -Dexec.mainClass=INPUT_PATH \ -Dexec.args="--project=HOST_PROJECT_ID \ --stagingLocation=gs://STORAGE_BUCKET/staging/ \ --output=gs://STORAGE_BUCKET/output \ --region=REGION \ --runner=DataflowRunner \ --subnetwork=https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK_NAME"
Python
python -m INPUT_PATH \ --project HOST_PROJECT_ID \ --region=REGION \ --runner DataflowRunner \ --staging_location gs://STORAGE_BUCKET/staging \ --temp_location gs://STORAGE_BUCKET/temp \ --output gs://STORAGE_BUCKET/output \ --subnetwork https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK_NAME
Go
wordcount --project HOST_PROJECT_ID \ --region HOST_GCP_REGION \ --runner dataflow \ --staging_location gs://STORAGE_BUCKET/staging \ --temp_location gs://STORAGE_BUCKET/temp \ --input INPUT_PATH \ --output gs://STORAGE_BUCKET/output \ --subnetwork https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK_NAME
API
REST API を使用して Dataflow テンプレートを実行する場合は、network
と subnetwork
の一方または両方を environment
オブジェクトに追加します。
POST https://dataflow.googleapis.com/v1b3/projects/[YOUR_PROJECT_ID]/templates:launch?gcsPath=gs://dataflow-templates/wordcount/template_file
{
"jobName": "JOB_NAME",
"parameters": {
"inputFile" : "INPUT_PATH",
"output": "gs://STORAGE_BUCKET/output"
},
"environment": {
"tempLocation": "gs://STORAGE_BUCKET/temp",
"subnetwork": "https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK_NAME",
"zone": "us-central1-f"
}
}
次のように置き換えます。
JOB_NAME
: Dataflow ジョブの名前(API のみ)INPUT_PATH
: ソースのパスHOST_PROJECT_ID
: ホスト プロジェクト IDREGION
: Dataflow リージョン(us-central1
など)STORAGE_BUCKET
: ストレージ バケットSUBNETWORK_NAME
: Compute Engine サブネットワークの名前
外部 IP アドレスをオフにする
外部 IP アドレスをオフにするには、インターネット アクセスとファイアウォール ルールを構成するをご覧ください。