Как прикрепить файл с помощью оператора электронной почты в Airflow

Я использовал аргумент files = ["abc.txt"]. Я получил информацию из документации по воздушному потоку ... https://airflow.readthedocs.io/en/stable/_modules/airflow/operators/email_operator.html

Но я получаю сообщение об ошибке, что файл не найден. У меня вопрос, откуда этот воздушный поток заберет мой файл. Это из GCS Bucket или папки DAG в среде композитора?

Куда мне нужно загрузить файл и каков правильный синтаксис аргумента "файлы"?

Заранее спасибо.


person Chakkirala Chaitanya    schedule 09.01.2020    source источник
comment
Как прикрепить файл, если он находится в другом ведре, но не в ведре композитора Airflow?   -  person Chakkirala Chaitanya    schedule 16.01.2020


Ответы (1)


Файлы берутся из локальной файловой системы, и аргумент files действительно представляет собой список строк как files =["abc.txt"].

Чтобы загрузить файлы в композитор, вы можете использовать данные в папке GCS среды Composer Environment, затем вы можете получить доступ к этим данным из /home/airflow/gcs/data/

Пример взят из документации с добавленным свойством files является:

from airflow.operators import email_operator
    # Send email confirmation
    email_summary = email_operator.EmailOperator(
        task_id='email_summary',
        to=models.Variable.get('email'),
        subject='Sample Email',
        html_content="HTML content",
        files=['/home/airflow/gcs/data/abc.txt'])

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

person Tlaquetzal    schedule 14.01.2020
comment
Как прикрепить файл, если он находится в другом ведре, но не в ведре композитора Airflow? - person Chakkirala Chaitanya; 16.01.2020
comment
Сначала вам необходимо загрузить файл в локальную систему. Для скачайте файл и отправьте его. Вам нужно только убедиться, что обе задачи выполняются одним и тем же работником, чтобы EmailOperator мог найти файл в локальной системе. . - person Tlaquetzal; 16.01.2020
comment
Это действительно занимает больше времени, если размер файла огромен. Есть ли какое-либо решение, с которым мы можем напрямую работать с относительной корзиной GCS вместо загрузки в локальную систему. Согласно моим требованиям, я не должен вовлекать локальную систему в эту проблему. - person Chakkirala Chaitanya; 17.01.2020
comment
Вы не можете прикрепить файл к электронному письму только с URI Google Cloud Storage. Если вы не хотите загружать файл, можно отправить URL-адрес файла для загрузки файла непосредственно из GCS вместо фактического файла. Для этого можно использовать подписанные URL-адреса. Также учтите, что если файл действительно большой, он также может выйти за пределы вложений для электронного письма, поэтому отправка URL-адресов кажется хорошим подходом. - person Tlaquetzal; 17.01.2020