Краткое резюме: В настоящее время каждый месяц, когда 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. И я не уверен, что это лучший способ сделать это.
Я не часто программирую виртуальные машины напрямую, но я предполагал, что Google публикует события (EventArc) всякий раз, когда отправляет новые образы Compute Engine. Мне не удалось найти доказательства этого, но я думаю, что это стоит изучить... кажется, это очевидное уведомление, которое нужно автоматизировать. Затем это можно использовать в качестве триггера для вашего процесса.
Я соглашаюсь с вариантом контейнеризации и запускаю скрипт Python в Cloud Run. Кроме того, @DazWilkin я тоже не думаю, что Eventarc будет работать. Он фиксирует события в ВАШЕМ проекте, но в случае с изображениями Google он публикуется в проекте, управляемом Google, поэтому триггер событий отсутствует.
@guillaume-blaquiere ах, разочарование, это было бы очень полезно, спасибо за разъяснения.
В любом случае, для большинства из них расписание похоже на месяц: cloud.google.com/compute/docs/images/…
Большое спасибо вам обоим! Я успешно реализовал это с помощью заданий Cloud Run. Ежемесячный график точен, но они редко выходят в один и тот же день месяца, последний набор был 20240711, а новые изображения появились сегодня с суффиксом 20240819. Мне нужно посмотреть затраты на это. Взимает ли Google плату за каждый запуск задания в облаке или сборку в облаке? Еще раз спасибо за вклад, ребята.
Посмотрите на это Ссылка1 и Ссылка2.
Посмотрев на свою реализацию и подумав об этом, я понял, что это немного сложнее, чем нужно.
Я воссоздал все в сборке Cloud, удалив задание запуска облака и контейнер докеров. Теперь у меня есть издатель/подписчик, который прослушивает событие, а Cloud Scheduler настроен на один раз в неделю для отправки сообщения издателю/подписчику.
Затем я просто настроил триггер Cloud Build, который прослушивает эту публикацию/подписку, у меня есть встроенный в триггер мой cloudbuild.yaml. Файл yaml загружает скрипт Python, который определяет, были ли удалены новые изображения, а также все файлы упаковщика. После этого тот же процесс: если новых изображений нет, он завершается, если новые изображения обнаруживаются, он обновляет файл переменных упаковщика и запускает упаковщик. По сути удалил целый слой кода. Ваше здоровье!
Ваш вопрос будет требовать мнений и, скорее всего, будет отклонен и/или закрыт здесь. Один из вариантов, который вы можете рассмотреть (!), — это контейнеризировать ваше приложение Python, развернуть его в Cloud Run как задание и выполнять его по расписанию (с помощью Cloud Scheduler).