最佳实践 - 将 Unbounded PCollection 写入具有受限服务帐户的 GCS Bucket

Best Practice - Writing Unbounded PCollection to GCS Bucket with restricted Service Account

试图让我的问题尽可能宽泛:

当使用 TextIO 将无界 PCollection 写入 GCS 存储桶时,同时使用具有最小权限原则且没有 GCS 删除访问权限的服务帐户时,数据流中出现以下错误:

Error trying to copy gs://[Temporary beam file] to gs://[JSON We expect]: {"code":403,"errors":[{"domain":"global","message":"[Service Account] does not have storage.objects.delete access to [JSONFile]","reason":"forbidden"}],"message":"[Service Account] does not have storage.objects.delete access to [JSON File]"}

以上错误是有道理的,考虑到我们不允许服务帐户对我们正在使用的存储桶具有删除权限,并且存在数据流管道正在尝试清理的文件碎片。

但问题是,此时的最佳做法是提供对数据流服务帐户的删除访问权限并继续使用 TextIO 吗?或者在我们想要摄取的 PCollection 上使用 DoFn 并使用 DoFn 使用 GCS API 将每个单独的元素增量写入 GCS 存储桶会更好吗?从而颠覆了碎片的清理问题

有一个 withTempDirectory function in TextIO 应该允许您将临时存储桶设置为服务帐户具有更高权限的存储桶。

我相信 TextIO 会将文件放入您的管道 tempLocation 中。您可以将管道的 tempLocation 设置在安全性不那么严格的存储桶中,并将结果写入安全存储桶。

LMK 如果这些替代方案中的任何一个有帮助。