Настройка Eventarc для запуска рабочих процессов, интегрируемых с GKE Autopilot и Pub/Sub

1. Обзор

В этой лабораторной работе вы создадите триггер Eventarc, который свяжет тему Pub/Sub со службой Workflows. Eventarc позволяет разделить взаимодействие между службами, делая ваше решение более расширяемым и событийно-ориентированным. Вы создадите рабочий процесс, включающий несколько шагов для выполнения бизнес-процесса по расчету бонусных баллов клиентов за заказы в Cymbal Eats. Рабочий процесс будет отправлять несколько запросов в приложение, работающее на GKE Autopilot, и публиковать сообщение в тему Pub/Sub, чтобы уведомить приложение Order Service о рассчитанных бонусных баллах.

6c0606022b76f79d.png

Что такое автопилот GKE?

GKE Autopilot — это режим работы в GKE, в котором Google управляет конфигурацией вашего кластера, включая узлы, масштабирование, безопасность и другие предварительно настроенные параметры. Кластеры Autopilot оптимизированы для работы с большинством производственных нагрузок и выделяют вычислительные ресурсы на основе ваших манифестов Kubernetes. Упрощенная конфигурация соответствует передовым методам и рекомендациям GKE по настройке кластера и рабочих нагрузок, масштабируемости и безопасности. Список встроенных параметров см. в сравнительной таблице Autopilot и Standard .

В GKE Standard пользователи сами управляют рабочими узлами и конфигурацией пула узлов, а обо всем остальном позаботится GKE.

Обязанности клиента и Google при работе в режиме GKE Standard

85500aad65f87437.png

В GKE Autopilot настройка и управление пулом узлов переходят в руки Google. Это позволяет вам сосредоточиться на приложениях и сервисах, работающих на кластере.

Что такое Eventarc?

Eventarc позволяет создавать архитектуры, управляемые событиями, без необходимости внедрения, настройки или обслуживания базовой инфраструктуры. Eventarc предлагает стандартизированное решение для управления потоком изменений состояния, называемых событиями, между децентрализованными микросервисами. При срабатывании Eventarc направляет эти события через подписки Pub/Sub в различные места назначения (например, рабочие процессы, Cloud Run), одновременно управляя доставкой, безопасностью, авторизацией, наблюдаемостью и обработкой ошибок.

Поставщики событий Google

  • Более 90 провайдеров Google Cloud. Эти провайдеры отправляют события либо напрямую из источника (например, Cloud Storage), либо через записи в журналах аудита Cloud.
  • Поставщики Pub/Sub. Эти поставщики отправляют события в Eventarc, используя сообщения Pub/Sub.

Сторонние поставщики

Сторонние поставщики — это организации, не входящие в Google, которые предоставляют источник данных Eventarc.

Триггеры Eventarc

  • События Cloud Pub/Sub. Eventarc может запускаться сообщениями, опубликованными в темы Pub/Sub.
  • События журналов аудита облака (CAL). Журналы аудита облака предоставляют журналы аудита действий администратора и доступа к данным для каждого облачного проекта, папки и организации.
  • Прямые события. Eventarc может запускаться различными прямыми событиями, такими как обновление хранилища Cloud Storage или обновление шаблона Firebase Remote Config.

Места проведения мероприятий

c7ca054200edf1b3.png

Что такое рабочие процессы?

Workflows — это полностью управляемый сервис, позволяющий интегрировать микросервисы, задачи и API. Workflows — это бессерверный сервис, масштабируемый в соответствии с вашими потребностями.

Варианты использования рабочих процессов:

  • Рабочие процессы, управляемые событиями, выполняются по заданным триггерам. Например, когда оформляется новый заказ и вы хотите рассчитать баллы лояльности клиента. Или когда заказ отменяется, событие может быть опубликовано, и все заинтересованные сервисы обработают его.
  • Пакетные задания запускают задачи на регулярной основе с помощью Cloud Scheduler. Например, ночное задание для проверки пунктов меню на наличие ошибок и их удаления.

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

Преимущества рабочих процессов:

  • Конфигурация важнее кода: сократите технический долг, перенеся логику в конфигурацию, а не в написание кода.
  • Упростите свою архитектуру. Stateful Workflows позволяют визуализировать и отслеживать сложные интеграции сервисов без дополнительных зависимостей.
  • Обеспечьте надежность и отказоустойчивость. Контролируйте сбои с помощью стандартной или пользовательской логики повторных попыток и обработки ошибок, даже если другие системы дают сбой — сохраняя контрольные точки на каждом этапе в Cloud Spanner, вы сможете отслеживать ход выполнения.
  • Никакого обслуживания. Масштабирование по мере необходимости: ничего не нужно обновлять или обслуживать. Платите только тогда, когда ваши рабочие процессы выполняются, без каких-либо затрат во время ожидания или простоя.

