从Google Cloud Function启动Dataflow Pipeline指定zone和机型失败如何解决
配置遗漏及修正方案
你当前触发错误主要是以下几个配置不符合Dataflow API要求:
- machineType参数格式错误:Dataflow要求机型参数需要填写完整的资源路径,不能直接写机型名,正确格式为
zones/[可用区]/machineTypes/[机型名],你的场景下应该填zones/europe-west1-b/machineTypes/n1-standard-4 - 网络资源路径不全:你当前填写的network、subnetwork都是短名格式,API解析时可能找不到对应资源,需要补全所属项目的资源前缀:
- subnetwork完整格式:
projects/[你的VPC所属项目ID]/regions/europe-west1/subnetworks/europe-west1-subnet - 如果已经指定了subnetwork参数,可以直接删除network配置避免冲突,需要保留的话也要补全完整路径
projects/[你的VPC所属项目ID]/global/networks/dataflow-network
- subnetwork完整格式:
- 缺少区域指定参数:调用Dataflow模板启动接口时需要明确指定任务所属的区域,否则默认调用全局端点,会和你指定的europe-west1区域资源不匹配
- 检查tempLocation配置:需要填写完整的
gs://[存储桶名]/[临时路径]格式,同时保证Cloud Function的运行服务账号、Dataflow工作服务账号都有该存储桶的读写权限,以及VPC、子网的使用权限
修正后的代码参考:
def call_dataflow(dataflow_name): service = build('dataflow', 'v1b3') gcp_project = 'PROJECT_ID' # VPC和当前项目属同一项目可直接用gcp_project,否则替换为VPC所属项目ID vpc_project = gcp_project template_path = 'TEMPLATE_PATH' template_body = { 'parameters': { }, 'environment': { 'workerZone': 'europe-west1-b', 'subnetwork': f'projects/{vpc_project}/regions/europe-west1/subnetworks/europe-west1-subnet', "machineType": 'zones/europe-west1-b/machineTypes/n1-standard-4', 'numWorkers': 5, 'tempLocation': 'gs://替换为你的存储桶路径/temp', 'ipConfiguration': 'WORKER_IP_PRIVATE' }, 'jobName': dataflow_name } print('series_fulfillment - call_dataflow ' + dataflow_name + ' - lanzando') # 新增location参数指定区域,调用区域性接口 request = service.projects().locations().templates().launch( projectId=gcp_project, location='europe-west1', gcsPath=template_path, body=template_body ) response = request.execute() return response
内容的提问来源于stack exchange,提问作者jbra95
相关产品推荐
相关产品推荐

