1. 개요
이 실습에서는 Pub/Sub 주제를 Workflows 서비스에 연결하는 Eventarc 트리거를 만듭니다. Eventarc를 사용하면 서비스 간 통신을 분리하여 솔루션을 더 확장 가능하고 이벤트 기반으로 만들 수 있습니다. Cymbal Eats에서 주문한 고객의 리워드 포인트를 계산하는 비즈니스 프로세스를 실행하는 여러 단계가 포함된 워크플로를 만듭니다. 워크플로는 GKE Autopilot에서 실행되는 애플리케이션에 여러 요청을 전송하고 Pub/Sub 주제에 메시지를 게시하여 주문 서비스 애플리케이션에 계산된 리워드 포인트를 알립니다.

GKE Autopilot이란 무엇일까요?
GKE Autopilot은 Google이 노드, 확장, 보안, 기타 사전 구성된 설정을 포함한 클러스터 구성을 관리하는 GKE의 작동 모드입니다. Autopilot 클러스터는 대부분의 프로덕션 워크로드를 실행하고 Kubernetes 매니페스트에 따라 컴퓨팅 리소스를 프로비저닝하도록 최적화되어 있습니다. 간소화된 구성은 클러스터 및 워크로드 설정, 확장성, 보안에 대한 GKE 권장사항을 따릅니다. 기본 제공 설정 목록은 Autopilot 및 Standard 비교 표를 참고하세요.
GKE Standard에서는 사용자가 워커 노드와 노드 풀 구성을 관리하고 나머지는 GKE에서 처리합니다.
GKE Standard 모드에서 실행할 때 고객의 책임과 Google의 책임

GKE Autopilot을 사용하면 노드 풀 구성 및 관리는 Google의 책임입니다. 이를 통해 클러스터에서 실행되는 애플리케이션과 서비스에 집중할 수 있습니다.
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 이벤트 Pub/Sub 주제에 게시된 메시지로 Eventarc가 트리거될 수 있습니다.
- Cloud 감사 로그 (CAL) 이벤트 Cloud 감사 로그는 클라우드 프로젝트, 폴더, 조직별로 관리자 활동 및 데이터 액세스 감사 로그를 제공합니다.
- 직접 이벤트 Cloud Storage 버킷 업데이트나 Firebase 원격 구성 템플릿 업데이트와 같은 다양한 직접 이벤트에 의해 Eventarc가 트리거될 수 있습니다.
이벤트 대상
- 워크플로
- Cloud Run
- GKE
- Cloud Functions( 2세대)

Workflows란 무엇일까요?
Workflows는 마이크로서비스, 작업, API를 통합할 수 있는 완전 관리형 서비스입니다. Workflows는 서버리스 서비스이며 수요에 맞게 확장됩니다.
워크플로 사용 사례:
- 이벤트 기반 워크플로는 정의된 트리거에서 실행됩니다. 예를 들어 신규 주문이 제출되었을 때 고객 충성도 포인트를 계산하려는 경우입니다. 또는 주문이 취소되면 이벤트가 게시되고 관심 있는 모든 서비스가 이벤트를 처리합니다.
- 일괄 작업 워크플로는 Cloud Scheduler를 사용하여 정기적으로 작업을 실행합니다. 예를 들어 실패한 상태의 메뉴 항목을 확인하고 삭제하는 야간 작업이 있습니다.
Workflows는 서비스를 조정하는 워크플로에 적합합니다. 최대 1년까지 대기 및 재시도가 포함된 프로세스를 자동화할 수 있습니다.
워크플로의 이점:
- 코드보다 구성: 코드를 작성하는 대신 로직을 구성으로 이동하여 기술 부채를 줄입니다.
- 아키텍처를 간소화합니다. 스테이트풀(Stateful) Workflows를 사용하면 추가 종속 항목 없이도 복잡한 서비스 통합을 시각화하고 모니터링할 수 있습니다.
- 안정성 및 내결함성 통합 다른 시스템에 장애가 발생해도 기본 또는 커스텀 재시도 로직과 오류 처리를 통해 장애를 제어할 수 있습니다. 진행률을 추적할 수 있도록 모든 단계에서 Cloud Spanner를 체크포인트로 지정합니다.
- 유지보수 불필요. 필요에 따라 확장하세요. 패치나 유지보수가 필요하지 않습니다. 워크플로가 실행될 때만 비용이 발생하며, 대기 또는 비활성 상태이면 추가 비용이 발생하지 않습니다.
이 실습에서는 이벤트 기반 워크플로를 구성합니다.
학습할 내용
이 실습에서는 다음 작업을 진행하는 방법을 학습합니다.
- Workflows를 트리거하도록 Pub/Sub 주제 및 Eventarc 구성
- GKE Autopilot에서 실행되는 애플리케이션에 API 호출을 실행하도록 워크플로 구성
- Pub/Sub에 메시지를 게시하도록 워크플로 구성
- Cloud Logging에서 gcloud CLI를 사용하여 Workflows 구조화된 로그를 쿼리하는 방법
기본 요건
- 이 실습에서는 Cloud 콘솔 및 Cloud Shell 환경에 익숙하다고 가정합니다.
- 이전 GKE 및 Cloud Pub/Sub 경험이 있으면 도움이 되지만 필수는 아닙니다.
2. 설정 및 요구사항
Cloud 프로젝트 설정
- Google Cloud Console에 로그인하여 새 프로젝트를 만들거나 기존 프로젝트를 재사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.



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

저장소를 클론하고 디렉터리로 이동한 후 아래 명령어를 복사하여 터미널에 붙여넣고 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
승인하라는 메시지가 표시되면 '승인'을 클릭하여 계속합니다.

설정에는 약 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 Autopilot 클러스터
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
샘플 출력:

다음 명령어를 실행하여 클러스터의 사용자 인증 정보를 저장합니다.
CLUSTER_NAME=rewards-cluster
REGION=us-central1
gcloud container clusters get-credentials $CLUSTER_NAME --region=$REGION
애플리케이션 배포
다음으로 고객 서비스 애플리케이션을 배포합니다. Quarkus 프레임워크를 사용하는 Java 기반 마이크로서비스입니다.
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 .
AlloyDB 비공개 IP 주소를 설정합니다.
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
명령어를 실행하여 deployment.yaml 파일에서 CUSTOMER_SERVICE_IMAGE를 바꿉니다.
sed "s@CUSTOMER_SERVICE_IMAGE@$CUSTOMER_SERVICE_IMAGE@g" deployment.yaml.tmpl > customer-service-deployment.yaml
명령어를 실행하여 애플리케이션을 배포합니다.
kubectl apply -f customer-service-deployment.yaml
애플리케이션이 실행 상태로 전환되는 데 약간의 시간이 걸립니다.
배포 사양 파일을 검토합니다.
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
샘플 출력:

4. 검토 워크플로
Workflows 핵심 개념
워크플로는 Workflows 구문( YAML 또는 JSON)을 사용하여 기술되는 일련의 단계들로 구성됩니다.
워크플로가 생성된 후 배포되어 실행할 수 있도록 준비됩니다.
실행은 워크플로 정의에 포함된 논리의 단일 실행을 의미합니다. 실행되지 않은 워크플로는 비용이 발생하지 않습니다. 모든 워크플로 실행은 독립적이며 제품의 빠른 확장 덕분에 다수의 동시 실행이 가능합니다.
실행 제어
- 단계 - 워크플로를 만들려면 Workflows 구문을 사용하여 원하는
steps와 실행 순서를 정의합니다. 모든 워크플로에는 단계가 하나 이상 있어야 합니다. - 조건 - 표현식의 값을 허용하는 선택 메커니즘으로
switch블록을 사용하여 워크플로의 실행 흐름을 제어할 수 있습니다. - 반복 -
for루프를 사용하여 숫자 시퀀스 또는 목록이나 맵과 같은 데이터 모음을 통해 반복할 수 있습니다. - 하위 워크플로 - 하위 워크플로는 프로그래밍 언어의 루틴 또는 함수와 비슷하게 작동하며, 워크플로가 여러 번 반복하는 단계 또는 단계 집합을 캡슐화할 수 있습니다.
실행 트리거
- 수동 - Google Cloud 콘솔에서 또는 Google Cloud CLI를 사용하여 명령줄에서 워크플로를 관리할 수 있습니다.
- 프로그래매틱 - Workflows API용 Cloud 클라이언트 라이브러리 또는 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}

5. 워크플로 구성 및 배포
명령어를 실행하여 서비스의 외부 IP 주소를 확인합니다.
kubectl get svc
샘플 출력:

이전 출력의 외부 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)')
다음 권한으로 워크플로의 커스텀 서비스 계정을 만듭니다.
- Logging 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
워크플로 소스 및 기타 세부정보(트리거 탭)를 검토합니다. 현재 이 워크플로를 실행하도록 구성된 트리거가 없습니다. 다음 단계에서 설정합니다.

6. Pub/Sub 주제 및 Eventarc 트리거 구성
다음으로 Pub/Sub 주제 2개를 만들고 Eventarc 트리거 1개를 구성합니다.
주문 서비스 애플리케이션은 새 주문에 관한 정보가 포함된 메시지를 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 트리거를 검토합니다.

트리거에 대해 생성된 구독을 검토합니다.

워크플로 측의 변경사항을 검토합니다. 새 트리거가 추가되었습니다.

7. 워크플로 테스트

주문 서비스를 시뮬레이션하려면 Cloud Shell에서 Pub/Sub 주제로 메시지를 전송하고 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'
워크플로 실행 세부정보와 로그를 검토합니다.


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달러를 초과하는 처리된 주문을 찾는 쿼리를 실행합니다.
검색어 필드를 표시하려면 '쿼리 표시'를 클릭합니다.

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

Cloud Shell을 열고 아래 명령어를 사용하여 gcloud CLI로 로그를 읽습니다.
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 형식을 사용한 샘플 출력:

아래 명령어를 실행하여 로그를 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 형식을 사용한 샘플 출력:

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. 축하합니다.
축하합니다. Codelab을 완료했습니다.
학습한 내용
- Pub/Sub 주제 및 Eventarc를 구성하여 워크플로를 트리거하는 방법
- GKE Autopilot에서 실행되는 애플리케이션에 API 호출을 수행하도록 워크플로를 구성하는 방법
- Workflow를 구성하여 Pub/Sub에 메시지를 게시하는 방법
- Cloud Logging에서 gcloud CLI를 사용하여 Workflows 구조화된 로그를 쿼리하는 방법
다음 단계:
다른 Cymbal Eats Codelab을 살펴보세요.
- Eventarc로 Cloud Workflows 트리거하기
- Cloud Storage에서 이벤트 처리 트리거
- Cloud Run에서 비공개 Cloud SQL에 연결
- Cloud Run에서 완전 관리형 데이터베이스에 연결
- IAP (Identity-Aware Proxy)를 통한 서버리스 애플리케이션 보호하기
- Cloud Scheduler로 Cloud Run 작업 트리거하기
- Cloud Run에 안전하게 배포하기
- Cloud Run 인그레스 트래픽 보호하기
삭제
이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.
프로젝트 삭제
비용이 청구되지 않도록 하는 가장 쉬운 방법은 튜토리얼에서 만든 프로젝트를 삭제하는 것입니다.