В этой лабораторной работе вы настроите рабочий процесс, управляемый событиями.

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

В этой лабораторной работе вы научитесь выполнять следующие действия:

  • Настройте тему Pub/Sub и Eventarc для запуска рабочих процессов.
  • Настройте рабочий процесс для выполнения вызовов API к приложению, работающему в GKE Autopilot.
  • Настройте рабочий процесс для публикации сообщений в систему публикации/подписки (Pub/Sub).
  • Как запрашивать структурированные журналы рабочих процессов в Cloud Logging и с помощью CLI gcloud.

Предварительные требования

  • Для выполнения этой лабораторной работы предполагается знакомство со средами Cloud Console и Cloud Shell.
  • Опыт работы с GKE и Cloud Pub/Sub приветствуется, но не является обязательным.

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

Настройка облачного проекта

  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, нажав на значок справа от строки поиска.

8613854df02635a3.png

Клонируйте репозиторий, перейдите в нужную директорию, скопируйте и вставьте приведенную ниже команду в терминал и нажмите Enter:

git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/customer-service

Для развертывания необходимых зависимостей запустите скрипт gke-lab-setup.sh

Будут созданы следующие ресурсы:

  • Кластер и экземпляр AlloyDB
  • Кластер автопилота GKE
./gke-lab-setup.sh

Если появится запрос на авторизацию, нажмите «Авторизовать», чтобы продолжить.

6356559df3eccdda.png

Настройка займет около 10 минут.

Дождитесь завершения выполнения скрипта и появления приведенного ниже результата, прежде чем приступать к следующим шагам.

NAME: client-instance
ZONE: us-central1-c
MACHINE_TYPE: e2-medium
PREEMPTIBLE:
INTERNAL_IP: 10.128.0.9
EXTERNAL_IP: 35.232.109.233
STATUS: RUNNING

3. Кластер автопилота GKE

Обзор кластера автопилота GKE

Установите переменные среды проекта:

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')

В рамках первоначальной настройки кластер был создан с помощью приведенной ниже команды (запускать эту команду необязательно):

gcloud container clusters create-auto $CLUSTER_NAME --region $REGION

Выполните команду, чтобы просмотреть созданный кластер GKE Autopilot:

gcloud container clusters list

Пример выходных данных:

772db9dd58172e0c.png

Выполните команду для сохранения учетных данных для кластера:

CLUSTER_NAME=rewards-cluster
REGION=us-central1

gcloud container clusters get-credentials $CLUSTER_NAME --region=$REGION

Развернуть приложение

Далее вам предстоит развернуть приложение для обслуживания клиентов. Это микросервис на Java, использующий фреймворк Quarkus .

Перейдите в папку cymbal-eats/customer-service и выполните следующие команды для сборки и загрузки образа контейнера:

./mvnw clean package -DskipTests

export CUSTOMER_SERVICE_IMAGE=gcr.io/$PROJECT_ID/customer-service:1.0.0

gcloud builds submit --tag $CUSTOMER_SERVICE_IMAGE .

Установите частный IP-адрес AlloyDB:

export DB_HOST=$(gcloud beta alloydb instances describe customer-instance \
    --cluster=customer-cluster \
    --region=$REGION \
    --format=json | jq \
    --raw-output ".ipAddress")

echo $DB_HOST

Выполните приведенные ниже команды, чтобы создать объект секретов Kubernetes для хранения учетных данных базы данных, которые будут использоваться приложением службы поддержки клиентов для подключения к базе данных:

DB_NAME=customers
DB_USER=postgres
DB_PASSWORD=password123

kubectl create secret generic gke-alloydb-secrets \
  --from-literal=database=$DB_NAME \
  --from-literal=username=$DB_USER \
  --from-literal=password=$DB_PASSWORD \
  --from-literal=db_host=$DB_HOST

Выполните команду для замены переменной CUSTOMER_SERVICE_IMAGE в файле deployment.yaml:

sed "s@CUSTOMER_SERVICE_IMAGE@$CUSTOMER_SERVICE_IMAGE@g" deployment.yaml.tmpl > customer-service-deployment.yaml

Выполните команду для развертывания приложения:

