#java #google-cloud-dataflow #apache-beam
#java #google-облако-поток данных #apache-beam
Вопрос:
Пытаюсь сделать мой вопрос как можно более широким:
При записи неограниченной PCollection в корзину GCS с использованием TextIO при использовании учетной записи службы с принципом наименьших привилегий, которая не имеет доступа к удалению 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? или было бы лучше использовать DoFn для PCollection, которую мы хотели бы использовать, и использовать DoFn для постепенной записи каждого отдельного элемента в корзину GCS с использованием GCS API? таким образом, решается проблема очистки сегментов.
Комментарии:
1. Привет, Мэтт. Я не уверен, что это то, что вам нужно, но в TextIO есть функция withTempDirectory, которая может позволить вам установить временную корзину в корзину, где учетная запись службы имеет более высокие привилегии, без увеличения ее привилегий в «основной» корзине. Помогает ли это? — на самом деле, вы можете установить расположение вашего конвейера в корзине, которая не так критична к безопасности, и записать результат в безопасную корзину. Работает ли это?
Ответ №1:
В withTempDirectory
есть TextIO
функция, которая должна позволить вам установить временную корзину в корзину, где учетная запись службы имеет более высокие привилегии.
Я полагаю, что это TextIO
поместит файлы в tempLocation
ваш конвейер. Возможно, вы сможете установить tempLocation
свой конвейер в корзину, которая не так критична к безопасности, и записать результат в безопасную корзину.
Поблагодарите, если какая-либо из этих альтернатив поможет.
Комментарии:
1. Это именно то, к чему мы пришли. Спасибо, Пабло!