Запуск Cloud Run с помощью событий Eventarc

1. Введение

894762ebb681671c.png

Cloud Run позволяет запускать контейнеры без сохранения состояния в полностью управляемой среде. Он построен на основе открытого исходного кода Knative , что позволяет вам выбирать между запуском контейнеров либо в полностью управляемой среде с помощью Cloud Run, либо в кластере Google Kubernetes Engine с помощью Cloud Run for Anthos .

cb762f29e9183a3f.png

Eventarc упрощает подключение различных сервисов (Cloud Run, Cloud Functions, Workflows) к событиям из различных источников. Он позволяет создавать архитектуры, управляемые событиями, в которых микросервисы слабо связаны и распределены. Он также берет на себя обработку событий, их доставку, обеспечение безопасности, авторизацию и обработку ошибок, что повышает гибкость разработчиков и отказоустойчивость приложений.

В этом практическом занятии вы познакомитесь с Eventarc. В частности, вы будете отслеживать события из Pub/Sub, Cloud Storage и Cloud Audit Logs с помощью Eventarc и передавать их в службу Cloud Run.

Что вы узнаете

  • Видение Eventarc
  • Найдите мероприятия в Eventarc
  • Создайте приемник Cloud Run.
  • Создайте триггер для Pub/Sub
  • Создайте триггер для облачного хранилища.
  • Создайте триггер для журналов аудита облака.
  • Изучите пользовательский интерфейс Eventarc.

2. Видение Eventarc

Eventarc стремится доставлять события из различных источников Google, Google Cloud и сторонних сервисов в целевые хранилища событий Google Cloud.

59b147dc030b2b0b.png

Источники Google Cloud

Источники событий, являющиеся продуктами, принадлежащими Google Cloud.

Источники Google

Источники событий, являющиеся продуктами Google, такими как Gmail, Hangouts, Android Management и другие.

Пользовательские источники

Источники событий, не являющиеся продуктами Google и созданные самими конечными пользователями.

сторонние источники

Источники событий, которые не принадлежат Google и не создаются клиентами. Сюда входят популярные источники событий, такие как Check Point CloudGuard, Datadog, ForgeRock, Lacework и т. д., которые принадлежат и поддерживаются сторонними поставщиками и партнерами.

События нормализуются в соответствии с форматом CloudEvents v1.0 для обеспечения совместимости между различными сервисами. CloudEvents — это независимая от поставщиков открытая спецификация, описывающая данные событий в общих форматах, что обеспечивает совместимость между сервисами, платформами и системами.

3. Настройка и требования

Настройка среды для самостоятельного обучения

  1. Войдите в консоль Google Cloud и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Название проекта — это отображаемое имя участников данного проекта. Это строка символов, не используемая API Google, и вы можете изменить её в любое время.
  • Идентификатор проекта должен быть уникальным для всех проектов Google Cloud и неизменяемым (его нельзя изменить после установки). Консоль Cloud автоматически генерирует уникальную строку; обычно вам неважно, какая она. В большинстве практических заданий вам потребуется указать идентификатор проекта (обычно он обозначается как PROJECT_ID ), поэтому, если он вам не нравится, сгенерируйте другой случайный идентификатор или попробуйте свой собственный и посмотрите, доступен ли он. Затем он "замораживается" после создания проекта.
  • Существует третье значение — номер проекта , который используется некоторыми API. Подробнее обо всех трех значениях можно узнать в документации .
  1. Далее вам потребуется включить оплату в консоли Cloud, чтобы использовать ресурсы/API Cloud. Выполнение этого практического задания не должно стоить дорого, если вообще что-либо. Чтобы отключить ресурсы и избежать дополнительных расходов после завершения этого урока, следуйте инструкциям по «очистке», приведенным в конце практического задания. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США .

Запустить Cloud Shell

Хотя Google Cloud можно управлять удаленно с ноутбука, в этом практическом занятии вы будете использовать Google Cloud Shell — среду командной строки, работающую в облаке.

В консоли GCP щелкните значок Cloud Shell на панели инструментов в правом верхнем углу:

55efc1aaa7a4d3ad.png

Подготовка и подключение к среде займут всего несколько минут. После завершения вы должны увидеть что-то подобное:

7ffe5cbb04455448.png

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

Прежде чем начать

Внутри Cloud Shell убедитесь, что идентификатор вашего проекта указан правильно:

PROJECT_ID=your-project-id
gcloud config set project $PROJECT_ID

4. Разверните сервис Cloud Run.

Разверните службу Cloud Run для приема событий. Вам потребуется развернуть контейнер Hello от Cloud Run , который будет регистрировать содержимое CloudEvents.

Сначала включите необходимые службы для Cloud Run:

gcloud services enable run.googleapis.com

Разверните контейнер hello в Cloud Run:

REGION=us-central1
SERVICE_NAME=hello

gcloud run deploy $SERVICE_NAME \
  --allow-unauthenticated \
  --image=gcr.io/cloudrun/hello \
  --region=$REGION

