【问题标题】:setting sdk_container_image in flex template在 flex 模板中设置 sdk_container_image
【发布时间】:2022-06-14 03:09:24
【问题描述】:
为了提供密封构建和运行时,我们目前构建了自定义 flex 模板和工作映像。作为部署的一部分,我们构建了 flex 模板,我们可以指定自定义 flex 模板图像,但不能指定自定义工作器图像 - 我们必须在调用 flex 模板时单独将其传递给数据流。这会创建隐藏的依赖关系,我们需要在其他地方的发布过程中跟踪这些依赖关系(并且似乎与自包含的 flex 模板的设计背道而驰)。有没有办法将至少一个默认的工作图像( sdk_container_image )烘焙到模板中?
【问题讨论】:
标签:
google-cloud-dataflow
【解决方案1】:
一般来说,如果你想为模板参数设置一个默认值,你可以在它上面使用@Default注解,并为你构建的每个模板版本更改默认值。虽然在这种特殊情况下,由于 sdkContainerImage 参数在 Java SDK 中的 DataflowPipelineOptions (或 Python SDK 中的 WorkerOptions )中声明,并且您无法从用户代码中控制其默认值,我会尝试设置以编程方式在模板代码中设置参数值。
我认为这样的事情应该可以工作,但我还没有测试过:
DataflowPipelineOptions options =
PipelineOptionsFactory.fromArgs(args).as(DataflowPipelineOptions.class);
if (options.getSdkContainerImage() == null || options.getSdkContainerImage().isEmpty()) {
// Set the default if not already set by the template runner.
options.setSdkContainerImage("...");
}
Pipeline pipeline = Pipeline.create(options);
// ...
这适用于 Java,但您可以使用 Python SDK 做类似的事情。