Я хочу запускать сценарий python с использованием облачной функции всякий раз, когда указанный файл создается в облачном хранилище Google - PullRequest
0 голосов
/ 21 июня 2020

Один файл csv загружается в облачное хранилище каждый день около 02:00, но иногда из-за сбоя задания или системного взлома sh загрузка файла происходит очень поздно. Поэтому я хочу создать облачную функцию, которая может запускать мой сценарий загрузки python bq всякий раз, когда файл загружается в хранилище.

file_name : seller_data_{date}
bucket name : sale_bucket/

1 Ответ

0 голосов
/ 22 июня 2020

В вопросе не хватает описания желаемого варианта использования и любых проблем, с которыми столкнулся OP. Однако вот несколько возможных подходов, которые вы можете выбрать в зависимости от варианта использования.

  1. Простой способ: облачные функции с триггером хранилища.

Это, вероятно, самый простой и эффективный способ запуска функции Python всякий раз, когда файл загружается в вашу корзину. Самый простой c учебник - this .

Сложный путь: App Engine с несколькими приемами.

Наличие базового c Flask приложения, размещенного на GAE (Standard или Flex), с конечная точка специально для обработки этой проверки существующих файлов, загрузки объекта, манипулирования им и последующего выполнения каких-либо действий.

Этот маршрут может действовать как настраиваемая функция, запускаемая HTTP, когда после получения запроса (может быть от простого curl, посещение из браузера, событие PubSub или даже другая облачная функция).

После получения запроса GET (или POST) он загружает объект в каталог /tmp, обрабатывает его, а затем сделайте что-нибудь. сделано.

Жестокий / чрезмерный способ: Clour Run.

Подобный подход к App Engine, но с Cloud Run вам также нужно будет работать с файлом Dockerfile. помните, что Cloud Run будет уменьшаться до нуля, когда нет использования, и другие второстепенные вещи, которые относятся к созданию любого приложения в Cloud Run.

############### #######################

Для всех вышеперечисленных подходов некоторые дополнительные вещи, которые вы, возможно, захотите достичь, одинаковы :

a) Загрузка объекта и обработка его:

Вам нужно будет загрузить его в каталог /tmp, так как это каталог как для GAE, так и для CF для хранения временных файлов. Cloud Run здесь немного отличается, но давайте не будем углубляться в него, поскольку это само по себе излишнее.

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

И ВСЕГДА очищайте этот каталог после завершения работы с файлом. Также при открытии файла всегда используйте with open ..., так как это также гарантирует, что файлы не будут открытыми.

б) Загрузка последнего объекта в корзину:

Это немного сложно, и для этого нужен дополнительный код. Есть много способов добиться этого, но тот, который я использую (всегда уделяя пристальное внимание использованию памяти), - это создание объекта, который я загружаю в ведро, я получаю текущее время, использую Regex, чтобы преобразовать его во что-то например, results_22_6 .

Теперь происходит следующее: как только я перечисляю объекты из другого моего скрипта, они уже перечислены в порядке возрастания. Итак, последний элемент в списке - это последний объект.

Итак, в основном то, что я делаю, это проверяю, совпадает ли имя файла в /tmp с именем object[list.length] в ведре . Если да, то ничего не делайте, если нет, удалите старую и загрузите последнюю в корзину.

Это может быть не оптимально, но для меня это отчасти предпочтительнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...