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

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

О практической работе

subjectПоследнее обновление: февр. 2, 2023
account_circleАвторы: Andrey Shakirov, Christopher Grant

1. Обзор

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

6c0606022b76f79d.png

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

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

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

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

85500aad65f87437.png

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

Что такое Эвентарк?

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.

Направления мероприятий

  • Рабочие процессы
  • Облачный бег
  • ГКЭ
  • Облачные функции ( 2-го поколения )

c7ca054200edf1b3.png

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

8613854df02635a3.png

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

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

Разверните необходимые зависимости, запустив gke-lab-setup.sh

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

  • Кластер и экземпляр AlloyDB
  • Кластер GKE Autopilot
./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 Autopilot

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

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

Приложению потребуется несколько минут, чтобы перейти в состояние РАБОТАЕТ.

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

развертывание.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.
  • Программное обеспечение . Облачные клиентские библиотеки для 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

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

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-topic с информацией о новых заказах.

Workflow будет публиковать сообщения в теме 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. Журналы записываются с использованием Cloud Logging API, ресурса 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

Откройте обозреватель журналов в 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
  • Как настроить рабочий процесс для публикации сообщений в Pub/Sub
  • Как запрашивать структурированные журналы рабочих процессов в Cloud Logging и с помощью интерфейса командной строки gcloud

Что дальше:

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

Очистить

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

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

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