Eventarc 이벤트로 Cloud Run 트리거

1. 소개

894762ebb681671c.png

Cloud Run을 사용하면 완전 관리형 환경에서 스테이트리스(Stateless) 컨테이너를 실행할 수 있습니다. 오픈소스 Knative로 빌드되었으므로 컨테이너를 Cloud Run으로 완전 관리형으로 실행하거나 Cloud Run for Anthos를 통해 Google Kubernetes Engine 클러스터에서 실행할 수 있습니다.

cb762f29e9183a3f.png

Eventarc를 사용하면 다양한 서비스 (Cloud Run, Cloud Functions, Workfklows)를 다양한 소스의 이벤트와 쉽게 연결할 수 있습니다. 마이크로서비스가 느슨하게 결합 및 분산된 이벤트 기반 아키텍처를 빌드할 수 있습니다. 또한 이벤트 수집, 전송, 보안, 승인, 오류 처리를 처리하여 개발자의 민첩성과 애플리케이션 복원력을 향상시킵니다.

이 Codelab에서는 Eventarc에 관해 알아봅니다. 더 구체적으로 말하면 Eventarc를 사용하여 Pub/Sub, Cloud Storage, Cloud 감사 로그의 이벤트를 수신 대기하고 Cloud Run 서비스로 전달합니다.

학습할 내용

  • Eventarc 비전
  • Eventarc에서 이벤트 탐색
  • Cloud Run 싱크 만들기
  • Pub/Sub 트리거 만들기
  • Cloud Storage 트리거 만들기
  • Cloud 감사 로그의 트리거 만들기
  • Eventarc UI 살펴보기

2. Eventarc 비전

Eventarc는 다양한 Google, Google Cloud, 서드 파티 이벤트 소스의 이벤트를 Google Cloud 이벤트 대상으로 전달하는 것을 목표로 합니다.

59b147dc030b2b0b.png

Google Cloud 소스

Google Cloud 소유 제품인 이벤트 소스

Google 소스

Gmail, 행아웃, Android 관리 등 Google 소유 제품인 이벤트 소스

맞춤 소스

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

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

Cloud Shell 시작

Google Cloud를 노트북에서 원격으로 실행할 수 있지만, 이 Codelab에서는 Cloud에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.

GCP 콘솔에서 오른쪽 상단 툴바의 Cloud Shell 아이콘을 클릭합니다.

55efc1aaa7a4d3ad.png

환경을 프로비저닝하고 연결하는 데 몇 분 정도 소요됩니다. 완료되면 다음과 같이 표시됩니다.

7ffe5cbb04455448.png

가상 머신에는 필요한 개발 도구가 모두 들어있습니다. 영구적인 5GB 홈 디렉토리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 이 실습의 모든 작업은 브라우저만으로 수행할 수 있습니다.

시작하기 전에

Cloud Shell 내에 프로젝트 ID가 설정되어 있는지 확인합니다.

PROJECT_ID=your-project-id
gcloud config set project $PROJECT_ID

4. Cloud Run 서비스 배포

Cloud Run 서비스를 배포하여 이벤트를 수신합니다. CloudEvents의 콘텐츠를 기록하는 Cloud Run의 Hello 컨테이너를 배포합니다.

먼저 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에 메시지를 게시할 수 있으며 이러한 메시지는 Eventarc를 통해 Cloud Run에 전달할 수 있습니다.

설정

트리거를 만들기 전에 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를 사용하면 --transport-topic gcloud 플래그로 동일한 프로젝트에서 기존 Pub/Sub 주제를 지정할 수 있습니다.

작동 방식을 확인하려면 전송 주제로 사용할 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 트리거 만들기

이 단계에서는 Cloud Storage의 이벤트를 리슨하는 트리거를 만듭니다.

설정

먼저 이벤트를 수신할 버킷을 만듭니다.

BUCKET_NAME=eventarc-gcs-$PROJECT_ID

gsutil mb -l $REGION gs://$BUCKET_NAME

Cloud Storage 트리거에서 서비스 계정을 사용할 수 있도록 eventarc.eventReceiver 역할을 부여합니다.

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --role roles/eventarc.eventReceiver \
  --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

또한 Cloud Storage 트리거에 대한 Cloud Storage 서비스 계정에 pubsub.publisher 역할을 추가해야 합니다.

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 콘솔에서 Cloud Run 서비스의 로그를 확인하면 수신된 이벤트가 표시됩니다.

904cfc93bb8e8df1.png

8. Cloud 감사 로그 트리거 만들기

Cloud Storage 트리거가 Cloud Storage 이벤트를 리슨하는 더 나은 방법이지만 이 단계에서는 Cloud 감사 로그 트리거를 만들어 동일한 작업을 수행합니다.

설정

서비스에서 이벤트를 수신하려면 Cloud 감사 로그를 사용 설정해야 합니다. Cloud 콘솔의 왼쪽 상단 메뉴에서 IAM & AdminAudit 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 콘솔에서 Cloud Run 서비스의 로그를 확인하면 수신된 이벤트가 표시됩니다.

7be7859bcc8976f8.png

9. Eventarc UI 살펴보기

이 단계에서는 Google Cloud 콘솔에서 Eventarc UI를 살펴봅니다. Eventarc UI에서 모든 트리거의 개요를 확인하고, 트리거를 수정 및 삭제하고, Google Cloud 콘솔에서 새 트리거를 만들 수 있습니다.

Google Cloud의 Eventarc 섹션으로 이동합니다.

81e139f17e0d29bf.png

앞에서 만든 트리거 목록이 표시됩니다.

3240c7c830398718.png

트리거를 클릭하면 트리거의 세부정보를 확인, 수정 또는 삭제할 수 있습니다.

b4d8bbc6601a8b9e.png

Create trigger를 선택하고 트리거의 세부정보를 입력하여 새 트리거를 만들 수도 있습니다.

3ee290ec72f130d5.png

10. 축하합니다.

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

학습한 내용

  • Eventarc 비전
  • Eventarc에서 이벤트 탐색
  • Cloud Run 싱크 만들기
  • Pub/Sub 트리거 만들기
  • Cloud Storage 트리거 만들기
  • Cloud 감사 로그의 트리거 만들기
  • Eventarc UI 살펴보기