我们使用谷歌云功能通过以下方式启动模板: https://cloud.google.com/dataflow/docs/reference/rest/v1b3/projects.locations.templates/launch
我们想添加一个通过具有以下布局的动态模板将请求的暂存位置:
DYNAMICTEMPLATE = {"gcsPath" : GCSPATH, "stagingLocation" : "gs://xxx/dataflow/staging"}
request = service.projects().locations().templates().launch(projectId=PROJECT, gcsPath=GCSPATH, body=BODY, location=LOCATION, dynamicTemplate=DYNAMICTEMPLATE)
response = request.execute()
但是日志记录返回以下错误:
TypeError: Got an unexpected keyword argument "dynamicTemplate"
如果没有动态模板,一切运行都不会出现问题。我们还尝试在
body
中添加dynamicTemplate,但这也不起作用..有人知道如何设置dynamicTemplate吗?
看到的错误信息 “TypeError: Got an unexpected keyword argument 'dynamicTemplate'” 说明使用的 Google Cloud Python 客户端库版本不支持
dynamicTemplate
参数。
要解决这个问题,需要采取以下两种方法之一:
方法一: 更新 Google Cloud Python 客户端库
确保使用的 Google Cloud Python 客户端库版本是最新的。可以使用以下命令更新库:
pip install --upgrade google-cloud-dataflow
更新完成后,检查
launch
方法的文档是否包含
dynamicTemplate
参数。
方法二: 使用 HTTP 请求发送
dynamicTemplate
如果更新库后
dynamicTemplate
仍然不可用,可以直接使用 HTTP 请求来发送它。以下是使用 Python
requests
库实现的示例:
import requests
import google.auth
# 获取的 Google Cloud 项目 ID
PROJECT_ID = 'your-project-id'
# 获取的 Google Cloud 地区
LOCATION = 'your-location'
# 获取的 GCS 路径
GCSPATH = 'gs://your-bucket/your-template.json'
# 定义的 dynamicTemplate
DYNAMICTEMPLATE = {"gcsPath": GCSPATH, "stagingLocation": "gs://xxx/dataflow/staging"}
# 构建请求 URL
url = f'https://dataflow.googleapis.com/v1b3/projects/{PROJECT_ID}/locations/{LOCATION}/templates:launch'
# 获取的 Google Cloud 凭据
credentials, _ = google.auth.default()
# 使用凭据获取访问令牌
access_token = credentials.token
# 设置请求头
headers = {
'Authorization': f'Bearer {access_token}',
'Content-Type': 'application/json'
}
# 设置请求体
data = {
'gcsPath': GCSPATH,
'dynamicTemplate': DYNAMICTEMPLATE
}
# 发送请求
response = requests.post(url, headers=headers, json=data)
# 处理响应
if response.status_code == 200:
print('Dataflow 模板已成功启动')
else:
print(f'请求失败:{response.status_code} - {response.text}')
注意: 在使用 HTTP 请求时,请确保已经正确设置了身份验证。
希望这些方法可以帮助解决问题。如果还有其他问题,请随时提出。
标签:python,google-cloud-functions,google-cloud-dataflow,gcloud From: 78810324