如何在GCP中调用在Go from Cloud Functions中编写的数据流作业



我的目标是创建一种机制,当一个新文件上传到云存储时,它将触发一个云函数。最终,此Cloud函数将触发Cloud数据流作业。

我有一个限制,云数据流作业应该用Go编写,云函数应该用Python编写。

我现在面临的问题是,我不能从云函数调用云数据流作业。

Go中编写的云数据流的问题是Apache Beam Go SDK中没有定义template-location变量。这就是我无法创建数据流模板的原因。而且,由于没有数据流模板,我可以从云函数调用Cloud dataflow作业的唯一方法是编写一个Python作业,该作业调用运行数据流作业的bash脚本。

bash脚本如下所示:

go run wordcount.go 
--runner dataflow 
--input gs://dataflow-samples/shakespeare/kinglear.txt 
--output gs://${BUCKET?}/counts 
--project ${PROJECT?} 
--temp_location gs://${BUCKET?}/tmp/ 
--staging_location gs://${BUCKET?}/binaries/ 
--worker_harness_container_image=apache-docker-beam-snapshots-docker.bintray.io/beam/go:20180515

但上述机制无法创建新的数据流作业,而且看起来很麻烦。

有更好的方法来实现我的目标吗?我在上述机制上做错了什么?

云函数应该用Python 编写

云数据流客户端SDK只能从模板创建数据流作业。因此,除非您创建自己的模板,否则无法实现此要求。

我有一个限制,云数据流作业应该写入转到

由于您的Python目标无法实现,您的另一个选择是在Cloud Functions中运行Go程序。围棋的云函数在alpha中。然而,我不知道在云函数中执行ApacheBeam(Dataflow)程序的方法。请记住,除非选择runner=DirectRunner,否则ApacheBeam程序将在本地开始执行,并将自身连接到运行在其他地方的集群(Dataflow、Spark等)。

您选择了最不成熟的语言来使用ApacheBeam。成熟度和功能的顺序是Java(优秀)、Python(优秀且每天都在进步)、Go(还没有为黄金时段做好准备)。

如果你想运行用Go on Cloud Dataflow编写的Apache Beam程序,那么你需要使用一个平台,比如你的本地系统、谷歌计算引擎或谷歌应用引擎Flex。我不知道AppEngineStandard是否能在Go中运行ApacheBeam。

我发现Apache Beam Go SDK支持worker_binary参数,该参数类似于Java数据流作业的template-location。使用这个选项,我可以从我的python云函数中启动一个go数据流作业。

相关内容

  • 没有找到相关文章

最新更新