В случае успеха в командной строке отобразится URL-адрес службы. Вы можете открыть URL-адрес службы в любом окне браузера, чтобы убедиться, что служба развернута.

5. Обнаружение событий

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

Чтобы посмотреть список различных типов мероприятий:

gcloud beta eventarc attributes types list

NAME                                           DESCRIPTION
google.cloud.audit.log.v1.written              Cloud Audit Log written
google.cloud.pubsub.topic.v1.messagePublished  Cloud Pub/Sub message published
google.cloud.storage.object.v1.archived         Cloud Storage: Sent when a live version of an (object versioned) object is archived or deleted.
google.cloud.storage.object.v1.deleted          Cloud Storage: Sent when an object has been permanently deleted.
google.cloud.storage.object.v1.finalized        Cloud Storage: Sent when a new object (or a new generation of an existing object).
google.cloud.storage.object.v1.metadataUpdated  Cloud Storage: Sent when the metadata of an existing object changes.

Для получения более подробной информации о каждом типе событий:

gcloud beta eventarc attributes types describe google.cloud.audit.log.v1.written

attributes: type,serviceName,methodName,resourceName
description: 'Cloud Audit Log: Sent when a log is written.'
name: google.cloud.audit.log.v1.written

Чтобы просмотреть список служб, генерирующих определенный тип событий:

gcloud beta eventarc attributes service-names list --type=google.cloud.audit.log.v1.written

SERVICE_NAME                                DISPLAY_NAME
accessapproval.googleapis.com               Access Approval
accesscontextmanager.googleapis.com         Access Context Manager
admin.googleapis.com                        Google Workspace Admin
aiplatform.googleapis.com                   AI Platform (under Vertex AI)
apigee.googleapis.com                       Apigee
apigeeconnect.googleapis.com                Apigee Connect
...
workflows.googleapis.com                    Workflows

Чтобы просмотреть список имен методов (подсобытий), которые может генерировать каждая служба:

gcloud beta eventarc attributes method-names list --type=google.cloud.audit.log.v1.written --service-name=workflows.googleapis.com

METHOD_NAME
google.cloud.workflows.v1.Workflows.CreateWorkflow
google.cloud.workflows.v1.Workflows.DeleteWorkflow
google.cloud.workflows.v1.Workflows.GetWorkflow
google.cloud.workflows.v1.Workflows.ListWorkflows
google.cloud.workflows.v1.Workflows.UpdateWorkflow
google.cloud.workflows.v1beta.Workflows.CreateWorkflow
google.cloud.workflows.v1beta.Workflows.DeleteWorkflow
google.cloud.workflows.v1beta.Workflows.GetWorkflow
google.cloud.workflows.v1beta.Workflows.ListWorkflows
google.cloud.workflows.v1beta.Workflows.UpdateWorkflow

6. Создайте триггер Pub/Sub.

Один из способов получения событий — использование Cloud Pub/Sub. Любое приложение может публиковать сообщения в Pub/Sub, и эти сообщения могут доставляться в Cloud Run через Eventarc.

Настраивать

Перед созданием триггеров необходимо включить соответствующие службы для Eventarc:

gcloud services enable eventarc.googleapis.com

Для работы триггеров также потребуется учетная запись службы. Создайте учетную запись службы:

SERVICE_ACCOUNT=eventarc-trigger-sa

gcloud iam service-accounts create $SERVICE_ACCOUNT

Создавать

Создайте триггер для фильтрации событий, публикуемых в тему Pub/Sub, и перенаправляйте их в развернутый сервис Cloud Run:

TRIGGER_NAME=trigger-pubsub

gcloud eventarc triggers create $TRIGGER_NAME \
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
  --location=$REGION \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Тест

Триггер Pub/Sub создает тему в фоновом режиме. Давайте выясним это и присвоим значение переменной:

TOPIC_ID=$(gcloud eventarc triggers describe $TRIGGER_NAME --location $REGION --format='value(transport.pubsub.topic)')

Используйте gcloud для публикации сообщения в указанную тему:

gcloud pubsub topics publish $TOPIC_ID --message="Hello World"

Сервис Cloud Run записывает в лог тело входящего сообщения. Вы можете просмотреть его в разделе «Журналы» вашего экземпляра Cloud Run:

69e0177e04a0d1af.png

Создать на основе существующей темы Pub/Sub

По умолчанию при создании триггера Pub/Sub Eventarc автоматически создает тему, которую вы можете использовать в качестве транспортной темы между вашим приложением и сервисом Cloud Run. Это удобно для быстрого и простого создания триггера на основе Pub/Sub, но иногда может потребоваться использовать уже существующую тему. Eventarc позволяет указать существующую тему Pub/Sub в том же проекте с помощью флага gcloud --transport-topic topic.

Чтобы увидеть, как это работает, создайте тему Pub/Sub, которую будете использовать в качестве темы для передачи данных:

TOPIC_ID=eventarc-topic

