Лучшая практика — написание неограниченной PCollection в корзину GCS с ограниченной учетной записью службы

#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. Это именно то, к чему мы пришли. Спасибо, Пабло!