指定網路和子網路

本文說明如何在執行 Dataflow 工作時,指定網路和/或子網路。

如要按照步驟操作,您必須瞭解如何建立 Google Cloud 網路和子網路。您也需要熟悉下一節討論的網路術語。

default 網路的設定允許執行 Dataflow 工作。但其他服務也可能會使用這個網路。請確保對 default 網路所做的任何變更都與所有服務相容。或者,您也可以為 Dataflow 建立獨立網路。

如要進一步瞭解如何排解網路問題,請參閱「排解 Dataflow 網路問題」。

Google Cloud 網路術語

  • 虛擬私有雲網路:虛擬私有雲網路是實體網路的虛擬版本,建構於 Google 的正式環境網路之內,虛擬私有雲有時稱為「網路」,可為專案中的資源提供連線。

    如要進一步瞭解虛擬私有雲,請參閱「虛擬私有雲網路」。

  • Shared VPC 網路:使用 Shared VPC 時,您必須先將其中一項專案指派為「主專案」,然後再另外附加一或多項「服務專案」。主專案中的虛擬私有雲網路稱為Shared VPC 網路。如果Shared VPC 管理員將您定義為服務專案管理員,您就有權使用主專案網路中的至少部分子網路。

    如要進一步瞭解 Shared VPC,請參閱「Shared VPC」。

  • VPC Service Controls。Dataflow VPC Service Controls 可防範外部或內部實體意外或蓄意採取行動,進而降低資料竊取風險。您可以使用 VPC Service Controls 建立 perimeter,保護您明確指定的服務資源和資料。

    如要進一步瞭解 VPC Service Controls,請參閱「VPC Service Controls 總覽」。如要瞭解搭配使用 Dataflow 與 VPC Service Controls 的限制,請參閱「支援的產品和限制」。

  • 防火牆規則。使用防火牆規則,允許或拒絕 VM 的往來流量。詳情請參閱「設定網路連線能力與防火牆規則」。

Dataflow 工作的網路和子網路

建立 Dataflow 工作時,您可以指定網路、子網路或兩者。

請參考下列指南:

  • 如果不確定要使用哪個參數,請僅指定子網路參數。系統會為您隱含指定網路參數。

  • 如果同時省略子網路和網路參數, Google Cloud 會假設您要使用名為 default 的自動模式虛擬私有雲網路。如果專案中沒有名為 default 的網路,則必須指定替代網路或子網路。

指定聯播網參數的規範

  • 如要選取專案中的自動模式虛擬私有雲網路,請使用網路參數。詳情請參閱「建立自動模式虛擬私有雲網路」。

  • 您可以只使用網路名稱來指定網路,而不必使用完整網址。

  • 只有在符合下列兩項條件時,才能使用網路參數選取 Shared VPC 網路:

    • 您選取的 Shared VPC 網路是自動模式虛擬私有雲網路。

    • 您是 Service Project Admin,具備整個 Shared VPC 主專案的專案層級權限。共用虛擬私有雲管理員已授予您整個主專案的 Compute 網路使用者角色,因此您可以使用該專案的所有網路和子網路。

  • 在其他情況下,您必須指定子網路。

指定子網路參數的指南

  • 如果您指定子網路,Dataflow 會為您選擇網路。因此,指定子網路時,可以省略網路參數。

  • 如要選取網路中的特定子網路,請使用子網路參數。

  • 使用完整網址或縮寫路徑指定子網路。如果子網路位於 Shared VPC 網路,須使用完整網址。

  • 您必須選取與 Dataflow worker 執行所在可用區位於相同區域的子網路。

  • 在下列情況下,您必須指定子網路參數:

    • 您指定的子網路位於自訂模式虛擬私有雲網路。

    • 您是服務專案管理員,具備 Shared VPC 主專案中特定子網路的子網路層級權限。

  • 可用的 IP 位址數量會限制可建立的 Dataflow worker 數量。舉例來說,如果子網路的 IPv4 範圍是 10.0.0.0/24,則可為 worker VM 提供 252 個可用 IP 位址。請確認 IP 位址空間夠大,足以容納預期的工作負載,包括水平自動調度資源。使用負載測試驗證假設。

指定 Shared VPC 子網路參數的指南

  • 指定 Shared VPC 的子網路網址時,請確認 HOST_PROJECT_ID 是託管虛擬私有雲的專案。

  • 如果子網路位於 Shared VPC 網路,須使用完整網址。請參閱指定子網路的完整網址範例。

  • 請確認 Shared VPC 子網路已與 Dataflow 服務帳戶共用,且已在指定子網路上指派 Compute 網路使用者角色。必須將 Compute 網路使用者角色指派給主專案中的 Dataflow 服務帳戶。

    1. 前往 Google Cloud 控制台的「Shared VPC」(共用虛擬私有雲) 頁面。

      前往「Shared VPC」(共用虛擬私有雲) 頁面

    2. 選取主專案。

    3. 在「Individual subnet access」(個別子網路存取權) 區段中,選取子網路。「Subnet level permissions」(子網路層級權限) 窗格會顯示這個子網路的權限。您可以查看虛擬私有雲子網路是否獲派 Compute 網路使用者角色。

    4. 如要授予權限,請在「Subnet level permissions」(子網路層級權限) 窗格中,按一下「Add principal」(新增主體)。

    如果網路未共用,當您嘗試執行工作時,系統會顯示下列錯誤訊息:Error: Message: Required 'compute.subnetworks.get' permission。詳情請參閱「排解 Dataflow 權限問題」中的「必要『compute.subnetworks.get』權限」一節。

網路和子網路規格範例

以下範例顯示指定子網路的完整網址:

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 子網路名稱

使用指定的網路執行管道

如要使用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

gcloud

gcloud dataflow jobs run JOB_NAME \
    --gcs-location=gs://STORAGE_BUCKET/templates/template_file \
    --region=REGION \
    --staging-location=gs://STORAGE_BUCKET/staging \
    --network=NETWORK_NAME \
    --parameters inputFile=INPUT_PATH,output=gs://STORAGE_BUCKET/output

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:主機專案 ID
  • REGION:Dataflow 區域,例如 us-central1
  • STORAGE_BUCKET:儲存空間 bucket
  • NETWORK_NAME:Compute Engine 網路的名稱

使用指定的子網路執行管道

如果您是服務專案管理員,且只有權限使用 Shared 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

gcloud

gcloud dataflow jobs run JOB_NAME \
    --gcs-location=gs://STORAGE_BUCKET/templates/template_file \
    --region=REGION \
    --staging-location=gs://STORAGE_BUCKET/staging \
    --subnetwork=https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK_NAME \
    --parameters inputFile=INPUT_PATH,output=gs://STORAGE_BUCKET/output

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:主機專案 ID
  • REGION:Dataflow 區域,例如 us-central1
  • STORAGE_BUCKET:儲存空間 bucket
  • SUBNETWORK_NAME:Compute Engine 子網路名稱

關閉外部 IP 位址

如要關閉外部 IP 位址,請參閱「設定網路連線能力與防火牆規則」。