ネットワークとサブネットワークの指定

このページでは、Dataflow ジョブの実行時におけるネットワークとサブネットワークの指定方法について説明します。

VPC と共有 VPC

VPC ネットワーク(単にネットワークとも呼ぶこともあります)はプロジェクト内のリソースを接続します。VPC ネットワークの詳細については、VPC ネットワークの概要をご覧ください。

共有 VPC ネットワークは、組織内の個別のプロジェクト(ホスト プロジェクト)にあるネットワークです。共有 VPC 管理者からサービス プロジェクト管理者として指定されているユーザーには、ホスト プロジェクトのネットワーク内にあるサブネットワークの少なくとも一部を使用する権限が与えられます。共有 VPC の詳細については、共有 VPC の概要をご覧ください。

VPC Service Controls

Dataflow VPC Service Controls は、パイプラインのリソースとサービスのセキュリティを強化します。VPC Service Controls の詳細については、VPC Service Controls の概要をご覧ください。

VPC Service Controls とともに Dataflow を使用する際の制限事項については、サポートされているプロダクトと制限事項をご覧ください。

ネットワークとサブネットワークの指定

Dataflow ジョブを作成するときに、ネットワークかサブネットワークのいずれかを指定できます。この後のセクションで、それぞれのパラメータをどのような場合に使用するかを説明します。

サブネットワークとネットワークのどちらのパラメータも指定しない場合、Google Cloud では default という名前の自動モード VPC ネットワークの使用が想定されます。サブネットワークとネットワークのどちらのパラメータも指定しない場合、プロジェクトに default というネットワークが存在しないとエラーが発生します。

ネットワーク パラメータ

ネットワーク パラメータを使用すると、プロジェクト内に自動モードのネットワークを指定できます。

また、次の条件が両方とも該当すれば、ネットワーク パラメータを使用して共有 VPC ネットワークを選択できます。

  • 選択する共有 VPC ネットワークが、自動モードのネットワークである。
  • 共有 VPC ホスト プロジェクト全体に対するプロジェクト レベルの権限を持つサービス プロジェクト管理者である。つまり、共有 VPC 管理者からホスト プロジェクト全体に対するネットワーク ユーザーのロールを与えられているので、ホスト プロジェクトのすべてのネットワークとサブネットワークを使用できる立場にある。

それ以外の場合はサブネットワークを指定する必要があります

サブネットワーク パラメータ

ネットワーク内の特定のサブネットワークを選択する必要がある場合は、subnetwork パラメータを指定します。Dataflow ジョブを実行するゾーンと同じリージョンにあるサブネットワークを必ず選択してください。たとえば、サブネットワーク パラメータは次の状況で指定する必要があります。

  • 選択するサブネットワークがカスタムモードのネットワークである。
  • 共有 VPC ホスト プロジェクト内の特定のサブネットワークに対するサブネット レベルの権限を持つサービス プロジェクト管理者である。

サブネットワークを指定するには、URL 全体または短縮形のパスを指定します。サブネットワークが共有 VPC ネットワーク内にある場合は、URL 全体を使用する必要があります。

  • URL 全体を指定する場合:
    https://www.googleapis.com/compute/v1/projects/<HOST_PROJECT_ID>/regions/<REGION>/subnetworks/<SUBNETWORK>
  • 短縮形を指定する場合:
    regions/<REGION>/subnetworks/<SUBNETWORK>

subnetwork を指定すると、network は自動的に選択されます。そのため、subnetwork を指定した場合は network パラメータを省略できます。

パブリック IP パラメータ

パブリック IP パラメータは、パブリック IP アドレスを Dataflow ワーカーに割り当てるかどうかを Dataflow サービスに指示します。デフォルトでは、Dataflow サービスは、パブリック IP アドレスとプライベート IP アドレスの両方をワーカーに割り当てます。パブリック IP アドレスをオフにすると、Dataflow パイプラインは次の場所のリソースにのみアクセスできます。

