我将管道存储为模板。我使用node.js客户端从云功能运行此管道。一切正常,但当我需要从不同地区运行此模板时,我会收到错误。
根据文档,我可以通过有效负载中的location参数设置它
{
projectId: 123,
resource: {
location: "europe-west1",
jobName: `xxx`,
gcsPath: 'gs://xxx'
}
}
这给了我以下错误:
The workflow could not be created, since it was sent to an invalid regional endpoint (europe-west1).
Please resubmit to a valid Cloud Dataflow regional endpoint.
如果我将location参数移出资源节点,我会得到同样的错误,例如:
{
projectId: 123,
location: "europe-west1",
resource: {
jobName: `xxx`,
gcsPath: 'gs://xxx'
}
}
如果我在环境中设置区域并删除位置,例如:
{
projectId: 123,
resource: {
jobName: `xxx`,
gcsPath: 'gs://xxx',
environment: {
zone: "europe-west1-b"
}
}
}
我不再收到任何错误,但数据流UI告诉我作业正在us-east1
中运行
如何运行此模板并提供区域/区域
答案 0 :(得分:2)
正如here所解释的,实际上有两个端点:
dataflow.projects.locations.templates.launch
(API Explorer)dataflow.projects.templates.launch
(API Explorer)要使Dataflow区域端点起作用,必须使用第一个端点(dataflow.projects.locations.templates.launch
)。这样,将接受请求中的location
参数。代码段:
var dataflow = google.dataflow({
version: "v1b3",
auth: authClient
});
var opts = {
projectId: project,
location: "europe-west1",
gcsPath: "gs://path/to/template",
resource: {
parameters: launchParams,
environment: env
}
};
dataflow.projects.locations.templates.launch(opts, (err, result) => {
if (err) {
throw err;
}
res.send(result.data);
});
答案 1 :(得分:1)
虽然API explorer和console使用Google-provided templates,但我一直在对此进行测试。使用wordcount
示例,我得到的相同通用错误与API资源管理器相同,如果location
名称不正确,则会出现相同的错误。但是,控制台提供了更多信息:
使用2.0之前的Java或Python SDK版本的模板化Dataflow作业 在us-central1 Dataflow Regional之外不支持 端点。提供的模板使用Google Cloud Dataflow SDK Java 1.9.1。
正如我先前评论的那样记录了here。运行它确认它使用的是已弃用的SDK版本。我建议你做同样的过程,看看这是否也是你的情况。
选择其他模板,在我的情况下,控制台的下拉菜单中的GCS Text to BigQuery
选项(使用Apache Beam SDK for Java 2.2.0
)且location
设为europe-west1
的工作正常我(并且该工作实际上在该地区运行)。
TL; DR :您的请求在第一个示例中是正确的,但如果您想使用区域端点,则需要将模板更新为较新的SDK。