Eventarc로 워크플로 트리거

1. 개요

이 실습에서는 Pub/Sub 주제를 Workflows 서비스에 연결하는 Eventarc 트리거를 만듭니다. Eventarc를 사용하면 서비스 간 통신을 분리할 수 있으므로 솔루션의 확장성과 이벤트 기반이 강화됩니다. Cymbal Eats에서의 주문에 대한 고객 리워드 포인트를 계산하는 비즈니스 프로세스를 실행하는 여러 단계가 포함된 워크플로를 만듭니다. 워크플로는 비공개 Cloud Run 서비스 API를 호출하여 비즈니스 로직을 실행합니다. Cloud Run 서비스가 내부 트래픽만 허용하도록 구성되어 있으며 인증이 필요합니다. 워크플로는 Pub/Sub 주제에 메시지를 게시하여 계산된 리워드 포인트를 주문 서비스에 알립니다.

c6d4337a47b55333.png

Eventarc란 무엇인가요?

Eventarc를 사용하면 기본 인프라를 구현, 맞춤설정 또는 유지보수하지 않고도 이벤트 기반 아키텍처를 빌드할 수 있습니다. Eventarc는 분리된 마이크로서비스 간의 상태 변경 흐름(이벤트)을 관리하는 표준화된 솔루션을 제공합니다. Eventarc가 트리거되면 Pub/Sub 구독을 통해 이러한 이벤트를 다양한 대상 (예: Workflows 또는 Cloud Run)을 통해 전송, 보안, 승인, 관측 가능성, 오류 처리를 자동으로 관리할 수 있습니다.

Google 이벤트 제공업체

  • 90개가 넘는 Google Cloud 제공업체 이러한 제공업체는 소스 (예: Cloud Storage)에서 직접 또는 Cloud 감사 로그 항목을 통해 이벤트를 전송합니다.
  • Pub/Sub 제공업체 이러한 제공업체는 Pub/Sub 메시지를 사용하여 Eventarc로 이벤트를 전송합니다.

서드 파티 제공업체

서드 파티 제공업체는 Eventarc 소스를 제공하는 Google 이외의 법인입니다.

Eventarc 트리거

  • Cloud Pub/Sub 이벤트. Eventarc는 Pub/Sub 주제에 게시된 메시지로 트리거될 수 있습니다.
  • Cloud 감사 로그 (CAL) 이벤트. Cloud 감사 로그는 각 Cloud 프로젝트, 폴더, 조직에 대한 관리자 활동 및 데이터 액세스 감사 로그를 제공합니다.
  • 직접 이벤트. Eventarc는 Cloud Storage 버킷 업데이트 또는 Firebase 원격 구성 템플릿 업데이트와 같은 다양한 직접 이벤트에 의해 트리거될 수 있습니다.

이벤트 대상

  • 워크플로
  • Cloud Run
  • GKE
  • Cloud Functions( 2세대)

c7ca054200edf1b3.png

Workflows란 무엇인가요?

Workflows는 마이크로서비스, 태스크, API를 통합할 수 있는 완전 관리형 서비스입니다. Workflows는 서버리스 서비스이며 수요에 맞게 확장됩니다.

Workflows 사용 사례:

  • 이벤트 기반 워크플로는 정의된 트리거에서 실행됩니다. 예를 들어 새 주문이 제출되고 고객 충성도를 계산하려는 경우가 있습니다. 또는 주문이 취소되면 이벤트가 게시될 수 있으며 관심 있는 모든 서비스에서 이벤트를 처리합니다.
  • 일괄 작업 워크플로는 Cloud Scheduler를 사용하여 정기적으로 작업을 실행합니다. 실패 상태의 메뉴 항목을 확인하고 삭제하는 야간 작업을 예로 들 수 있습니다.

Workflows는 서비스를 조정하는 워크플로에 적합합니다. 최대 1년 동안 대기 및 재시도를 포함하는 프로세스를 자동화할 수 있습니다.