パブリック IP をオフにしても、引き続き管理タスクとモニタリング タスクを実行できます。上記のリストに記載されたオプションで SSH を使用することによって、ワーカーにアクセスできます。ただし、パイプラインはインターネットやその他の Google Cloud ネットワークにアクセスできず、インターネット ホストは Dataflow ワーカーにアクセスできません。

パブリック IP をオフにすると、データ処理インフラストラクチャのセキュリティを強化できます。Dataflow ワーカーにパブリック IP アドレスを使用しないことで、Google Cloud プロジェクトの割り当てに対して消費されるパブリック IP アドレスの数も削減できます。

パブリック IP をオフにすると、Dataflow ジョブはインターネット アクセスを必要とする Google Cloud の外部の API やサービスにアクセスできなくなります。プライベート IP を使用するジョブのインターネット アクセスを設定する方法については、Dataflow のインターネット アクセスをご覧ください。

Java

パブリック IP をオフにするには:

  1. ネットワークまたはサブネットワークで限定公開の Google アクセスを有効にします。
  2. Cloud Dataflow ジョブのパラメータに、--usePublicIps=false--network=[NETWORK] または --subnetwork=[SUBNETWORK] を指定します。

Python

パブリック IP をオフにするには:

  1. Apache Beam パイプラインの依存関係に関する指示に従って、すべての Python パッケージの依存関係をステージングします。
  2. ネットワークまたはサブネットワークで限定公開の Google アクセスを有効にします。
  3. Cloud Dataflow ジョブのパラメータに、--no_use_public_ips--network=[NETWORK] または --subnetwork=[SUBNETWORK] を指定します。

ネットワークとサブネットワークを指定してパイプラインを実行する

次の例は、network パラメータと subnetwork パラメータを指定して Dataflow サービスでパイプラインを実行する方法を示しています。

共有 VPC ネットワーク内の特定のサブネットワークを使用する権限だけを持つサービス プロジェクト管理者は、その特定のサブネットワークを明示する subnetwork パラメータを指定する必要があります。

コマンドラインの使用

次の例は、コマンドラインからサブネットワークを指定してパイプラインを実行する方法を示しています。サブネットワークを指定すると、ネットワークが暗黙的に指定されます。

Java

mvn compile exec:java \
  -Dexec.mainClass=com.example.WordCount \
  -Dexec.args="--project=my-cloud-project \
    --stagingLocation=gs://my-wordcount-storage-bucket/staging/ \
    --output=gs://my-wordcount-storage-bucket/output \
    --runner=DataflowRunner \
    --subnetwork=https://www.googleapis.com/compute/v1/projects/my-cloud-project/regions/us-central1/subnetworks/mysubnetwork"

Python

python -m apache_beam.examples.wordcount \
  --project my-cloud-project \
  --runner DataflowRunner \
  --staging_location gs://my-wordcount-storage-bucket/staging \
  --temp_location gs://my-wordcount-storage-bucket/temp \
  --output gs://my-wordcount-storage-bucket/output \
  --subnetwork https://www.googleapis.com/compute/v1/projects/my-cloud-project/regions/us-central1/subnetworks/mysubnetwork"

REST API の使用

次の例は、テンプレートを実行し、サブネットワークを指定する方法を示しています。 サブネットワークを指定すると、ネットワークが暗黙的に指定されます。

REST API を使用して Dataflow テンプレートを実行する場合は、networksubnetwork の一方または両方を environment オブジェクトに追加します。例:

POST https://dataflow.googleapis.com/v1b3/projects/[YOUR_PROJECT_ID]/templates:launch?gcsPath=gs://dataflow-templates/wordcount/template_file
{
    "jobName": "my_job",
    "parameters": {
       "inputFile" : "gs://dataflow-samples/shakespeare/kinglear.txt",
       "output": "gs://my-wordcount-storage-bucket/output"
    },
    "environment": {
       "tempLocation": "gs://my-wordcount-storage-bucket/temp",
       "subnetwork": "https://www.googleapis.com/compute/v1/projects/my-cloud-project/regions/us-central1/subnetworks/mysubnetwork",
       "zone": "us-central1-f"
    }
}