Как бы вы выполнили скрипт Python, расположенный в корзине GCP, по расписанию?

Краткое резюме: В настоящее время каждый месяц, когда Google выпускает свои последние собственные образы (Windows 2016, 2019, 2022), мы вручную запускаем упаковщик для этих образов и создаем наши собственные настроенные изображения, которые загружаются обратно в GCP, где мы можем развертывать машины из этих пользовательских образов. Собственные образы называются Win-2016-20240702, где последние 8 символов — это дата выпуска.

Мы пытаемся полностью автоматизировать процесс. Я установил: 1. Docker-контейнер, на котором работает последний образ Packer в реестре контейнеров. 2. Скрипт Python, который сравнивает последние собственные изображения Google с нашими пользовательскими изображениями, и если есть разница в имени (означает, что новые изображения удалены), он обновит файл переменных Packer, расположенный в корзине GCP, новым источником изображения. и наше собственное имя изображения. Затем он отправляет облачную сборку, содержащую файл конфигурации Packer и обновленный файл переменных, генерируя новые пользовательские изображения. (Извлечение остальных файлов из корзины GCP)

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

Или, что еще лучше, есть ли способ автоматически запускать сценарий Python при появлении новых изображений?

Я подумал, может быть, попробовать использовать облачную функцию и использовать облачный планировщик? Любая помощь будет здорово, спасибо!

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

Ваш вопрос будет требовать мнений и, скорее всего, будет отклонен и/или закрыт здесь. Один из вариантов, который вы можете рассмотреть (!), — это контейнеризировать ваше приложение Python, развернуть его в Cloud Run как задание и выполнять его по расписанию (с помощью Cloud Scheduler).

DazWilkin 17.08.2024 04:39

Я не часто программирую виртуальные машины напрямую, но я предполагал, что Google публикует события (EventArc) всякий раз, когда отправляет новые образы Compute Engine. Мне не удалось найти доказательства этого, но я думаю, что это стоит изучить... кажется, это очевидное уведомление, которое нужно автоматизировать. Затем это можно использовать в качестве триггера для вашего процесса.

DazWilkin 17.08.2024 04:40

Я соглашаюсь с вариантом контейнеризации и запускаю скрипт Python в Cloud Run. Кроме того, @DazWilkin я тоже не думаю, что Eventarc будет работать. Он фиксирует события в ВАШЕМ проекте, но в случае с изображениями Google он публикуется в проекте, управляемом Google, поэтому триггер событий отсутствует.

guillaume blaquiere 17.08.2024 11:03

@guillaume-blaquiere ах, разочарование, это было бы очень полезно, спасибо за разъяснения.

DazWilkin 17.08.2024 18:05

В любом случае, для большинства из них расписание похоже на месяц: cloud.google.com/compute/docs/images/…

guillaume blaquiere 17.08.2024 22:57

Большое спасибо вам обоим! Я успешно реализовал это с помощью заданий Cloud Run. Ежемесячный график точен, но они редко выходят в один и тот же день месяца, последний набор был 20240711, а новые изображения появились сегодня с суффиксом 20240819. Мне нужно посмотреть затраты на это. Взимает ли Google плату за каждый запуск задания в облаке или сборку в облаке? Еще раз спасибо за вклад, ребята.

Matt 20.08.2024 02:13

Посмотрите на это Ссылка1 и Ссылка2.

Sandeep Vokkareni 20.08.2024 13:01
Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
0
7
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Посмотрев на свою реализацию и подумав об этом, я понял, что это немного сложнее, чем нужно.

Я воссоздал все в сборке Cloud, удалив задание запуска облака и контейнер докеров. Теперь у меня есть издатель/подписчик, который прослушивает событие, а Cloud Scheduler настроен на один раз в неделю для отправки сообщения издателю/подписчику.

Затем я просто настроил триггер Cloud Build, который прослушивает эту публикацию/подписку, у меня есть встроенный в триггер мой cloudbuild.yaml. Файл yaml загружает скрипт Python, который определяет, были ли удалены новые изображения, а также все файлы упаковщика. После этого тот же процесс: если новых изображений нет, он завершается, если новые изображения обнаруживаются, он обновляет файл переменных упаковщика и запускает упаковщик. По сути удалил целый слой кода. Ваше здоровье!

Другие вопросы по теме