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

このドキュメントでは、Dataflow ジョブの実行時にネットワーク、サブネットワーク、またはその両方を指定する方法について説明します。

このドキュメントは、Google Cloud ネットワークとサブネットワークの作成方法を理解していることを前提としています。また、次のセクションで説明するネットワークの用語についても理解しておく必要があります。

default ネットワークには、Dataflow ジョブの実行を許可する構成が含まれています。ただし、他のサービスもこのネットワークを使用する場合があります。default ネットワークに対する変更が、すべてのサービスと互換性があることを確認してください。あるいは、Dataflow 用に別のネットワークを作成してください。

ネットワーキングの問題のトラブルシューティング方法の詳細については、Dataflow のネットワーキングに関する問題のトラブルシューティングをご覧ください。

Google Cloud ネットワークの用語

  • 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 ジョブのネットワークとサブネットワーク

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 全体を使用する必要があります。

  • 共有 VPC サブネットワークが Dataflow サービス アカウントと共有されていて、指定したサブネットに Compute ネットワーク ユーザーのロールが割り当てられていることを確認します。 Compute ネットワーク ユーザーのロールは、ホスト プロジェクトの Dataflow サービス アカウントに割り当てる必要があります。

    • Google Cloud コンソールで [共有 VPC] ページに移動し、サブネットを検索します。[共有者] 列で、VPC サブネットワークが Dataflow サービス アカウントと共有されているかどうかを確認できます。
    • ネットワークが共有されていない場合は、「Error: Message: Required 'compute.subnetworks.get' permission」というエラー メッセージが表示されます。

ネットワークとサブネットワークの仕様の例

サブネットワークを指定した完全な URL の例:

https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/REGION_NAME/subnetworks/SUBNETWORK_NAME

次のように置き換えます。

  • HOST_PROJECT_ID: ホスト プロジェクト ID
  • REGION_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 テンプレートを実行する場合は、networksubnetwork の一方または両方を 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: ホスト プロジェクト ID
  • REGION: 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 テンプレートを実行する場合は、networksubnetwork の一方または両方を 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: ホスト プロジェクト ID
  • REGION: Dataflow リージョンus-central1 など)
  • STORAGE_BUCKET: ストレージ バケット
  • SUBNETWORK_NAME: Compute Engine サブネットワークの名前

外部 IP アドレスをオフにする

外部 IP アドレスをオフにするには、インターネット アクセスとファイアウォール ルールを構成するをご覧ください。