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

1. Введение

894762ebb681671c.png

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

cb762f29e9183a3f.png

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

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

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

  • Видение Eventarc
  • Откройте для себя события в Eventarc
  • Создайте приемник Cloud Run
  • Создайте триггер для Pub/Sub
  • Создайте триггер для Cloud Storage
  • Создайте триггер для журналов облачного аудита.
  • Изучите пользовательский интерфейс 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 Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

Запустить Cloud Shell

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

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

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

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

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

В 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 в том же проекте с помощью флага --transport-topic gcloud.

Чтобы увидеть, как это работает, создайте тему 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. Создайте триггер облачного хранилища.

На этом этапе вы создадите триггер для прослушивания событий из Cloud Storage.

Настраивать

Сначала создайте корзину для получения событий от:

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, чтобы делать то же самое.

Настраивать

Чтобы получать события от службы, вам необходимо включить журналы облачного аудита. В облачной консоли выберите 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

Загрузите тот же файл в корзину Cloud Storage, что и ранее:

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

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

7be7859bcc8976f8.png

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

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

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

81e139f17e0d29bf.png

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

3240c7c830398718.png

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

b4d8bbc6601a8b9e.png

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

3ee290ec72f130d5.png

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

Поздравляем с завершением работы над кодом.

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

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