指定网络和子网

本页面介绍如何在运行 Dataflow 作业时指定网络和子网。

VPC 和共享 VPC

VPC 网络(有时也简称为“网络”)可为项目中的资源提供连接。 如需详细了解 VPC 网络,请参阅 VPC 网络概览

共享 VPC 网络存在于组织内的单独项目(称为“宿主项目”)中。如果共享 VPC 管理员已将您定义为服务项目管理员,则您有权在宿主项目的网络中至少使用部分子网。如需了解共享 VPC 的背景信息,请参阅共享 VPC 概览

VPC Service Controls

Dataflow VPC Service Controls 可为您的流水线资源和服务提供额外的安全性。如需详细了解 VPC Service Controls,请参阅 VPC Service Controls 概览

如需详细了解将 Dataflow 与 VPC Service Controls 结合使用的限制,请参阅支持的产品和限制

指定网络和子网

创建 Dataflow 作业时,您可以指定网络或子网。以下部分描述了应在何时使用每个参数。

如果同时省略子网和网络参数,Google Cloud 会假定您打算使用名为 default自动模式 VPC 网络。如果同时省略子网和网络参数,但项目中没有名为 default 的网络,则会收到错误。

网络参数

您可以使用网络参数在项目中指定自动模式网络。

仅使用名称(而非完整的网址)指定网络。

如果同时满足以下两个条件,您还可以使用网络参数选择共享 VPC 网络:

  • 您选择的共享 VPC 网络是自动模式网络。
  • 您是服务项目管理员,对整个共享 VPC 宿主项目具有项目级权限。这意味着共享 VPC 管理员已授予您整个宿主项目的网络用户角色,因此您可以使用其所有网络和子网。

对于所有其他情况,您必须指定子网。

子网参数

如果需要在网络中选择特定子网,请指定 subnetwork 参数。您必须选择与运行 Dataflow 工作器的区域位于同一地区的子网。例如在以下情况下,您必须指定子网参数:

  • 您需要的子网位于自定义模式网络中。
  • 您是服务项目管理员,具有对共享 VPC 宿主项目中特定子网的子网级权限

您可以使用完整网址或缩写路径指定子网。 如果子网位于共享 VPC 网络中,则必须使用完整的网址。

  • 完整网址:
    https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK
  • 缩写形式:
    regions/REGION/subnetworks/SUBNETWORK

请替换以下内容:

  • HOST_PROJECT_ID:宿主项目 ID
  • REGION:您的 Dataflow 作业的地区端点
  • SUBNETWORK:您的 Compute Engine 子网的名称

如果指定 subnetwork,则 Dataflow 会为您选择 network。因此,在指定 subnetwork 时可以省略 network 参数。

子网大小仅根据可用 IP 地址数量限制实例数。此大小不会影响 Dataflow VPC Service Controls 的性能。

公共 IP 参数

公共 IP 参数告知 Dataflow 服务是否将公共 IP 地址分配给 Dataflow 工作器。默认情况下,Dataflow 服务为工作器分配公共和私有 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. 在 Dataflow 作业的参数中,指定 --usePublicIps=false--network=NETWORK--subnetwork=SUBNETWORK

PYTHON

要关闭公共 IP,请执行以下操作:

  1. 遵循 Apache Beam 流水线依赖项说明来暂存所有 Python 软件包依赖项。
  2. 为您的网络或子网启用专用 Google 访问通道
  3. 在 Dataflow 作业的参数中,指定 --no_use_public_ips--network=NETWORK--subnetwork=SUBNETWORK

共享 VPC

指定子网网址时,验证 HOST_PROJECT_ID 是托管 VPC 的项目。

此外,请确保 Dataflow 服务帐号控制器服务帐号均已被分配正在使用的子网的“Compute Network User”IAM 权限。

使用指定的网络和子网运行流水线

以下示例显示如何使用指定的 networksubnetwork 参数在 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 模板,请将 network 和/或 subnetwork 添加到 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"
    }
}