在 Dataflow 中執行 Flex 範本

本頁說明如何使用彈性範本執行 Dataflow 工作。您可以透過 Flex 範本封裝 Dataflow 管道,這樣一來,即使沒有 Apache Beam 開發環境,也能執行管道。

所需權限

執行 Flex 範本時,Dataflow 會為您建立工作。如要建立工作,Dataflow 服務帳戶必須具備下列權限:

  • dataflow.serviceAgent

首次使用 Dataflow 時,服務會為您指派這個角色,因此您不需要授予這項權限。

根據預設,啟動器 VM 和工作站 VM 會使用 Compute Engine 服務帳戶。這個服務帳戶必須擁有以下角色和權限:

  • Storage 物件管理員 (roles/storage.objectAdmin)
  • 檢視者 (roles/viewer)
  • Dataflow 工作者 (roles/dataflow.worker)
  • 暫存值區的讀寫權限
  • 具備 Flex 範本映像檔的讀取權限

如要授予暫存值區的讀取和寫入權限,可以使用「Storage Object Admin」(儲存空間物件管理員) 角色 (roles/storage.objectAdmin)。詳情請參閱 Cloud Storage 的 IAM 角色

如要授予 Flex 範本映像檔的讀取權,可以使用「Storage 物件檢視者」角色 (roles/storage.objectViewer)。詳情請參閱「設定存取權控管」。

執行 Flex 範本

如要執行 Flex 範本,請使用 gcloud dataflow flex-template run 指令:

gcloud dataflow flex-template run JOB_ID \
  --template-file-gcs-location gs://TEMPLATE_FILE_LOCATION \
  --region REGION \
  --staging-location STAGING_LOCATION \
  --temp-location TEMP_LOCATION \
  --parameters  PARAMETERS \
  --additional-user-labels LABELS \

更改下列內容:

  • JOB_ID:您的工作 ID

  • TEMPLATE_FILE_LOCATION:範本檔案的 Cloud Storage 位置

  • REGION:要執行 Dataflow 工作的區域

  • STAGING_LOCATION:用於暫存本機檔案的 Cloud Storage 位置

  • TEMP_LOCATION:用於寫入暫存檔案的 Cloud Storage 位置。如未設定,預設值為暫存位置。

  • PARAMETERS:工作的管道參數

  • LABELS:選用。附加至工作的標籤,格式為 KEY_1=VALUE_1,KEY_2=VALUE_2,...

在啟動範本的暫存步驟中,Dataflow 會將檔案寫入暫存位置。Dataflow 會讀取這些暫存檔案,建立工作圖。在執行步驟期間,Dataflow 會將檔案寫入暫存位置。

設定管道選項

執行彈性範本時,如要設定管道選項,請在 gcloud dataflow flex-template run 指令中使用下列旗標:

gcloud

傳遞 ListMap 類型的參數時,您可能需要在 YAML 檔案中定義參數,並使用 flags-file 旗標。

API

以下範例說明如何在要求主體中加入管道選項、實驗和其他選項:

{
  "jobName": "my-flex-template-job",
  "parameters": {
    "option_defined_in_metadata": "value"
  },
  "environment": {
    "additionalExperiments": [
      "use_runner_v2"
    ],
    "additionalPipelineOptions": {
      "common_pipeline_option": "value"
    }
  }
}

使用 Flex 範本時,您可以在管道初始化期間設定部分管道選項,但其他管道選項無法變更。如果覆寫 Flex 範本所需的指令列引數,工作可能會忽略、覆寫或捨棄範本啟動器傳遞的管道選項。工作可能無法啟動,或啟動未使用彈性範本的工作。詳情請參閱「無法讀取工作檔案」。

在管道初始化期間,請勿變更下列管道選項

Java

  • runner
  • project
  • jobName
  • templateLocation
  • region

Python

  • runner
  • project
  • job_name
  • template_location
  • region

Go

  • runner
  • project
  • job_name
  • template_location
  • region

封鎖使用中繼資料安全殼層金鑰的 VM 專案安全殼層金鑰

您可以封鎖 VM 的專案 SSH 金鑰,防止 VM 接受儲存在專案中繼資料中的 SSH 金鑰。搭配 block_project_ssh_keys 服務選項使用 additional-experiments 旗標:

--additional-experiments=block_project_ssh_keys

詳情請參閱 Dataflow 服務選項

更新 Flex 範本作業

以下範例要求說明如何使用 projects.locations.flexTemplates.launch 方法,更新範本串流作業。如要使用 gcloud CLI,請參閱「更新現有管道」。

如要更新傳統範本,請改用 projects.locations.templates.launch

  1. 按照步驟透過 Flex 範本建立串流工作。 傳送下列 HTTP POST 要求,並附上修改後的值:

    POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/REGION/flexTemplates:launch
    {
        "launchParameter": {
          "update": true
          "jobName": "JOB_NAME",
          "parameters": {
            "input_subscription": "projects/PROJECT_ID/subscriptions/SUBSCRIPTION_NAME",
            "output_table": "PROJECT_ID:DATASET.TABLE_NAME"
          },
        "containerSpecGcsPath": "STORAGE_PATH"
        },
    }
    
    • PROJECT_ID 替換為專案 ID。
    • 請將 REGION 改成要更新的工作的 Dataflow地區
    • JOB_NAME 替換為要更新的工作確切名稱。
    • parameters 設為鍵/值組合清單。列出的參數僅適用於這個範本範例。如果使用自訂範本,請視需要修改參數。如果您使用範本,請替換下列變數。
      • 請將 SUBSCRIPTION_NAME 改成您的 Pub/Sub 訂閱名稱。
      • DATASET 替換為 BigQuery 資料集名稱。
      • 請將 TABLE_NAME 改成您的 BigQuery 資料表名稱。
    • 請將 STORAGE_PATH 改成範本檔案的 Cloud Storage 位置。位置資訊開頭應為 gs://
  2. 使用 environment 參數變更環境設定。詳情請參閱 FlexTemplateRuntimeEnvironment

  3. 選用:如要使用 curl (Linux、macOS 或 Cloud Shell) 傳送要求,請將要求儲存至 JSON 檔案,然後執行下列指令:

    curl -X POST -d "@FILE_PATH" -H "Content-Type: application/json" -H "Authorization: Bearer $(gcloud auth print-access-token)"  https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/REGION/flexTemplates:launch
    

    FILE_PATH 改成包含要求內文的 JSON 檔案路徑。

  4. 使用 Dataflow 監控介面,確認已建立同名的新工作。這項工作的狀態為「已更新」

後續步驟