[GCP]Serverless 서비스인 Cloud Run 알아보기 5부 — Eventarc 를 통한 이벤트 받기

이정운 (Jungwoon Lee)
google-cloud-apac
Published in
12 min readAug 13, 2021

안녕하세요 이정운 입니다.

Google Cloud 에서 제공하는 컨테이너 기반의 Serverless 솔루션인 Cloud Run 에 대해서 살펴보고 실제 테스트해보면서 써볼 수 있는 시간을 가져보는 시리즈를 하단과 같이 진행하고 있습니다.

[GCP]Serverless 서비스인 Cloud Run 알아보기 1부 — Cloud Run 개요
[GCP]Serverless 서비스인 Cloud Run 알아보기 2부 — 로컬에서 개발하기(Cloud Code)
[GCP]Serverless 서비스인 Cloud Run 알아보기 3부 — 업데이트 및 트래픽 조정
[GCP]Serverless 서비스인 Cloud Run 알아보기 4부 — 서버리스 VPC 액세스

이번 이야기에서 살펴볼 것은 Cloud Run 을 좀 더 이벤트 드리븐하게 사용하게 만들 수 있는 Eventarc 입니다. Eventarc 는 90개 이상의 Google Cloud 소스에서 Cloud Run 으로 이벤트를 보낼 수 있는 새로운 이벤트 기능을 제공하는 솔루션으로 Pub/Sub 방식 뿐만 아니라 다양한 소스에서 감사 로그(Audit log)를 읽고 이를 CloudEvent 형식의 이벤트로 Cloud Run 서비스를 트리거 할 수 있게 해줍니다.
(여기서 CloudEvent 형식이란 공통 이벤트 포맷을 정의하는 표준 형식을 의미 — 참고:https://cloudevents.io/) 좀 더 쉽게 설명드리면 Cloud Run 을 마치 Cloud Functions 처럼 이벤트 기반으로 사용할 수 있게 지원할 수 있는 기능입니다.

https://cloud.google.com/blog/topics/developers-practitioners/eventarc-unified-eventing-experience-google-cloud

즉, Eventarc 를 사용하면 기본 인프라를 구현, 맞춤설정 또는 유지관리할 필요 없이 Cloud Run 을 통해서 이벤트 기반 아키텍처를 빌드할 수 있습니다. Eventarc 는 Cloud Run 의 하나의 기능으로 오해하기 쉬운데 실제적으로는 CloudEvent 를 지원하는 별도의 완전 관리형 솔루션형태로 내부적으로 보면 Event Core 와 Transport Layer 로 구성되어 현재 타겟으로 Cloud Run 을 지원할 수 있습니다.

https://cloud.google.com/eventarc/docs/overview

그럼 이번에도 역시 설명보다는 실제 테스트를 직접 해보면서 Cloud Run 에서 Eventarc 를 통한 이벤트를 어떻게 받을 수 있는지 살펴볼 수 있는 시간을 가져보도록 하겠습니다.

#1) 감사 로그를 사용하여 GCS 의 이벤트 수신 구성

빠른 시작: Cloud 감사 로그를 사용하여 이벤트 수신(gcloud 명령줄 도구)
https://cloud.google.com/eventarc/docs/run/quickstart

공식 튜토리얼을 활용해서 GCS(Google Cloud Storage) 의 이벤트를 받아서 Cloud Run 을 트리거하여 수행하는 예제를 진행해 보도록 하겠습니다.

가장 먼저 “GCP 관리콘솔 > Cloud Storage” 메뉴로 가서 테스트에 사용할 GCS 버킷을 생성합니다. 테스트이기 때문에 생성시의 모든 옵션은 기본값으로 설정하도록 합니다.

다음으로 Cloud Shell 에서 프로젝트 ID 나 리전과 같은 기본 환경 변수를 설정합니다.

gcloud config set project jwlee-myproject-01
gcloud config set run/region asia-northeast3
gcloud config set run/platform managed
gcloud config set eventarc/location global
export PROJECT_NUMBER="$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')"

Eventarc 의 가장 큰 장점중의 하나는 감사 로그를 이벤트 소스로 받을 수 있다는 것이며 이를 통해서 GCS 의 오브젝트 생성 이벤트와 같은 다양한 이벤트를 캐치할 수 있습니다. 우선 감사 로그를 읽기 위해서 IAM policy 설정 변경이 필요하므로 하단과 같이 yaml 파일로 output 파일을 생성합니다.

gcloud projects get-iam-policy jwlee-myproject-01 > /tmp/policy.yaml

Yaml 파일 생성 후에 하단의 내용을 /tmp/policy.yaml 에 추가하여 반영합니다. 기본 환경에서 추가하면 하단과 같은 형태로 추가가 가능합니다.

- auditLogConfigs:
- logType: ADMIN_READ
- logType: DATA_WRITE
- logType: DATA_READ
service: storage.googleapis.com
bindings:
- members:
- user:jwlee98@gmail.com

이제 변경된 yaml 설정을 gcloud 명령어를 통해서 시스템에 반영합니다.

gcloud projects set-iam-policy jwlee-myproject-01 /tmp/policy.yaml

다음으로 기본 Compute Engine service account 에 eventarc.eventReceiver 역할을 부여합니다. 이 부분은 Cloud Run 에서 eventarc 이벤트를 받기 위한 권한 설정이며 Cloud Run 을 생성할때 기본 Compute Engine service account 를 사용하지 않고 custom service account 를 생성해서 사용한 경우에는 해당 custom service account 에 권한을 부여해 주어야 합니다.

gcloud projects add-iam-policy-binding $(gcloud config get-value project) --member=serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com --role='roles/eventarc.eventReceiver'

해당 권한이 정상적으로 부여되었다면 GCP 관리콘솔 > IAM 메뉴에서 하단과 같이 확인이 가능합니다.

설정이 정상적으로 준비되었다면 다음으로 간단한 샘플 애플리케이션을 통해서 Cloud Run 을 위한 컨테이너 이미지를 생성해보도록 하겠습니다.

git clone https://github.com/GoogleCloudPlatform/golang-samples.git
cd golang-samples/eventarc/audit_storage
gcloud builds submit --tag gcr.io/$(gcloud config get-value project)/helloworld-events

샘플 애플리케이션으로 컨테이너 이미지를 만든 후에 gcloud 명령을 이용하여 Cloud Run 에 배포합니다.

gcloud run deploy helloworld-events \
--image gcr.io/$(gcloud config get-value project)/helloworld-events \
--allow-unauthenticated --region=asia-northeast3

정상적으로 Cloud Run 에 배포되었다면 GCP 관리콘솔 > Cloud Run 에서 하단과 같이 녹색 아이콘을 확인할 수 있습니다.

참고로 Cloud Run 생성시 지정한 service account 는 우측에 security 탭에서 확인이 가능합니다.

그럼 다음으로 Cloud Run 에 Eventarc 트리거를 생성 및 연동합니다.

gcloud eventarc triggers create events-quickstart-trigger \
--destination-run-service=helloworld-events \
--destination-run-region=asia-northeast3 \
--event-filters="type=google.cloud.audit.log.v1.written" \
--event-filters="serviceName=storage.googleapis.com" \
--event-filters="methodName=storage.objects.create" \
--service-account=${PROJECT_NUMBER}-compute@developer.gserviceaccount.com

생성한 Eventarc 트리거는 gcloud 명령을 통해서 확인 가능합니다.

gcloud eventarc triggers list --location=global

GCP 관리콘솔 > Cloud Run 의 TRIGGERS 탭에서도 등록된 Eventarc 트리거를 확인할 수 있습니다.

정상적으로 모든 배포 및 설정이 완료되었으므로 간단하게 GCS 에 파일을 하나 업데이트 해서 정상 동작하는지 테스트 해보도록 하겠습니다.

echo “Hello World” > random.txt
gsutil cp random.txt gs://eventarcbucket-test01/random.txt

GCS 에서 파일이 업데이트 되었고 감사로그가 생성된 후에 Eventarc 가 정상적으로 이벤트를 발생시켜 Cloud Run 을 수행했는지 GCP 관리콘솔 > Cloud Logging 메뉴의 Log Explorer 로 확인해 봅니다.

resource.type="cloud_run_revision"
resource.labels.service_name="helloworld-events"

“Detected change in Cloud Storage bucket: storage.googleapis.com/projects/_/buckets/eventarcbucket-test01/objects/random.txt” 와 같은 메세지를 확인했다면 서비스가 정상적으로 수행된 것입니다.

또는, 하단과 같이 모니터링 화면에서 확인도 가능합니다.

지금까지 Eventarc 를 통해서 GCS 에서 발생된 이벤트를 감사로그로 캐치하여 Cloud Run 을 트리거하는 테스트를 수행해봤습니다. 보시면 아시겠지만 Eventarc 를 사용하면 기본 인프라를 구현, 맞춤설정 또는 유지관리할 필요 없이 Cloud Run 을 통해서 이벤트 기반 아키텍처를 쉽게 빌드할 수 있습니다. 그럼 이번 포스팅은 여기서 마무리하고 다음에 다른 포스팅으로 다시 돌아오겠습니다.

Disclaimer: 본 글의 작성자는 Google 직원이지만 Google cloud 를 공부하는 한 개인으로서 작성된 글입니다. 본 글의 내용, 입장은 Google 을 대변하지 않으며 Google 이 해당 콘텐츠를 보장하지 않습니다.

참고 자료 #1

Eventarc: A unified eventing experience in Google Cloud
https://cloud.google.com/blog/topics/developers-practitioners/eventarc-unified-eventing-experience-google-cloud

Overview of Eventarc
https://cloud.google.com/eventarc/docs/overview

빠른 시작: Cloud 감사 로그를 사용하여 이벤트 수신(gcloud 명령줄 도구)
https://cloud.google.com/eventarc/docs/run/quickstart

--

--

이정운 (Jungwoon Lee)
google-cloud-apac

Technical engineer who dreams better future. (These thoughts are my own personal opinions, and do not reflect or represent Google’s opinions or plans.)