kubectl apply -f customer-service-deployment.yaml

Для перехода приложения в состояние RUNNING потребуется несколько секунд.

Просмотрите файл спецификации развертывания:

deployment.yaml.tmpl

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

    spec:
      containers:
      - name: customer-service
        image: CUSTOMER_SERVICE_IMAGE
        resources:
          requests:
            cpu: 250m
            memory: 512Mi
            ephemeral-storage: 512Mi
          limits:
            cpu: 500m
            memory: 1024Mi
            ephemeral-storage: 1Gi

Выполните команду для создания внешнего IP-адреса, который будет использоваться в рабочем процессе:

SERVICE_NAME=customer-service

kubectl expose deployment $SERVICE_NAME \
  --type LoadBalancer --port 80 --target-port 8080

Выполните команду для проверки созданных ресурсов:

kubectl get all

Пример выходных данных:

179a23bd33793924.png

4. Проверка рабочего процесса

Основные концепции рабочих процессов

Рабочий процесс состоит из последовательности шагов, описанных с использованием синтаксиса рабочих процессов ( YAML или JSON ).

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

Выполнение — это однократный запуск логики, содержащейся в определении рабочего процесса. Рабочий процесс, который не был выполнен, не влечет за собой никаких затрат. Все выполнения рабочих процессов независимы друг от друга, а быстрое масштабирование продукта позволяет осуществлять большое количество одновременных выполнений.

Контроль исполнения

  • Этапы — Для создания рабочего процесса необходимо определить желаемые steps и порядок выполнения, используя синтаксис «Рабочие процессы». Каждый рабочий процесс должен содержать как минимум один этап.
  • Условия — Вы можете использовать блок switch в качестве механизма выбора, позволяющего значению выражения управлять ходом выполнения рабочего процесса.
  • Итерации — Вы можете использовать цикл for для перебора последовательности чисел или набора данных, таких как список или карта.
  • Вложенные рабочие процессы — Вложенный рабочий процесс работает аналогично подпрограмме или функции в языке программирования, позволяя инкапсулировать шаг или набор шагов, которые ваш рабочий процесс будет повторять несколько раз.

Запуск выполнения

  • Ручной режим — Вы можете управлять рабочими процессами как из консоли Google Cloud, так и из командной строки с помощью Google Cloud CLI.
  • Программное управление — для управления рабочими процессами можно использовать облачные клиентские библиотеки для API рабочих процессов или REST API.
  • Запланированные запуски — Вы можете использовать Cloud Scheduler для запуска рабочего процесса по заданному расписанию.

Аргументы времени выполнения

Данные, передаваемые во время выполнения, можно получить доступ, добавив поле params в основной рабочий процесс (размещенный в главном блоке). Главный блок принимает один аргумент, представляющий собой любой допустимый тип данных JSON. Поле params задает имя переменной, которую рабочий процесс использует для хранения передаваемых данных.

Логика рабочего процесса

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

    - calculate_multiplier:
        switch:
          - condition: ${totalAmount < 10}
            steps:
              - set_multiplier1:
                  assign:
                    - multiplier: 2
          - condition: ${totalAmount >= 10 and totalAmount < 25}
            steps:
              - set_multiplier2:
                  assign:
                    - multiplier: 3
          - condition: ${totalAmount >= 25}
            steps:
              - set_multiplier3:
                  assign:
                    - multiplier: 5
    - calculate_rewards:
        assign:
            - rewardPoints: ${customerRecord.rewardPoints + multiplier}

99f9cf1076c03fb6.png

5. Настройка и развертывание рабочего процесса

Выполните команду, чтобы просмотреть внешний IP-адрес службы:

kubectl get svc

Пример выходных данных:

fe5cfec2bc836a5f.png

Установите указанную ниже переменную среды, используя значение внешнего IP-адреса из предыдущего вывода.

CUSTOMER_SERVICE_URL=http://$(kubectl get svc customer-service -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')

Замените URL-адрес приложения «Служба поддержки клиентов» в шаблоне рабочего процесса:

sed "s@CUSTOMER_SERVICE_URL@$CUSTOMER_SERVICE_URL@g" gkeRewardsWorkflow.yaml.tmpl > gkeRewardsWorkflow.yaml

Укажите местоположение переменных среды службы и проекта Workflows:

gcloud config set workflows/location ${REGION}

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')

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

  • API для регистрации звонков
  • Публиковать сообщения в тему PubSub
export WORKFLOW_SERVICE_ACCOUNT=workflows-sa

