Google Dataflow - 无效的区域端点 - 不可能在nodejs客户端的模板上设置区域

时间:2018-03-01 15:27:08

标签: google-cloud-platform google-cloud-dataflow apache-beam

我将管道存储为模板。我使用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中运行

如何运行此模板并提供区域/区域

2 个答案:

答案 0 :(得分:2)

正如here所解释的,实际上有两个端点:

要使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 explorerconsole使用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。