首页 文章

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

提问于
浏览
0

我有一个管道存储为模板 . 我正在使用node.js客户端从 Cloud 功能运行此管道 . 一切正常,但当我需要从不同地区运行此模板时,我会收到错误 .

根据文档,我可以通过有效负载中的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

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

2 回答

  • 2

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

    要使Dataflow区域 endpoints 起作用,必须使用第一个 endpoints ( 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

    我一直在测试这个虽然API explorerconsole使用Google-provided templates . 使用 wordcount 示例,我得到的相同的一般错误比使用API资源管理器时更常见,如果 location 名称不正确,则会出现相同的错误 . 但是,控制台提供了更多信息:

    us-central1数据流区域 endpoints 之外不支持使用2.0之前的Java或Python SDK版本的模板化Dataflow作业 . 提供的模板使用Google Cloud Dataflow SDK for Java 1.9.1 .

    正如我之前评论的那样记录了here . 运行它确认它使用的是已弃用的SDK版本 . 我建议你做同样的过程,看看这是否也是你的情况 .

    选择不同的模板,在我的情况下,从控制台的下拉菜单中选择 GCS Text to BigQuery (使用 Apache Beam SDK for Java 2.2.0 )与 location 设置为 europe-west1 工作正常,我(和工作在该地区实际运行) .

    TL;DR :您的请求在第一个示例中是正确的,但如果您要使用区域 endpoints ,则需要将模板更新为较新的SDK .

相关问题