本頁說明如何使用彈性範本執行 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:您的工作 IDTEMPLATE_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 指令中使用下列旗標:
parameters:使用這個標記設定下列類型的管道選項:additional-pipeline-options:使用這個標記設定其他 Apache Beam 管道選項,這些選項不直接受 Flex 範本支援。additional-experiments: 使用這個標記設定實驗性管道選項 (相當於experiments選項)。
gcloud
使用
parameters旗標加入管道選項。使用
additional-experiments和additional-pipeline-options旗標,加入執行階段實驗和管道選項。
傳遞 List 或 Map 類型的參數時,您可能需要在 YAML 檔案中定義參數,並使用 flags-file 旗標。
API
使用
parameters欄位加入管道選項。使用
additionalExperiments和additionalPipelineOptions欄位,加入執行階段實驗和管道選項。
以下範例說明如何在要求主體中加入管道選項、實驗和其他選項:
{
"jobName": "my-flex-template-job",
"parameters": {
"option_defined_in_metadata": "value"
},
"environment": {
"additionalExperiments": [
"use_runner_v2"
],
"additionalPipelineOptions": {
"common_pipeline_option": "value"
}
}
}
使用 Flex 範本時,您可以在管道初始化期間設定部分管道選項,但其他管道選項無法變更。如果覆寫 Flex 範本所需的指令列引數,工作可能會忽略、覆寫或捨棄範本啟動器傳遞的管道選項。工作可能無法啟動,或啟動未使用彈性範本的工作。詳情請參閱「無法讀取工作檔案」。
在管道初始化期間,請勿變更下列管道選項:
Java
runnerprojectjobNametemplateLocationregion
Python
runnerprojectjob_nametemplate_locationregion
Go
runnerprojectjob_nametemplate_locationregion
封鎖使用中繼資料安全殼層金鑰的 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 。
按照步驟透過 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://。
- 將
使用
environment參數變更環境設定。詳情請參閱FlexTemplateRuntimeEnvironment。選用:如要使用 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 檔案路徑。
使用 Dataflow 監控介面,確認已建立同名的新工作。這項工作的狀態為「已更新」。
後續步驟
- 瞭解如何為 Apache Beam 管道建構彈性範本。
- 如要進一步瞭解傳統範本、Flex 範本及其使用案例情境,請參閱「Dataflow 範本」。
- 如需 Flex 範本疑難排解資訊,請參閱「排解 Flex 範本逾時問題」。
- 如需更多參考架構、圖表和最佳做法,請前往 Cloud Architecture Center。