Google cloud platform 创建用于多个GCP项目的数据流模板

Google cloud platform 创建用于多个GCP项目的数据流模板,google-cloud-platform,google-cloud-dataflow,Google Cloud Platform,Google Cloud Dataflow,我希望为我们的数据流作业建立适当的部署管道,允许对特定版本的作业进行连续交付和QA测试 为了做到这一点,我希望将作业“构建”成可以在不同地方引用和执行的工件。为了做到这一点,我一直在研究数据流模板,但似乎必须为特定的GCP项目构建一个模板,这意味着我不能在我的暂存项目和生产项目之间共享工件 有没有更好的方法来完成我想做的事情?为了实施可预测的部署管道,人们通常会做些什么?基于模板创建作业时,您可以覆盖项目。下面是围棋的一个例子 package main import ( "contex

我希望为我们的数据流作业建立适当的部署管道,允许对特定版本的作业进行连续交付和QA测试

为了做到这一点,我希望将作业“构建”成可以在不同地方引用和执行的工件。为了做到这一点,我一直在研究数据流模板,但似乎必须为特定的GCP项目构建一个模板,这意味着我不能在我的暂存项目和生产项目之间共享工件


有没有更好的方法来完成我想做的事情?为了实施可预测的部署管道,人们通常会做些什么?

基于模板创建作业时,您可以覆盖项目。下面是围棋的一个例子

package main

import (
    "context"
    "fmt"
    "log"

    "golang.org/x/oauth2/google"
    "google.golang.org/api/dataflow/v1b3"
)

func main() {
    ctx := context.Background()
    projectID := "PROJECT"
    bucket := "gs://BUCKET/"
    input := "gs://dataflow-samples/shakespeare/kinglear.txt"
    output := bucket + "shakespeare"
    temp := bucket + "temp"
    template := "gs://dataflow-templates/wordcount/template_file"

    client, err := google.DefaultClient(ctx, "https://www.googleapis.com/auth/cloud-platform")

    if err != nil {
        log.Fatal(err)
    }

    dataflowService, err := dataflow.New(client)
    if err != nil {
        log.Fatal(err)
    }
    templateService := dataflow.NewProjectsTemplatesService(dataflowService)


    mapP := map[string]string{"inputFile": input, "output": output}

    env := dataflow.RuntimeEnvironment{TempLocation: temp}
    r := dataflow.CreateJobFromTemplateRequest{GcsPath: template, Parameters: mapP, Environment: &env}

    resp, err := templateService.Create(projectID, &r).Do()
    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("Job URL: https://console.cloud.google.com/dataflow/job/%s?project=%s\n", resp.Id, resp.ProjectId)
}

我的问题是,作业似乎被配置为使用它创建时所在的项目中的资源,而不是它运行时所在的项目中的资源,因此我得到了权限错误。具体来说,
temp location
需要作业可写,但它在作业创建时是静态设置的。此外,许多内容必须静态定义,例如pubsub订阅。对于运行作业的每个项目,我需要一组不同的订阅。该示例覆盖临时位置(请参见“env”)。对于PubSub,我在Read中看到ValueProviders,因此您应该能够在运行时传递主题和订阅。