이 튜토리얼에서는 Eventarc를 사용하여 공개 BigQuery 데이터 세트에 대한 쿼리를 예약하고 데이터를 기반으로 차트를 생성하고 이메일을 통해 차트에 대한 링크를 공유하는 처리 파이프라인을 빌드하는 방법을 보여줍니다.
목표
이 튜토리얼에서는 인증되지 않은 액세스를 허용하고 Eventarc를 사용하여 이벤트를 수신하는 세 가지 Cloud Run 서비스를 빌드하고 배포합니다.
- Query Runner—Cloud Scheduler 작업에서 Pub/Sub 주제에 메시지를 게시하면 트리거되며 이 서비스는 BigQuery API를 사용하여 공개 코로나19 데이터 세트에서 데이터를 검색하고 결과를 새 BigQuery 테이블에 저장합니다.
- Chart Creator—Query Runner 서비스가 Pub/Sub 주제에 메시지를 게시할 때 트리거되며, 이 서비스는 Python 표시 라이브러리인 매트플롯립을 사용하여 차트를 Cloud Storage 버킷에 저장합니다.
- Notifier—Chart Creator 서비스가 Cloud Storage 버킷에 차트를 저장할 때 감사 로그에 의해 트리거되는 이 서비스는 이메일 서비스인 SendGrid를 사용하여 차트의 링크를 이메일 주소로 보냅니다.
다음 다이어그램은 대략적인 아키텍처를 보여줍니다.
비용
이 가이드에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.
프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요.
시작하기 전에
조직에서 Google Cloud 환경에 제약조건을 적용하면 이 문서의 일부 단계가 올바르게 작동하지 않을 수 있습니다. 이 경우 공개 IP 주소 또는 서비스 계정 키 만들기와 같은 작업을 완료하지 못할 수 있습니다. 제약조건에 대한 오류를 반환하는 요청을 수행하는 경우 제한된 Google Cloud 환경에서 애플리케이션 개발 방법을 참조하세요.
- Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
-
Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.
-
Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.
-
API Cloud Build, Cloud Logging, Cloud Run, Cloud Scheduler, Container Registry, Eventarc, Pub/Sub 사용 설정
- Google Cloud CLI를 설치합니다.
-
gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.
gcloud init
-
Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.
-
Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.
-
API Cloud Build, Cloud Logging, Cloud Run, Cloud Scheduler, Container Registry, Eventarc, Pub/Sub 사용 설정
- Google Cloud CLI를 설치합니다.
-
gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.
gcloud init
- gcloud 구성요소를 업데이트합니다.
gcloud components update
- 계정을 사용하여 로그인합니다.
gcloud auth login
- Google Cloud Storage를 선택하고 관리자 읽기, 데이터 읽기, 데이터 쓰기 로그 유형을 사용 설정합니다.
- Compute Engine 서비스 계정에
eventarc.eventReceiver
역할을 부여합니다.export PROJECT_NUMBER="$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')" gcloud projects add-iam-policy-binding $(gcloud config get-value project) \ --member=serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com \ --role='roles/eventarc.eventReceiver'
- 2021년 4월 8일 이전에 Pub/Sub 서비스 계정을 사용 설정한 경우 Pub/Sub 서비스 계정에
iam.serviceAccountTokenCreator
역할을 부여합니다.gcloud projects add-iam-policy-binding $(gcloud config get-value project) \ --member="serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com"\ --role='roles/iam.serviceAccountTokenCreator'
- 이 튜토리얼에서 사용되는 기본값을 설정합니다.
export REGION=REGION gcloud config set run/region ${REGION} gcloud config set run/platform managed gcloud config set eventarc/location ${REGION}
REGION을 지원되는 Eventarc 위치 중 원하는 위치로 바꿉니다.
- Git 소스 코드 관리 도구를 다운로드하여 설치합니다.
SendGrid API 키 만들기
SendGrid는 이메일 서버를 유지관리하지 않고도 이메일을 전송할 수 있는 클라우드 기반 이메일 제공업체입니다.
- SendGrid에 로그인하고 Settings(설정) > API Keys(API 키)로 이동합니다.
- API 키 만들기를 클릭합니다.
- 키의 권한을 선택합니다. 키에는 최소한 이메일을 전송할 수 있는 Mail send 권한이 필요합니다.
- Save(저장)를 클릭하여 키를 만듭니다.
- SendGrid에서 새로운 키가 생성됩니다. 이 키는 키의 유일한 사본이므로 나중을 위해 키를 복사하여 저장해 두세요.
Cloud Storage 버킷 만들기
고유한 Cloud Storage 버킷을 만들어 차트를 저장합니다. 버킷 및 차트를 공개적으로 사용할 수 있는지, Cloud Run 서비스와 동일한 리전에 있는지 확인합니다.
export BUCKET="$(gcloud config get-value core/project)-charts" gsutil mb -l $(gcloud config get-value run/region) gs://${BUCKET} gsutil uniformbucketlevelaccess set on gs://${BUCKET} gsutil iam ch allUsers:objectViewer gs://${BUCKET}
Notifier 서비스 배포
Chart Creator 이벤트를 수신하고 SendGrid를 사용하여 생성된 차트의 링크를 이메일로 전송하는 Cloud Run 서비스를 배포합니다.
GitHub 저장소를 클론하고
notifier/python
디렉터리로 변경합니다.git clone https://github.com/GoogleCloudPlatform/eventarc-samples cd eventarc-samples/processing-pipelines/bigquery/notifier/python/
컨테이너 이미지 빌드 및 푸시:
export SERVICE_NAME=notifier docker build -t gcr.io/$(gcloud config get-value project)/${SERVICE_NAME}:v1 . docker push gcr.io/$(gcloud config get-value project)/${SERVICE_NAME}:v1
컨테이너 이미지를 Cloud Run에 배포하고 이메일을 전송할 주소와 SendGrid API 키를 전달합니다.
export TO_EMAILS=EMAIL_ADDRESS export SENDGRID_API_KEY=YOUR_SENDGRID_API_KEY gcloud run deploy ${SERVICE_NAME} \ --image gcr.io/$(gcloud config get-value project)/${SERVICE_NAME}:v1 \ --update-env-vars TO_EMAILS=${TO_EMAILS},SENDGRID_API_KEY=${SENDGRID_API_KEY},BUCKET=${BUCKET} \ --allow-unauthenticated
다음을 바꿉니다.
- EMAIL_ADDRESS를 생성된 차트로 연결되는 링크를 보내기 위한 이메일 주소로 바꿉니다.
- YOUR_SENDGRID_API_KEY를 앞에서 기록한 SendGrid API 키로 바꿉니다.
서비스 URL이 표시되면 배포가 완료된 것입니다.
Notifier 서비스의 트리거 만들기
methodName이 storage.objects.create
인 Cloud Storage 감사 로그의 Cloud Run 필터에 배포된 Notifier 서비스의 Eventarc 트리거입니다.
트리거를 만듭니다.
gcloud eventarc triggers create trigger-${SERVICE_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" \ --service-account=${PROJECT_NUMBER}-compute@developer.gserviceaccount.com
그러면
trigger-notifier
라는 트리거가 생성됩니다.
Chart Creator 서비스 배포
Query Runner 이벤트를 수신하고 특정 국가의 BigQuery 테이블에서 데이터를 검색한 다음 데이터에서 매트플롯립을 사용하여 차트를 생성하는 Cloud Run 서비스를 배포합니다. 차트가 Cloud Storage 버킷에 업로드됩니다.
chart-creator/python
디렉터리로 변경합니다.cd ../../chart-creator/python
컨테이너 이미지 빌드 및 푸시:
export SERVICE_NAME=chart-creator docker build -t gcr.io/$(gcloud config get-value project)/${SERVICE_NAME}:v1 . docker push gcr.io/$(gcloud config get-value project)/${SERVICE_NAME}:v1
BUCKET
을 전달하여 컨테이너 이미지를 Cloud Run에 배포합니다.gcloud run deploy ${SERVICE_NAME} \ --image gcr.io/$(gcloud config get-value project)/${SERVICE_NAME}:v1 \ --update-env-vars BUCKET=${BUCKET} \ --allow-unauthenticated
서비스 URL이 표시되면 배포가 완료된 것입니다.
Chart Creator 서비스의 트리거 만들기
Cloud Run에 배포된 Chart Creator 서비스의 Eventarc 트리거는 Pub/Sub 주제에 게시된 메시지를 필터링합니다.
트리거를 만듭니다.
gcloud eventarc triggers create trigger-${SERVICE_NAME} \ --destination-run-service=${SERVICE_NAME} \ --destination-run-region=${REGION} \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished"
그러면
trigger-chart-creator
라는 트리거가 생성됩니다.Pub/Sub 주제 환경 변수를 설정합니다.
export TOPIC_QUERY_COMPLETED=$(basename $(gcloud eventarc triggers describe trigger-${SERVICE_NAME} --format='value(transport.pubsub.topic)'))
Query Runner 서비스 배포
Cloud Scheduler 이벤트를 수신하고, 공개 코로나19 데이터 세트에서 데이터를 검색하고, 결과를 새 BigQuery 테이블에 저장하는 Cloud Run 서비스를 배포합니다.
processing-pipelines
디렉터리로 변경합니다.cd ../../..
컨테이너 이미지 빌드 및 푸시:
export SERVICE_NAME=query-runner docker build -t gcr.io/$(gcloud config get-value project)/${SERVICE_NAME}:v1 -f bigquery/${SERVICE_NAME}/csharp/Dockerfile . docker push gcr.io/$(gcloud config get-value project)/${SERVICE_NAME}:v1
PROJECT_ID
및TOPIC_QUERY_COMPLETED
를 전달하여 컨테이너 이미지를 Cloud Run에 배포합니다.gcloud run deploy ${SERVICE_NAME} \ --image gcr.io/$(gcloud config get-value project)/${SERVICE_NAME}:v1 \ --update-env-vars PROJECT_ID=$(gcloud config get-value project),TOPIC_ID=${TOPIC_QUERY_COMPLETED} \ --allow-unauthenticated
서비스 URL이 표시되면 배포가 완료된 것입니다.
Query Runner 서비스의 트리거 만들기
Cloud Run에 배포된 Query Runner 서비스의 Eventarc 트리거는 Pub/Sub 주제에 게시된 메시지를 필터링합니다.
트리거를 만듭니다.
gcloud eventarc triggers create trigger-${SERVICE_NAME} \ --destination-run-service=${SERVICE_NAME} \ --destination-run-region=${REGION} \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished"
그러면
trigger-query-runner
라는 트리거가 생성됩니다.Pub/Sub 주제의 환경 변수를 설정합니다.
export TOPIC_QUERY_SCHEDULED=$(gcloud eventarc triggers describe trigger-${SERVICE_NAME} --format='value(transport.pubsub.topic)')
작업 예약
처리 파이프라인은 두 개의 Cloud Scheduler 작업에 의해 트리거됩니다.
Cloud Scheduler에 필요한 App Engine 앱을 만들고 적절한 위치를 지정합니다.
export APP_ENGINE_LOCATION=LOCATION gcloud app create --region=${APP_ENGINE_LOCATION}
Pub/Sub 주제에 하루에 한 번 게시하는 Cloud Scheduler 작업 두 개를 만듭니다.
gcloud scheduler jobs create pubsub cre-scheduler-uk \ --schedule="0 16 * * *" \ --topic=${TOPIC_QUERY_SCHEDULED} \ --message-body="United Kingdom"
gcloud scheduler jobs create pubsub cre-scheduler-cy \ --schedule="0 17 * * *" \ --topic=${TOPIC_QUERY_SCHEDULED} \ --message-body="Cyprus"
일정은 unix-cron 형식으로 지정됩니다. 예를 들어
0 16 * * *
는 작업이 매일 UTC 16:00(오후 4시)에 실행됨을 의미합니다.
파이프라인 실행
먼저 모든 트리거가 성공적으로 생성되었는지 확인합니다.
gcloud eventarc triggers list
출력은 다음과 비슷하게 표시됩니다.
NAME TYPE DESTINATION_RUN_SERVICE DESTINATION_RUN_PATH ACTIVE trigger-chart-creator google.cloud.pubsub.topic.v1.messagePublished chart-creator Yes trigger-notifier google.cloud.audit.log.v1.written notifier Yes trigger-query-runner google.cloud.pubsub.topic.v1.messagePublished query-runner Yes
Cloud Scheduler 작업 ID를 검색합니다.
gcloud scheduler jobs list
출력은 다음과 비슷하게 표시됩니다.
ID LOCATION SCHEDULE (TZ) TARGET_TYPE STATE cre-scheduler-cy us-central1 0 17 * * * (Etc/UTC) Pub/Sub ENABLED cre-scheduler-uk us-central1 0 16 * * * (Etc/UTC) Pub/Sub ENABLED
작업이 매일 오후 4시, 5시에 실행되도록 예약되어 있지만 Cloud Scheduler 작업을 수동으로 실행할 수도 있습니다.
gcloud scheduler jobs run cre-scheduler-cy gcloud scheduler jobs run cre-scheduler-uk
몇 분 후 Cloud Storage 버킷에 차트가 두 개 있는지 확인합니다.
gsutil ls gs://${BUCKET}
출력은 다음과 비슷하게 표시됩니다.
gs://BUCKET/chart-cyprus.png gs://BUCKET/chart-unitedkingdom.png
수고하셨습니다. 차트 링크가 포함된 2개의 이메일도 받게 됩니다.
삭제
이 튜토리얼용으로 새 프로젝트를 만든 경우 이 프로젝트를 삭제합니다. 기존 프로젝트를 사용한 경우 이 튜토리얼에 추가된 변경사항은 제외하고 보존하려면 튜토리얼용으로 만든 리소스를 삭제합니다.
프로젝트 삭제
비용이 청구되지 않도록 하는 가장 쉬운 방법은 가이드에서 만든 프로젝트를 삭제하는 것입니다.
프로젝트를 삭제하려면 다음 안내를 따르세요.
- Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다.
- 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
- 대화상자에서 프로젝트 ID를 입력한 후 종료를 클릭하여 프로젝트를 삭제합니다.
튜토리얼 리소스 삭제
이 튜토리얼에서 배포한 Cloud Run 서비스를 삭제합니다.
gcloud run services delete SERVICE_NAME
여기서
SERVICE_NAME
은 선택한 서비스 이름입니다.Google Cloud Console에서 Cloud Run 서비스를 삭제할 수도 있습니다.
튜토리얼 설정 중에 추가한 gcloud CLI 기본 구성을 삭제합니다.
예를 들면 다음과 같습니다.
gcloud config unset run/region
또는
gcloud config unset project
이 가이드에서 만든 다른 Google Cloud 리소스를 삭제합니다.
- Eventarc 트리거를 삭제합니다.
gcloud eventarc triggers delete TRIGGER_NAME
TRIGGER_NAME
을 트리거의 이름으로 바꿉니다.
- Container Registry에서 가져온
gcr.io/PROJECT_ID/SERVICE_NAME
이라는 컨테이너 이미지를 삭제합니다.
- Eventarc 트리거를 삭제합니다.