指定网络和子网

本文档介绍如何在运行 Dataflow 作业时指定网络和/或子网选项。

本文档要求您了解如何创建 Google Cloud 网络和子网。本文档还要求您熟悉下一部分中介绍的网络术语。

Google Cloud 网络术语

  • VPC 网络。VPC 网络(有时称为“网络”)可为项目中的资源提供连接。

    如需详细了解 VPC,请参阅 VPC 网络概览

  • 共享 VPC 网络。共享 VPC 网络存在于组织内的单独项目(称为“宿主项目”)中。如果 Shared VPC Admin 已将您定义为Service Project Admin,则您有权在宿主项目的网络中至少使用部分子网。

    如需详细了解共享 VPC,请参阅共享 VPC 概览

  • VPC Service Controls。 Dataflow VPC Service Controls 有助于保护流水线的资源和服务。

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

Dataflow 作业的网络和子网

创建 Dataflow 作业时,您可以指定网络和/或子网选项。

请考虑以下准则:

  • 如果您不确定要使用哪个参数,请仅指定子网参数。然后,系统会隐式为您指定网络参数。

  • 如果同时省略子网和网络参数,Google Cloud 会假定您打算使用名为 default自动模式 VPC 网络

  • 如果同时省略子网和网络参数,但项目中没有名为 default 的网络,则会收到错误。

指定网络参数的准则

  • 您可以使用网络参数在项目中选择自动模式网络。

  • 您只能使用网络的名称来指定网络,而不能使用完整的网址。

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

    • 您选择的共享 VPC 网络是自动模式网络。

    • 您是 Service Project Admin,对整个共享 VPC 宿主项目具有项目级权限。这意味着共享 VPC 管理员已授予您整个宿主项目的 Compute Network User 角色,因此您可以使用其所有网络和子网。

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

指定子网参数的准则

  • 如果指定子网,则 Dataflow 会为您选择网络。因此,在指定子网时可以省略网络参数。

  • 如需在网络中选择特定子网,请使用子网参数。

  • 使用完整网址或缩写路径指定子网。

  • 必须选择与在其中运行 Dataflow 工作器的可用区位于同一区域的子网。例如在以下情况下,您必须指定子网参数:

    • 您指定的子网位于自定义模式网络中。

    • 您是服务项目管理员,具有对共享 VPC 宿主项目中特定子网的子网级权限

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

为共享 VPC 指定子网参数的准则

  • 为共享 VPC 指定子网网址时,请确保 HOST_PROJECT_ID 是在其中托管 VPC 的项目。

  • 如果子网位于共享 VPC 网络中,则必须使用完整的网址。

  • 确保 Dataflow 服务帐号工作器服务帐号均已在指定子网上分配 Compute Network User 角色。如果您未启用该角色,则会显示以下错误消息:Error: Message: Required 'compute.subnetworks.get' permission

网络和子网规范示例

指定子网的完整网址示例:

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 子网的名称

以下是一个示例网址,其中宿主项目 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 子网的名称

使用指定的 networksubnetwork 运行流水线

如果您是服务项目管理员并且仅有权使用共享 VPC 网络中的特定子网,则必须使用您有权使用的子网指定 subnetwork 参数。

以下示例展示了如何从命令行或使用 REST API 运行流水线。该示例指定了子网。您还可以指定网络。

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

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"
    }
}

关闭外部 IP 地址

如需关闭外部 IP 地址,请参阅配置互联网访问权限和防火墙规则