gcloud pubsub topics create $TOPIC_ID

Создайте триггер:

TRIGGER_NAME=trigger-pubsub-existing

gcloud eventarc triggers create $TRIGGER_NAME \
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
  --location=$REGION \
  --transport-topic=projects/$PROJECT_ID/topics/$TOPIC_ID \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Проверить срабатывание триггера можно, отправив сообщение в указанную тему:

gcloud pubsub topics publish $TOPIC_ID --message="Hello again"

7. Создайте триггер для облачного хранилища.

На этом шаге вы создадите триггер для отслеживания событий из облачного хранилища.

Настраивать

Сначала создайте хранилище (bucket) для получения событий:

BUCKET_NAME=eventarc-gcs-$PROJECT_ID

gsutil mb -l $REGION gs://$BUCKET_NAME

Предоставьте учетной записи службы роль eventarc.eventReceiver , чтобы ее можно было использовать в триггере Cloud Storage:

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --role roles/eventarc.eventReceiver \
  --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Также необходимо добавить роль pubsub.publisher в учетную запись службы Cloud Storage для запуска триггеров Cloud Storage:

SERVICE_ACCOUNT_STORAGE=$(gsutil kms serviceaccount -p $PROJECT_ID)

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member serviceAccount:$SERVICE_ACCOUNT_STORAGE \
    --role roles/pubsub.publisher

Создавать

Создайте триггер для переадресации событий создания новых файлов из хранилища в ваш сервис:

TRIGGER_NAME=trigger-storage

gcloud eventarc triggers create $TRIGGER_NAME \
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.storage.object.v1.finalized" \
  --event-filters="bucket=$BUCKET_NAME" \
  --location=$REGION \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Тест

Чтобы подтвердить успешное создание триггера, перечислите все триггеры:

gcloud eventarc triggers list

Загрузите файл в хранилище Cloud Storage:

echo "Hello World" > random.txt
gsutil cp random.txt gs://$BUCKET_NAME/random.txt

Если вы проверите журналы службы Cloud Run в Cloud Console, вы должны увидеть полученное событие:

904cfc93bb8e8df1.png

8. Создайте триггер для журналов аудита облака.

Хотя триггер Cloud Storage — лучший способ отслеживать события Cloud Storage, на этом шаге вы создадите триггер Cloud Audit Log для выполнения той же задачи.

Настраивать

Для получения событий от сервиса необходимо включить журналы аудита облака. В консоли облака выберите IAM & Admin , а затем Audit Logs в меню в левом верхнем углу. В списке сервисов отметьте Google Cloud Storage :

3c654597faed237c.png

В правой части экрана убедитесь, что выбраны параметры Admin , Read и Write , и нажмите Save ».

1deb3ad78f11dd5f.png

Создавать

Создайте триггер для переадресации событий создания новых файлов из хранилища в ваш сервис:

TRIGGER_NAME=trigger-auditlog-storage

gcloud eventarc triggers create $TRIGGER_NAME\
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.audit.log.v1.written" \
  --event-filters="serviceName=storage.googleapis.com" \
  --event-filters="methodName=storage.objects.create" \
  --event-filters-path-pattern="resourceName=/projects/_/buckets/$BUCKET_NAME/objects/*" \
  --location=$REGION \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Тест

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

gcloud eventarc triggers list

Вы должны увидеть, что в поле ACTIVE установлено значение Yes :

NAME                          TYPE                                       DESTINATION               ACTIVE
trigger-auditlog-storage  google.cloud.audit.log.v1.written              Cloud Run service: hello  Yes

Загрузите в облачное хранилище тот же файл, что и ранее:

gsutil cp random.txt gs://$BUCKET_NAME/random.txt

Если вы проверите журналы службы Cloud Run в Cloud Console, вы должны увидеть полученное событие:

7be7859bcc8976f8.png

9. Изучите пользовательский интерфейс Eventarc.

На этом этапе вы изучите пользовательский интерфейс Eventarc в консоли Google Cloud. В пользовательском интерфейсе Eventarc вы можете получить обзор всех триггеров, редактировать и удалять их, а также создавать новые триггеры прямо из консоли Google Cloud.

Перейдите в раздел Eventarc в Google Cloud:

81e139f17e0d29bf.png

Вы увидите список триггеров, которые вы создали ранее:

3240c7c830398718.png

При нажатии на триггер вы можете просмотреть его подробную информацию, отредактировать или удалить его:

b4d8bbc6601a8b9e.png

Вы также можете создать новый триггер, выбрав Create trigger и заполнив необходимые данные:

3ee290ec72f130d5.png

10. Поздравляем!

Поздравляем с завершением практического занятия!

Что мы рассмотрели

  • Видение Eventarc
  • Найдите мероприятия в Eventarc
  • Создайте приемник Cloud Run.
  • Создайте триггер для Pub/Sub
  • Создайте триггер для облачного хранилища.
  • Создайте триггер для журналов аудита облака.
  • Изучите пользовательский интерфейс Eventarc.