Google Cloud Platform - использовать несколько учетных записей служб

Я пытаюсь использовать bq cli для экспорта данных с помощью большого запроса в GCS. В настоящее время существует два проекта, и у каждого из них есть собственная учетная запись службы. Я аутентифицировал учетную запись служб, используя gcloud auth active-service-account, передав ключевой файл json. Во время выполнения своих заданий я явно устанавливаю проект и учетную запись, используя следующие команды

В JOB1

gcloud config установить учетную запись account1

gcloud config установить проект project1

bq extract --destination_format NEWLINE_DELIMITED_JSON table1 gs: // path1

В JOB2

gcloud config установить учетную запись account2

gcloud config установить проект project2

bq extract --destination_format NEWLINE_DELIMITED_JSON table2 gs: // path2

Когда и задание1, и задание2 выполняются параллельно, задание JOB1 завершается сбоем с ошибкой account2, не имеющей доступа к проекту1, и аналогичным образом в некоторых случаях JOB2 не работает с ошибкой account1, не имеющей доступа к проекту2. Мы определили, что это происходит, потому что, когда мы устанавливаем учетную запись, она меняет учетную запись по умолчанию на сервере (а не в сеансе), и, следовательно, другое задание, которое выполняется параллельно, дает сбой. Не могли бы вы помочь, как мы можем выполнять команды bq, используя несколько учетных записей служб параллельно на одном сервере.


person Berry Jenson    schedule 31.03.2020    source источник
comment
Почему вы используете ключ сервисной учетной записи, а не личную учетную запись? Почему важно проводить экстракцию параллельно?   -  person guillaume blaquiere    schedule 31.03.2020
comment
Вы добавили служебную учетную запись A в проект B и наоборот со служебной учетной записью B в проект A, при этом назначив правильные роли. Если учетной записи службы не назначены правильные роли в каждом отдельном проекте, это может привести к отказу в доступе. Можете ли вы также предоставить вывод сообщения об ошибке.   -  person Gustavo    schedule 31.03.2020
comment
@Guillaume Blaquiere: Мы используем служебную учетную запись, поэтому даже если я выйду из проекта, задание продолжит выполняться. Мы выполняем извлечение параллельно в виде почасовых заданий в двух отдельных заданиях, как того требует наш нисходящий поток.   -  person Berry Jenson    schedule 03.04.2020
comment
@Gustavo: мы не можем использовать служебную учетную запись проекта a для доступа к данным в проекте b, так как владельцы разных проектов разные, и они не дают разрешения   -  person Berry Jenson    schedule 03.04.2020
comment
Когда вы говорите, что это не удается, вы имеете в виду, что файл не экспортируется? Или у вас есть ошибка на консоли bash, но исправление завершения операции на стороне GCP (файлы экспортируются в ведре)?   -  person guillaume blaquiere    schedule 03.04.2020
comment
@Guillaume Blaquiere: я получаю сообщение об ошибке, что у учетной записи нет доступа к проекту   -  person Berry Jenson    schedule 04.04.2020
comment
А что с файлами? Являются ли они экспортером в GCS?   -  person guillaume blaquiere    schedule 05.04.2020
comment
@Guillaume Blaquierr: Извините за поздний ответ. Да, файлы экспортируются в GCS   -  person Berry Jenson    schedule 14.04.2020


Ответы (1)


Позвольте мне объяснить процесс, прежде чем углубляться в решение. Когда вы выполняете операцию в BigQuery, в большинстве случаев это асинхронная операция. Cli позволяет вам думать, что это синхронно, но это не так.

Кли выполняет это

  • Запустите работу и получите jobId
  • Цикл регулярно извлекает статус jobId
  • Распечатать результат задания в конце (состояние Готово, Ошибка)

Если вы измените свои учетные данные, CLI не сможет выполнить извлечение цикла, потому что он больше не авторизует проверку этого JobId в проекте.

Теперь у вас есть 2 решения:

  • Результат работы важен для вас в клиенте, вы не можете изменить учетные данные. Выписка должна быть последовательной
  • Результат задания не импортируется, вы предпочитаете параллелизм, вы можете использовать параметр --nosynchronous_mode при выполнении извлечения

Примечание: я совершенно уверен, что если вы используете несколько пользователей и команду SUDO, вы можете добиться желаемого в режиме синхронизации. Однако я не эксперт по Linux и ничего не могу с этим поделать.

person guillaume blaquiere    schedule 14.04.2020
comment
Спасибо @Guillaume Blaquiere. Я буду исследовать nosynchronous_mode, хотя результат важен для моего варианта использования, поскольку он включает в себя дальнейшую обработку по конвейеру. - person Berry Jenson; 16.04.2020