如何在 google 数据流管道中设置 diskSourceImage

How to set diskSourceImage in google data flow pipeline

我一直在尝试将自定义图像用于 运行 我的 google 数据流管道。根据来自 https://cloud.google.com/compute/docs/reference/latest/images 的信息,我测试了以下代码片段:

DataflowPipelineOptions options = PipelineOptionsFactory.create().as(DataflowPipelineOptions.class);
...
options.setDiskSourceImage("ubuntu-1504-vivid-v20150911");
options.setDiskSourceImage("projects/ubuntu-os-cloud/global/images/ubuntu-1504-vivid-v20150911");
options.setDiskSourceImage("https://www.googleapis.com/compute/beta/projects/ubuntu-os-cloud/global/images/ubuntu-1504-vivid-v20150911");

以上所有尝试都导致我的管道出现以下错误:

(b9c7b66a676906f4): Unable to create VMs. Causes: (b9c7b66a67690aef): Error: Message: Invalid value for field 'resource.disks[0].initializeParams.sourceImage': '[edited]'. Must be the URL to a Compute resource of the correct type HTTP Code: 400

setDiskSourceImage 有一个微妙的问题——它使用 'beta' 而不是 Compute Engine 的当前 'v1' 版本。如果您尝试以下操作,它应该会起作用:

options.setDiskSourceImage("https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-1504-vivid-v20150911");

将自定义磁盘映像与 Dataflow 结合使用不是一个可行的选择。标志 diskSourceImage 已弃用,将在未来的 SDK 版本中删除。它不再受支持的原因是 Dataflow 服务依赖于 VM 映像中的版本化资源。因此 Dataflow 需要控制 VM 映像,以便我们可以根据需要对其进行升级。如果用户提供他们自己的自定义图像,我们无法使它们与 Dataflow 服务的要求保持同步。

如果您的自定义 VM 映像基于 Dataflow 映像,那么在下一个 Dataflow VM 映像发布之前,您将能够使用该自定义映像执行作业。没有合理的方法可以让您的自定义映像与 Dataflow 的 VM 映像保持同步,以便您能够保持此工作。

如果您想自定义 VM 映像,请告诉我们原因(例如,发送电子邮件至 dataflow-feedback@google.com),以便我们建议替代解决方案或考虑支持您的使用未来的案例。