Заставить поток воздуха прочитать S3 и опубликовать сообщение? - PullRequest
0 голосов
/ 27 сентября 2019

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

Фон

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

Что необходимо сделать сейчас

Если задание воздушного потока выполнено успешно, необходимо проверить другое местоположение S3 и, если файл там существует, затем подтолкнуть его содержимое к провалу.

Возможен ли этот вариант использования с воздушным потоком?

1 Ответ

1 голос
/ 27 сентября 2019

Вы уже поняли, что первым шагом вашего рабочего процесса должен быть S3KeySensor

Что касается последующих шагов, в зависимости от того, что вы подразумеваете под ..it needs to check another S3 location and if file there exists,.., go может сделать это вследующим образом

  1. Шаг 1

    a.Если файл в в другом месте S3 также должен появиться там , то, конечно, вам потребуется еще один S3KeySensor

    b.Или, если ожидается, что этот другой файл будет там (или не будет там, но его не нужно ждать, чтобы появиться когда-нибудь), мы выполняем проверку на наличие этого файла, используя функцию check_for_key(..)S3_Hook (это можно сделать в python_callable простого PythonOperator / любого другого пользовательского оператора, который вы используете для шага 2)

  2. Шаг 2

    К настоящему времени установлено, что либо второй файл присутствует в ожидаемом месте (иначе мы не зайдем так далеко).Теперь вам просто нужно прочитать содержимое этого файла, используя функцию read_key(..).После этого вы можете отправить содержимое в Slack, используя функцию call(..) из SlackHook.У вас может возникнуть желание использовать SlackApiOperator (что, конечно, можно), но при этом чтение файла из S3 и отправку содержимого в Slack следует объединить в одну задачу.Таким образом, вам лучше делать эти вещи в общем PythonOperator, используя те же hooks, которые используются родными операторами также

...