Workflows의 이점:

  • 코드를 통한 구성: 코드를 작성하는 대신 로직을 구성으로 옮겨 기술 부채를 줄일 수 있습니다.
  • 아키텍처를 간소화하세요. 스테이트풀(Stateful) 워크플로를 사용하면 추가 종속 항목 없이 복잡한 서비스 통합을 시각화하고 모니터링할 수 있습니다.
  • 안정성과 내결함성을 통합합니다. 기본 또는 커스텀 재시도 로직과 다른 시스템이 실패하더라도 오류 처리를 통해 실패를 제어하여 Cloud Spanner의 모든 단계를 체크포인트로 제공하여 진행 상황을 추적할 수 있습니다.
  • 유지보수 불필요. 필요에 따라 확장: 패치를 적용하거나 유지할 필요가 없습니다. 대기 중이거나 비활성 상태인 동안 비용 없이 워크플로가 실행될 때만 비용을 지불합니다.

이 실습에서는 이벤트 기반 워크플로를 구성합니다.

학습할 내용

이 실습에서는 다음 작업을 진행하는 방법을 학습합니다.

  • Workflows를 트리거하도록 Pub/Sub 주제 및 Eventarc 구성
  • Cloud Run 서비스를 호출하고 메시지를 Pub/Sub에 게시하도록 워크플로 구성
  • Cloud Logging에서 gcloud CLI를 사용하여 Workflows 구조화된 로그를 쿼리하는 방법

기본 요건

  • 이 실습에서는 Cloud 콘솔 및 Cloud Shell 환경에 익숙하다고 가정합니다.
  • 이전 Cloud Run 및 Cloud Pub/Sub 경험은 유용하지만 필수는 아닙니다.

2. 설정 및 요구사항

Cloud 프로젝트 설정

  1. Google Cloud Console에 로그인하여 새 프로젝트를 만들거나 기존 프로젝트를 재사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 프로젝트 이름은 이 프로젝트 참가자의 표시 이름입니다. 이는 Google API에서 사용하지 않는 문자열이며 언제든지 업데이트할 수 있습니다.
  • 프로젝트 ID는 모든 Google Cloud 프로젝트에서 고유하며, 변경할 수 없습니다(설정된 후에는 변경할 수 없음). Cloud 콘솔이 고유한 문자열을 자동으로 생성합니다. 보통은 그게 뭔지 상관하지 않습니다. 대부분의 Codelab에서는 프로젝트 ID (일반적으로 PROJECT_ID로 식별됨)를 참조해야 합니다. 생성된 ID가 마음에 들지 않으면 무작위로 다른 ID를 생성할 수 있습니다. 또는 직접 시도해 보고 사용 가능한지 확인할 수도 있습니다. 이 단계 이후에는 변경할 수 없으며 프로젝트 기간 동안 유지됩니다.
  • 참고로 세 번째 값은 일부 API에서 사용하는 프로젝트 번호입니다. 이 세 가지 값에 대한 자세한 내용은 문서를 참고하세요.
  1. 다음으로 Cloud 리소스/API를 사용하려면 Cloud 콘솔에서 결제를 사용 설정해야 합니다. 이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 튜토리얼이 끝난 후에 요금이 청구되지 않도록 리소스를 종료하려면 만든 리소스를 삭제하거나 전체 프로젝트를 삭제하면 됩니다. Google Cloud 새 사용자에게는 미화 $300 상당의 무료 체험판 프로그램에 참여할 수 있는 자격이 부여됩니다.

환경 설정

검색창 오른쪽에 있는 아이콘을 클릭하여 Cloud Shell을 활성화합니다.

eb0157a992f16fa3.png

저장소를 클론하고 디렉터리로 이동한 후 아래 명령어를 복사하여 터미널에 붙여넣고 Enter 키를 누릅니다.

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

lab-setup.sh를 실행하여 필요한 종속 항목을 배포합니다.

