Развернуть контейнер в Cloud Run после автоматической отправки в реестр артефактов
Я хочу установить соединение (без написания кода) между Google Cloud Artifact Registry и Cloud Run. Поэтому при каждом нажатии я хочу создавать / обновлять службу в Cloud Run с тем же именем.
Это возможно?
3 ответа
Нет, не можешь. Система, отправляющая образ, должна сразу после запуска развертывания новой версии Cloud Run с новым образом. то
latest
отметьте, если хотите.
Никакие автоматические действия невозможны при push-событии в реестре артефактов.
В настоящее время существует два разных способа автоматического выполнения кода при загрузке новых артефактов в реестр артефактов:
Первый вариант: облачная функция, запускаемая Pub/Sub.
Реестр артефактов публикует сообщения о новых вставленных и удаленных артефактах в теме Pub/Sub.gcr
. Обратите внимание, что вам, возможно, придется создать эту тему самостоятельно.
Чтобы реагировать на изменения артефактов, вы можете создать облачную функцию, которая активируется сообщениями, отправленными в эту тему. Обратите внимание, что вам нужно будет фильтровать полученные сообщения поattributes.action=="INSERT"
внутри вашей облачной функции действовать только при создании новых артефактов, а не при их удалении.
Дополнительную информацию об этом можно найти в документации GCP: https://cloud.google.com/artifact-registry/docs/configure-notifications .
Второй вариант: облачная функция, запускаемая Eventarc.
Используя Eventarc, вы можете реагировать на определенные события, например, на загрузку Docker-контейнера в реестр артефактов. Для этого обязательно включите журналы аудита доступа к данным для реестра артефактов, поскольку Eventarc поддерживает только события реестра артефактов на основе журналов аудита: https://cloud.google.com/logging/docs/audit/configure-data-access# конфигурация-консоль-включить
Соответствующим методом реагирования для вашего варианта использования должен бытьDocker-PutManifest
. См. https://cloud.google.com/eventarc/docs/event-types#artifact-registry для получения полной документации доступных методов.
Чтобы развернуть облачную функцию, запускаемую Eventarc:
gcloud functions deploy <YOUR_FUNCTION_NAME> \
--gen2 \
--trigger-event-filters="type=google.cloud.audit.log.v1.written" \
--trigger-event-filters="serviceName=artifactregistry.googleapis.com" \
--trigger-event-filters="methodName=Docker-PutManifest"
...
Дополнительную информацию об этом см. на странице https://cloud.google.com/functions/docs/calling/eventarc#deployment .
Я бы посоветовал вам подумать о Реестре контейнеров, тогда вы можете подключать автоматические события.