gcloud iam service-accounts create ${WORKFLOW_SERVICE_ACCOUNT}

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member "serviceAccount:${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com" \
  --role "roles/logging.logWriter"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member "serviceAccount:${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com" \
  --role "roles/pubsub.publisher"

Разверните рабочий процесс. Рабочий процесс настроен на использование учетной записи службы, созданной на предыдущем шаге:

export WORKFLOW_NAME=rewardsWorkflow

gcloud workflows deploy ${WORKFLOW_NAME} \
  --source=gkeRewardsWorkflow.yaml \
  --service-account=${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com

Проверьте источник рабочего процесса и другие детали (вкладка «Триггеры»). В данный момент для выполнения этого рабочего процесса не настроены триггеры. Вы настроите их на следующем шаге.

66ba7ebbde76d5a6.png

6. Настройте темы Pub/Sub и триггер Eventarc.

Далее вам нужно будет создать две темы Pub/Sub и настроить один триггер Eventarc.

Приложение Order Service будет публиковать сообщения в order-topic с информацией о новых заказах.

Рабочий процесс будет публиковать сообщения в order-points-topic с информацией о бонусных баллах за заказ и общей сумме. Сервис заказов (не являющийся частью данной лабораторной работы) предоставляет конечную точку, которая используется подпиской Push на order-points-topic, для обновления бонусных баллов и общей суммы по каждому заказу.

Создание новых тем Pub/Sub:

export TOPIC_ID=order-topic
export ORDER_POINTS_TOPIC_ID=order-points-topic
gcloud pubsub topics create $TOPIC_ID --project=$PROJECT_ID
gcloud pubsub topics create $ORDER_POINTS_TOPIC_ID --project=$PROJECT_ID

Укажите местоположение для сервиса Eventarc:

gcloud config set eventarc/location ${REGION}

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

export TRIGGER_SERVICE_ACCOUNT=eventarc-workflow-sa

gcloud iam service-accounts create ${TRIGGER_SERVICE_ACCOUNT}

Предоставьте учетной записи службы доступ для выполнения рабочих процессов.

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
  --member="serviceAccount:${TRIGGER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
  --role="roles/workflows.invoker"

Создайте триггер Eventarc для прослушивания сообщений Pub/Sub и их доставки в рабочие процессы.

gcloud eventarc triggers create new-orders-trigger \
  --destination-workflow=${WORKFLOW_NAME} \
  --destination-workflow-location=${REGION} \
  --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
  --service-account="${TRIGGER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
  --transport-topic=$TOPIC_ID

Пример выходных данных:

Creating trigger [new-orders-trigger] in project [qwiklabs-gcp-01-1a990bfcadb3], location [us-east1]...done.     
Publish to Pub/Sub topic [projects/qwiklabs-gcp-01-1a990bfcadb3/topics/order-topic] to receive events in Workflow [rewardsWorkflow].
WARNING: It may take up to 2 minutes for the new trigger to become active.

В обзоре создан триггер Eventarc .

bda445561ad5f4.png

Проверка создала подписку для триггера.

3fccdda7d5526597.png

Проанализированы изменения в рабочем процессе . Добавлен новый триггер.

23d338abc16eaac8.png

7. Процесс тестирования

6c0606022b76f79d.png

Для имитации работы службы обработки заказов вы будете отправлять сообщения в топик Pub/Sub из Cloud Shell и проверять журналы службы поддержки клиентов в консоли Cloud.

export TOPIC_ID=order-topic

gcloud pubsub topics publish $TOPIC_ID --message '{"userId":"id1","orderNumber":123456,"name":"Angela Jensen","email":"ajensen9090+eats@gmail.com","address":"1845 Denise St","city":"Mountain View","state":"CA","zip":"94043","orderItems":[{"id":7,"createDateTime":"2022-03-17T21:51:44.968584","itemImageURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","itemName":"Curry Plate","itemPrice":12.5,"itemThumbnailURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","spiceLevel":0,"status":"Ready","tagLine":"Spicy touch for your taste buds","updateDateTime":"2022-03-18T01:30:29.340584","inventory":8,"quantity":1}]}'

Пример выходных данных:

messageIds:
- '5063709859203105'

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

1e802826c700cc3e.png

57ff9705bf507fb0.png

8. Структурированное ведение журналов рабочих процессов

Рабочий процесс настроен на запись структурированных логов в формате JSON. Логи записываются с использованием API Cloud Logging, ресурса workflows.googleapis.com/Workflow и под именем файла projects/${PROJECT_ID}/logs/Workflows .

Ознакомьтесь с настройками ведения журналов ниже.

    - log_totalAmount:
        call: sys.log
        args:
            json:
              orderNumber: ${order.orderNumber}
              totalAmount: ${totalAmount}
              multiplier: ${multiplier}
              totalRewardPoints: ${rewardPoints}
              orderRewardPoints: ${orderRewardPoints}
            severity: INFO

Откройте Logs Explorer в Cloud Console и выполните запрос, чтобы найти обработанные заказы с общей суммой более 2 долларов.

Чтобы отобразить поле для поискового запроса, нажмите кнопку «Показать запрос».

f0a57ff3d10bad2.png

resource.type="workflows.googleapis.com/Workflow" AND 
jsonPayload.totalAmount > 2 AND 
timestamp >= "2023-01-01T00:00:00Z" AND 
timestamp <= "2024-12-31T23:59:59Z"

Пример выходных данных:

9093f87159f1b928.png

Откройте Cloud Shell и используйте интерфейс командной строки gcloud для чтения журналов с помощью приведенных ниже команд.

gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND jsonPayload.totalAmount > 2 AND timestamp >= "2023-01-01T00:00:00Z" AND timestamp <= "2023-12-31T23:59:59Z"' --limit 10 --format="table(jsonPayload.orderNumber,jsonPayload.totalAmount,jsonPayload.orderRewardPoints,jsonPayload.totalRewardPoints,jsonPayload.multiplier)"

Пример вывода в table формате:

35d5fd851ecde60.png

Выполните указанную ниже команду, чтобы получить логи в формате JSON:

gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND jsonPayload.totalAmount > 2 AND timestamp >= "2023-01-01T00:00:00Z" AND timestamp <= "2023-12-31T23:59:59Z"' --limit 10 --format=json | jq

Пример выходных данных в формате json :

ac7421548ea9a9f2.png

9. Проверка клиентских записей

(Необязательные шаги)

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

CUSTOMER_SERVICE_URL=http://$(kubectl get svc customer-service -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')

curl $CUSTOMER_SERVICE_URL/customer | jq

Пример выходных данных:

[
  {
    "address": "1845 Denise St",
    "city": "Mountain View",
    "createDateTime": "2023-01-31T17:22:08.853644",
    "email": "ajensen9090+eats@gmail.com",
    "id": "id1",
    "name": "Angela Jensen",
    "rewardPoints": 4,
    "state": "CA",
    "updateDateTime": "2023-01-31T17:22:09.652117",
    "zip": "94043"
  }
]

Выполните команду для публикации нового заказа несколько раз и проверьте бонусные баллы клиента с помощью команды curl.

Опубликовать сообщение о новом заказе:

export TOPIC_ID=order-topic
gcloud pubsub topics publish $TOPIC_ID --message '{"userId":"id1","orderNumber":123456,"name":"Angela Jensen","email":"ajensen9090+eats@gmail.com","address":"1845 Denise St","city":"Mountain View","state":"CA","zip":"94043","orderItems":[{"id":7,"createDateTime":"2022-03-17T21:51:44.968584","itemImageURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","itemName":"Curry Plate","itemPrice":12.5,"itemThumbnailURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","spiceLevel":0,"status":"Ready","tagLine":"Spicy touch for your taste buds","updateDateTime":"2022-03-18T01:30:29.340584","inventory":8,"quantity":1}]}'

Подтверждение начисления бонусных баллов клиентам:

curl $CUSTOMER_SERVICE_URL/customer | jq

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

gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND jsonPayload.totalAmount > 2 AND timestamp >= "2023-01-01T00:00:00Z" AND timestamp <= "2023-12-31T23:59:59Z"' --limit 10 --format="table(jsonPayload.orderNumber,jsonPayload.totalAmount,jsonPayload.orderRewardPoints,jsonPayload.totalRewardPoints,jsonPayload.multiplier)"

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

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

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

  • Как настроить темы Pub/Sub и Eventarc для запуска рабочих процессов
  • Как настроить рабочий процесс для выполнения вызовов API к приложению, работающему в GKE Autopilot
  • Как настроить рабочий процесс для публикации сообщений в Pub/Sub
  • Как запрашивать структурированные журналы рабочих процессов в Cloud Logging и с помощью CLI gcloud.

Что дальше:

Ознакомьтесь с другими обучающими материалами Cymbal Eats:

Уборка

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

Удаление проекта

Самый простой способ избежать выставления счетов — удалить проект, созданный для этого урока.