다음 리소스가 생성됩니다.

  • AlloyDB 클러스터 및 인스턴스
  • Cloud Run 작업 및 고객 서비스의 컨테이너 이미지를 저장하는 Artifact Registry
  • AlloyDB 데이터베이스와 통신하기 위한 Cloud Run 서비스 및 작업용 VPC 액세스 커넥터
  • AlloyDB 데이터베이스를 만드는 Cloud Run 작업
  • Cloud Run 고객 서비스 - Quarkus 프레임워크를 사용하는 자바 기반 마이크로서비스
./lab-setup.sh

승인하라는 메시지가 표시되면 '승인'을 클릭합니다. 계속하려면

6356559df3eccdda.png

설정하는 데 10분 정도 걸립니다.

스크립트가 완료될 때까지 기다렸다가 다른 단계를 실행하기 전에 아래와 같이 출력하세요.

Deploying container to Cloud Run service [customer-service] in project [cymbal-eats-19227-5681] region [us-east1]
OK Deploying new service... Done.                                                   
  OK Creating Revision...
  OK Routing traffic...
Done.
Service [customer-service] revision [customer-service-00001-mid] has been deployed and is serving 100 percent of traffic.
Service URL: https://customer-service-e4p5zon5rq-ue.a.run.app

다음 섹션을 탐색한 후 돌아와서 다음 단계부터 계속할 수 있습니다.

3. 워크플로 검토

Workflows 핵심 개념

워크플로는 Workflows 구문( YAML 또는 JSON)을 사용하여 설명된 일련의 단계로 구성됩니다.

워크플로가 생성되면 배포되어 워크플로를 실행할 수 있습니다.

실행은 워크플로 정의에 포함된 로직의 단일 실행입니다. 실행되지 않은 워크플로는 비용이 발생하지 않습니다. 모든 워크플로 실행은 독립적이며 제품의 빠른 확장을 통해 많은 수의 동시 실행을 지원합니다.

실행 제어

  • 단계 - 워크플로를 만들려면 Workflows 구문을 사용하여 원하는 steps와 실행 순서를 정의합니다. 모든 워크플로에는 하나 이상의 단계가 있어야 합니다.
  • 조건 - 표현식의 값이 워크플로 실행의 흐름을 제어할 수 있도록 하는 선택 메커니즘으로 switch 블록을 사용할 수 있습니다.
  • 반복 - for 루프를 사용하여 일련의 숫자 또는 목록이나 지도와 같은 데이터 컬렉션을 반복할 수 있습니다.
  • 하위 워크플로 - 하위 워크플로는 프로그래밍 언어의 루틴 또는 함수와 유사하게 작동하므로 워크플로가 여러 번 반복되는 단계 또는 단계 집합을 캡슐화할 수 있습니다.

실행 트리거

  • 수동 - Google Cloud 콘솔 또는 Google Cloud CLI를 사용하여 명령줄에서 워크플로를 관리할 수 있습니다.
  • 프로그래매틱 - Workflows API 또는 REST API용 Cloud 클라이언트 라이브러리를 사용하여 워크플로를 관리할 수 있습니다.
  • 예약됨 - Cloud Scheduler를 사용하여 특정 일정에 따라 워크플로를 실행할 수 있습니다.

런타임 인수

런타임 시 전달된 데이터는 params 필드를 기본 워크플로 (기본 블록에 배치됨)에 추가하여 액세스할 수 있습니다. main 블록은 유효한 JSON 데이터 유형인 단일 인수를 허용합니다. params 필드는 전달하는 데이터를 워크플로에서 저장하는 데 사용하는 변수의 이름을 지정합니다.

Cloud Run 서비스 인증 워크플로

고객 서비스는 이 저장소에 포함된 샘플 애플리케이션으로, Cloud Run에서 실행되며 내부 네트워크에서만 수신되는 인증된 요청을 허용하도록 구성되어 있습니다. Cloud Run 서비스로 인증하기 위해 Google이 서명한 OpenID Connect(OIDC) 토큰을 요청에 추가하도록 Workflows를 구성합니다.

서비스 간 인증에 대한 자세한 내용은 문서를 검토하세요.

워크플로 인증은 auth 섹션을 사용하여 args 블록에서 구성됩니다.

