我正在使用“模板”功能在GCS中存储Dataflow作业模板,并在多个GCP项目中运行它。当我对Pubsub订阅进行硬编码时,这很好用,但是我需要能够在执行时设置它们 - 具体来说,我需要能够设置订阅所在的GCP项目ID,即设置{{1在执行时。
我尝试在CLI上使用ValueProvider:
projects/<project>/subscriptions/my-sub
我可以在监控UI中看到我在运行作业时正确设置了项目ID。
然后我使用NestedValueProvider将项目ID映射到我的各种订阅:
@Description("The GCP project to run the pipeline in")
def getProjectId: ValueProvider[String]
def setProjectId(value: ValueProvider[String])
val function = new SerializableFunction[String, String] {
override def apply(value: String): String = s"projects/$value/subscriptions/my-sub"
}
NestedValueProvider.of[String, String](projectIdProvider, function)
方法接受ValueProvider,但是当我运行作业时,我在日志中收到此错误,并且没有消息被读取:
PubsubIO.Read.subscription
Stackdriver日志消息表明此错误发生在construct-template-5-05010625-b4a3-harness-03lg Update range task for 8042011276981323245 returned error status, will be retried as necessary: INVALID_ARGUMENT: Http(400) Bad Request