Загрузите файлы gcs на диск Google с помощью воздушного потока

Привет, я пытаюсь загрузить файл из GCS в Gdrive, используя

airflow.contrib.operators.gcs_to_gdrive_operator import GcsToGDriveOperator

Так выглядит даг

copy_to_gdrive = GcsToGDriveOperator(
    task_id="copy_to_gdrive",
    source_bucket="my_source_bucket_on_gcs",
    source_object="airflow-dag-test/report.csv",
    destination_object="/airflow-test/report.csv",
    gcp_conn_id="bigquery_default",
    dag=dag
)

Этот код выполняется без каких-либо ошибок, и в журналах я вижу, что файл успешно загружен на локальный диск и также успешно загружен на gdrive.

Этот код выполняется учетной записью службы, проблема, с которой я сталкиваюсь, заключается в том, что я не могу найти файл или каталог, который этот даг создает для загрузки

Я пробовал несколько перестановок/комбинаций пути для target_object, но, похоже, ничего не работает, а документы Google также бесполезны.

В журналах API я вижу, что API drive.create вызывается, но где он создает файл, неизвестно. Кто-нибудь испытал это? любая помощь или подсказка были бы большим подспорьем. Спасибо!




Ответы (1)


Ваша учетная запись службы — это учетная запись Google, и, как учетная запись Google, она имеет доступ к собственному диску. Файл корректно копируется на Диск, но на диск служебного аккаунта!

Вы никогда не указываете учетную запись, так как же Airflow может знать, что она должна использовать вашу?

Ознакомьтесь с документацией оператора.

делегат_то (str) — учетная запись для олицетворения, если таковая имеется. Чтобы это работало, учетная запись службы, отправляющая запрос, должна иметь включенное делегирование на уровне домена.

Используйте этот параметр, заполните его своим адресом электронной почты и активируйте широкое делегирование домена для вашей учетной записи службы.

person guillaume blaquiere    schedule 08.09.2020
comment
Привет, Гийом, спасибо за ваш ответ. Я попытался указать «delegate_to» для своего пользователя и получил эту ошибку: «unauthorized_client: клиент не авторизован для получения токенов доступа с помощью этого метода или клиент не авторизован ни для одной из запрошенных областей». Встречали ли вы что-нибудь подобное? Не могли бы вы поделиться каким-либо примером/примером кода, пожалуйста. заранее спасибо - person sws; 11.09.2020
comment
Предоставляете ли вы создателя токена учетной записи службы в своей учетной записи службы Airflow? - person guillaume blaquiere; 11.09.2020
comment
Привет, меня очень интересует тот же вопрос. Я понимаю вашу точку зрения, но мне кажется немного обременительным давать сервисной учетной записи Composer права выдавать себя за мою сервисную учетную запись. В версии, которую я использую, airflow.apache.org/docs/apache-airflow-providers-google/stable/, у меня есть только возможность использовать impersonation_chain. Нет ли способа, которым я мог бы создать папку на Диске и вместо этого поделиться этой папкой с учетной записью службы композитора (и написать туда)? - person Pascal Delange; 16.07.2021
comment
P.S. Или, может быть, это уже возможно, но тогда как мне указать общую папку в target_object? - person Pascal Delange; 16.07.2021