rewardsWorkflow.yaml.tmpl

   - create_customer:
        call: http.post
        args:
          url: CUSTOMER_SERVICE_URL/customer
          auth:
            type: OIDC

워크플로 로직

고객이 존재하지 않는 경우 이 워크플로에서는 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}

fcd91b2bc5d60347.png

4. 워크플로 구성 및 배포

환경 변수 설정

export REGION=us-east1

export CUSTOMER_SERVICE_URL=$(gcloud run services describe customer-service \
  --platform managed \
  --region $REGION \
  --format=json | jq \
  --raw-output ".status.url")

echo $CUSTOMER_SERVICE_URL

워크플로 템플릿에서 서비스 URL을 바꿉니다.

sed "s@CUSTOMER_SERVICE_URL@$CUSTOMER_SERVICE_URL@g" rewardsWorkflow.yaml.tmpl > rewardsWorkflow.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)')

다음 권한을 사용하여 워크플로의 커스텀 서비스 계정을 만듭니다.

  • Cloud Run 서비스 호출
  • Call Logging API
  • Pub/Sub 주제에 메시지 게시
export WORKFLOW_SERVICE_ACCOUNT=workflows-cloudrun-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/run.invoker"

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=rewardsWorkflow.yaml \
  --service-account=${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com

워크플로 소스와 기타 세부정보(트리거 탭)를 검토합니다. 현재 이 워크플로를 실행하도록 구성된 트리거가 없습니다. 다음 단계에서 설정합니다.

d3527393fb07a9b3.png

5. Pub/Sub 주제 및 Eventarc 트리거 구성

다음으로 두 개의 Pub/Sub 주제를 만들고 Eventarc 트리거 하나를 구성합니다.

주문 서비스에서 새 주문 정보가 포함된 메시지를 order-topic에 게시합니다.

워크플로에서 주문 리워드 포인트 및 총 금액에 관한 정보가 포함된 메시지를 order-points-topic에 게시합니다. 주문 서비스(이 실습의 배포되지 않음)는 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"

Pub/Sub 메시지를 리슨하고 Workflows에 전달하는 Eventarc 트리거를 만듭니다.

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

6. 워크플로 테스트

c6d4337a47b55333.png

주문 서비스를 시뮬레이션하려면 Cloud Shell에서 Pub/Sub 주제로 메시지를 보내고 Cloud 콘솔에서 Cloud Run 고객 서비스 로그를 확인합니다.

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

aad0eae7a970316.png

7. 워크플로 구조화된 로깅

워크플로는 구조화된 로그를 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

콘솔에서 로그 탐색기를 열고 총 금액이 2달러를 초과하는 처리된 주문에 대한 쿼리를 실행합니다.

아래 쿼리를 사용하여 프로젝트 ID(qwiklabs-gcp-01-1a990bfcadb3)를 현재 프로젝트 ID로 바꿉니다.

resource.type="workflows.googleapis.com/Workflow" AND 
logName=projects/qwiklabs-gcp-01-1a990bfcadb3/logs/Workflows AND 
jsonPayload.totalAmount > 2 AND 
timestamp >= "2022-11-01T23:59:59Z" AND 
timestamp <= "2023-11-05T00:00:00Z"

샘플 출력:

22d2f4686c58724d.png

Cloud Shell을 열고 아래 명령어로 gcloud CLI를 사용하여 로그를 읽습니다.

프로젝트 ID(qwiklabs-gcp-01-1a990bfcadb3)를 현재 프로젝트 ID로 바꿉니다.

gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND logName=projects/qwiklabs-gcp-01-1a990bfcadb3/logs/Workflows AND jsonPayload.totalAmount > 2 AND timestamp >= "2022-11-01T23:59:59Z" AND timestamp <= "2023-11-05T00:00:00Z"' --limit 10 --format="table(jsonPayload.orderNumber,jsonPayload.totalAmount,jsonPayload.orderRewardPoints,jsonPayload.totalRewardPoints,jsonPayload.multiplier)"

table 형식을 사용한 샘플 출력:

35d5fd851ecde60.png

프로젝트 ID(qwiklabs-gcp-01-1a990bfcadb3)를 현재 프로젝트 ID로 바꿉니다.

gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND logName=projects/qwiklabs-gcp-01-1a990bfcadb3/logs/Workflows AND jsonPayload.totalAmount > 2 AND timestamp >= "2022-11-01T23:59:59Z" AND timestamp <= "2023-11-05T00:00:00Z"' --limit 10 --format=json | jq

json 형식을 사용한 샘플 출력:

ac7421548ea9a9f2.png

8. 고객 기록 검토

(선택사항 단계) 현재 customer-service는 내부 네트워크의 트래픽만 허용하도록 구성되어 있습니다.

아래 명령어를 실행하여 서비스 URL을 저장하고 고객 서비스에 전화하세요.

export REGION=us-east1
CUSTOMER_SERVICE_URL=$(gcloud run services describe customer-service \
    --region=$REGION \
    --format=json | jq \
    --raw-output ".status.url")

curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $CUSTOMER_SERVICE_URL/customer

액세스가 금지되었다는 오류 메시지가 표시됩니다.

<html><head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>403 Forbidden</title>
</head>
<body text=#000000 bgcolor=#ffffff>
<h1>Error: Forbidden</h1>
<h2>Access is forbidden.</h2>
<h2></h2>
</body></html>

기존 고객 레코드를 보려면 Cloud Run customer-service 인그레스 설정을 "Allow all traffic"(으)로 변경하세요. 옵션을 선택하고 '저장'을 클릭합니다.

이렇게 하면 엔드포인트가 공개되며 curl을 사용하여 Cloud Shell에서 Customer Service API를 호출할 수 있습니다.

9156e0eb0a19bc68.png

아래 명령어를 실행하여 서비스 URL을 저장하고 기존 고객을 나열합니다.

CUSTOMER_SERVICE_URL=$(gcloud run services describe customer-service \
    --region=$REGION \
    --format=json | jq \
    --raw-output ".status.url")

curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $CUSTOMER_SERVICE_URL/customer | jq

샘플 출력:

[
  {
    "id": "id1",
    "rewardPoints": 3,
    "address": "1845 Denise St",
    "city": "Mountain View",
    "createDateTime": "2022-11-11T15:56:45.487566",
    "email": "ajensen9090+eats@gmail.com",
    "name": "Angela Jensen",
    "state": "CA",
    "updateDateTime": "2022-11-11T15:56:45.866125",
    "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 -H "Authorization: Bearer $(gcloud auth print-identity-token)" $CUSTOMER_SERVICE_URL/customer | jq

로그를 확인합니다. 프로젝트 ID(qwiklabs-gcp-01-1a990bfcadb3)를 현재 프로젝트 ID로 바꿉니다.

gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND logName=projects/qwiklabs-gcp-01-1a990bfcadb3/logs/Workflows AND jsonPayload.totalAmount > 2 AND timestamp >= "2022-11-01T23:59:59Z" AND timestamp <= "2023-11-05T00:00:00Z"' --limit 10 --format="table(jsonPayload.orderNumber,jsonPayload.totalAmount,jsonPayload.orderRewardPoints,jsonPayload.totalRewardPoints,jsonPayload.multiplier)"

9. 축하합니다.

축하합니다. Codelab을 완료했습니다.

학습한 내용

  • Workflows 구성 방법
  • Workflows에 대한 Eventarc 트리거를 구성하는 방법
  • Workflows에서 Cloud Run 서비스를 호출하는 방법
  • Cloud Logging에서 구조화된 로그를 쿼리하고 gcloud CLI를 사용하는 방법을 알아봅니다.

다음 단계:

다른 Cymbal Eats Codelab 살펴보기:

삭제

이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.

프로젝트 삭제

비용이 청구되지 않도록 하는 가장 쉬운 방법은 튜토리얼에서 만든 프로젝트를 삭제하는 것입니다.