创建用于多个 GCP 项目的数据流模板
Creating Dataflow Templates for use in multiple GCP projects
我希望为我们的 Dataflow 作业设置适当的部署管道,从而允许对我们作业的特定版本进行持续交付和 QA 测试。
为了做到这一点,我希望 "build" 将作业转化为可以在不同位置引用和执行的工件。为了做到这一点,我一直在研究数据流模板,但似乎必须为特定的 GCP 项目构建模板,这意味着我无法在暂存项目和生产项目之间共享工件。
有没有更好的方法来完成我想做的事情?人们通常会做什么来实施可预测的部署管道?
当您基于模板创建作业时,您可以覆盖项目。这是 Go 中的示例。
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)
}
我希望为我们的 Dataflow 作业设置适当的部署管道,从而允许对我们作业的特定版本进行持续交付和 QA 测试。
为了做到这一点,我希望 "build" 将作业转化为可以在不同位置引用和执行的工件。为了做到这一点,我一直在研究数据流模板,但似乎必须为特定的 GCP 项目构建模板,这意味着我无法在暂存项目和生产项目之间共享工件。
有没有更好的方法来完成我想做的事情?人们通常会做什么来实施可预测的部署管道?
当您基于模板创建作业时,您可以覆盖项目。这是 Go 中的示例。
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)
}