Eventarc를 사용하여 GKE용 BigQuery 처리 파이프라인 빌드

이 튜토리얼에서는 Eventarc를 사용하여 공개 BigQuery 데이터 세트에 대한 쿼리를 예약하고 데이터를 기반으로 차트를 생성하고 이메일을 통해 차트에 대한 링크를 공유하는 처리 파이프라인을 빌드하는 방법을 보여줍니다.

목표

이 튜토리얼에서는 GKE 클러스터에서 실행되고 Eventarc를 사용하여 이벤트를 수신하는 세 가지 Google Kubernetes Engine (GKE) 서비스를 빌드하고 배포합니다.

  1. Query Runner—Cloud Scheduler 작업에서 Pub/Sub 주제에 메시지를 게시하면 트리거되며 이 서비스는 BigQuery API를 사용하여 공개 코로나19 데이터 세트에서 데이터를 검색하고 결과를 새 BigQuery 테이블에 저장합니다.
  2. Chart Creator—Query Runner 서비스가 Pub/Sub 주제에 메시지를 게시할 때 트리거되며, 이 서비스는 Python 표시 라이브러리인 Matplotlib을 사용하여 차트를 Cloud Storage 버킷에 저장합니다.
  3. Notifier—Chart Creator 서비스가 Cloud Storage 버킷에 차트를 저장할 때 감사 로그에 의해 트리거되는 이 서비스는 이메일 서비스인 SendGrid를 사용하여 차트의 링크를 이메일 주소로 보냅니다.

다음 다이어그램은 대략적인 아키텍처를 보여줍니다.

BigQuery 처리 파이프라인의 상위 수준 아키텍처

비용

이 문서에서는 비용이 청구될 수 있는 Google Cloud구성요소를 사용합니다.

프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요.

Google Cloud 신규 사용자는 무료 체험판을 사용할 수 있습니다.

시작하기 전에

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. Google Cloud CLI를 설치합니다.

  3. 외부 ID 공급업체 (IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.

  4. gcloud CLI를 초기화하려면, 다음 명령어를 실행합니다.

    gcloud init
  5. Google Cloud 프로젝트를 만들거나 선택합니다.

    프로젝트를 선택하거나 만드는 데 필요한 역할

    • 프로젝트 선택: 프로젝트를 선택하는 데는 특정 IAM 역할이 필요하지 않습니다. 역할이 부여된 프로젝트를 선택하면 됩니다.
    • 프로젝트 만들기: 프로젝트를 만들려면 resourcemanager.projects.create 권한이 포함된 프로젝트 생성자 역할(roles/resourcemanager.projectCreator)이 필요합니다. 역할 부여 방법 알아보기
    • Google Cloud 프로젝트를 만듭니다.

      gcloud projects create PROJECT_ID

      PROJECT_ID를 만들려는 Google Cloud 프로젝트의 이름으로 바꿉니다.

    • 만든 Google Cloud 프로젝트를 선택합니다.

      gcloud config set project PROJECT_ID

      PROJECT_ID을 Google Cloud 프로젝트 이름으로 바꿉니다.

  6. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  7. Artifact Registry, BigQuery, Cloud Build, Cloud Logging, Cloud Scheduler, Eventarc, GKE, Pub/Sub, Resource Manager API를 사용 설정합니다(아직 사용 설정되지 않은 경우).

    API 사용 설정에 필요한 역할

    API를 사용 설정하려면 serviceusage.services.enable 권한이 필요합니다. 프로젝트를 만든 경우 소유자 역할 (roles/owner)을 통해 이 권한이 이미 있을 수 있습니다. 그렇지 않은 경우 서비스 사용량 관리자 역할 (roles/serviceusage.serviceUsageAdmin)을 통해 이 권한을 얻을 수 있습니다. 역할을 부여하는 방법 알아보기

    gcloud services enable artifactregistry.googleapis.com bigquery.googleapis.com cloudbuild.googleapis.com cloudresourcemanager.googleapis.com cloudscheduler.googleapis.com container.googleapis.com eventarc.googleapis.com pubsub.googleapis.com logging.googleapis.com
  8. Google Cloud CLI를 설치합니다.

  9. 외부 ID 공급업체 (IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.

  10. gcloud CLI를 초기화하려면, 다음 명령어를 실행합니다.

    gcloud init
  11. Google Cloud 프로젝트를 만들거나 선택합니다.

    프로젝트를 선택하거나 만드는 데 필요한 역할

    • 프로젝트 선택: 프로젝트를 선택하는 데는 특정 IAM 역할이 필요하지 않습니다. 역할이 부여된 프로젝트를 선택하면 됩니다.
    • 프로젝트 만들기: 프로젝트를 만들려면 resourcemanager.projects.create 권한이 포함된 프로젝트 생성자 역할(roles/resourcemanager.projectCreator)이 필요합니다. 역할 부여 방법 알아보기
    • Google Cloud 프로젝트를 만듭니다.

      gcloud projects create PROJECT_ID

      PROJECT_ID를 만들려는 Google Cloud 프로젝트의 이름으로 바꿉니다.

    • 만든 Google Cloud 프로젝트를 선택합니다.

      gcloud config set project PROJECT_ID

      PROJECT_ID을 Google Cloud 프로젝트 이름으로 바꿉니다.

  12. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  13. Artifact Registry, BigQuery, Cloud Build, Cloud Logging, Cloud Scheduler, Eventarc, GKE, Pub/Sub, Resource Manager API를 사용 설정합니다(아직 사용 설정되지 않은 경우).

    API 사용 설정에 필요한 역할

    API를 사용 설정하려면 serviceusage.services.enable 권한이 필요합니다. 프로젝트를 만든 경우 소유자 역할 (roles/owner)을 통해 이 권한이 이미 있을 수 있습니다. 그렇지 않은 경우 서비스 사용량 관리자 역할 (roles/serviceusage.serviceUsageAdmin)을 통해 이 권한을 얻을 수 있습니다. 역할을 부여하는 방법 알아보기

    gcloud services enable artifactregistry.googleapis.com bigquery.googleapis.com cloudbuild.googleapis.com cloudresourcemanager.googleapis.com cloudscheduler.googleapis.com container.googleapis.com eventarc.googleapis.com pubsub.googleapis.com logging.googleapis.com
  14. Cloud Storage의 경우 ADMIN_READ, DATA_WRITE, DATA_READ 데이터 액세스 유형에 감사 로깅을 사용 설정합니다.

    1. Google Cloud 프로젝트, 폴더 또는 조직과 관련된 Identity and Access Management (IAM) 정책을 읽고 임시 파일에 저장합니다.
      gcloud projects get-iam-policy PROJECT_ID > /tmp/policy.yaml
    2. 텍스트 편집기에서 /tmp/policy.yaml을 열고 auditConfigs 섹션의 감사 로그 구성만 추가하거나 변경합니다.

      
        auditConfigs:
        - auditLogConfigs:
          - logType: ADMIN_READ
          - logType: DATA_WRITE
          - logType: DATA_READ
          service: storage.googleapis.com
        bindings:
        - members:
        [...]
        etag: BwW_bHKTV5U=
        version: 1
    3. 다음과 같이 새 IAM 정책을 씁니다.

      gcloud projects set-iam-policy PROJECT_ID /tmp/policy.yaml

      앞의 명령어가 다른 변경사항과의 충돌을 보고할 경우 이 단계를 반복하면서 IAM 정책 읽기를 시작합니다. 자세한 내용은 API로 데이터 액세스 감사 로그 구성을 참조하세요.

  15. 이 튜토리얼에서 사용되는 기본값을 설정합니다.
    CLUSTER_NAME=events-cluster
    CLUSTER_LOCATION=us-central1
    PROJECT_ID=PROJECT_ID
    gcloud config set project $PROJECT_ID
    gcloud config set eventarc/location $CLUSTER_LOCATION

    PROJECT_ID를 프로젝트 ID로 바꿉니다.

SendGrid API 키 만들기

SendGrid는 이메일 서버를 유지관리하지 않고도 이메일을 전송할 수 있는 클라우드 기반 이메일 제공업체입니다.

  1. SendGrid에 로그인하고 Settings(설정) > API Keys(API 키)로 이동합니다.
  2. API 키 만들기를 클릭합니다.
  3. 키의 권한을 선택합니다. 키에는 최소한 이메일을 전송할 수 있는 Mail send 권한이 필요합니다.
  4. Save(저장)를 클릭하여 키를 만듭니다.
  5. SendGrid에서 새로운 키가 생성됩니다. 이 키는 키의 유일한 사본이므로 나중을 위해 키를 복사하여 저장해 두세요.

GKE 클러스터 만들기

GKE 내에서 실행 중인 애플리케이션에서 Google Cloud 서비스에 액세스할 수 있도록 GKE용 워크로드 아이덴티티 제휴를 사용 설정하여 클러스터를 만듭니다. 또한 Eventarc를 사용해서 이벤트를 전달하려면 GKE용 워크로드 아이덴티티 제휴가 필요합니다.

  1. HttpLoadBalancing 및 HorizontalPodAutoscaling 부가기능이 사용 설정된 GKE 클러스터를 만듭니다.

    gcloud container clusters create $CLUSTER_NAME \
        --addons=HttpLoadBalancing,HorizontalPodAutoscaling \
        --machine-type=n1-standard-4 \
        --enable-autoscaling --min-nodes=2 --max-nodes=10 \
        --no-issue-client-certificate --num-nodes=2 \
        --logging=SYSTEM,WORKLOAD \
        --monitoring=SYSTEM \
        --scopes=cloud-platform,logging-write,monitoring-write,pubsub \
        --region=$CLUSTER_LOCATION \
        --release-channel=rapid \
        --workload-pool=$PROJECT_ID.svc.id.goog
    
  2. 클러스터 만들기가 완료될 때까지 몇 분 정도 기다립니다. 만드는 과정에서 무시해도 안전한 경고가 표시될 수 있습니다. 클러스터가 만들어지면 다음과 유사한 출력이 표시됩니다.

    Creating cluster ...done.
    Created [https://container.googleapis.com/v1/projects/my-project/zones/us-central1/clusters/events-cluster].
    
  3. GKE 클러스터에서 kubectl을 가리키도록 사용자 인증 정보와 엔드포인트 정보로 kubeconfig 파일을 업데이트합니다.

    gcloud container clusters get-credentials $CLUSTER_NAME \
        --region=$CLUSTER_LOCATION
  4. Docker 컨테이너 이미지를 저장할 Artifact Registry 표준 저장소를 만듭니다.

    gcloud artifacts repositories create REPOSITORY \
        --repository-format=docker \
        --location=$CLUSTER_LOCATION

    REPOSITORY를 저장소의 고유한 이름으로 바꿉니다.

서비스 계정 구성

  1. GKE 노드가 Artifact Registry에서 컨테이너 이미지를 가져올 수 있도록 하려면 프로젝트의 Artifact Registry 리더(roles/artifactregistry.reader) 역할을 클러스터 노드에서 사용하는 Compute Engine 기본 서비스 계정에 부여합니다.

    PROJECT_NUMBER="$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member "serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
      --condition=None \
      --role "roles/artifactregistry.reader"
  2. GKE 서비스가 BigQuery를 쿼리하고 쓰고, Pub/Sub에 게시하고, 차트를 Cloud Storage에 업로드할 수 있도록 하려면 프로젝트의 BigQuery 데이터 편집자(roles/bigquery.dataEditor), BigQuery 작업 사용자(roles/bigquery.jobUser), Pub/Sub 게시자(roles/pubsub.publisher), 스토리지 객체 관리자(roles/storage.objectAdmin) 역할을 default 네임스페이스의 default Kubernetes ServiceAccount에 부여합니다.

    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member "principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/default/sa/default" \
      --condition=None \
      --role "roles/bigquery.dataEditor"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member "principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/default/sa/default" \
      --condition=None \
      --role "roles/bigquery.jobUser"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member "principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/default/sa/default" \
      --condition=None \
      --role "roles/pubsub.publisher"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member "principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/default/sa/default" \
      --condition=None \
      --role "roles/storage.objectAdmin"

GKE 대상 사용 설정

Eventarc가 GKE 클러스터의 리소스를 관리할 수 있도록 하려면 GKE 대상을 사용 설정하고 Eventarc 서비스 계정을 필요한 역할과 결합합니다.

  1. Eventarc에 GKE 대상을 사용 설정합니다.

    gcloud eventarc gke-destinations init
  2. 필요한 역할을 결합하라는 메시지가 표시되면 y를 입력합니다.

    다음 역할이 결합됩니다.

    • roles/compute.viewer
    • roles/container.developer
    • roles/iam.serviceAccountAdmin

Cloud Storage 버킷 만들기

GKE 서비스와 동일한 리전에 Cloud Storage 버킷을 만들어 차트를 저장하고 생성된 차트를 볼 수 있도록 계정에 읽기 액세스 권한 (roles/storage.objectViewer)을 부여합니다.

export BUCKET="$(gcloud config get-value core/project)-charts"
gcloud storage buckets create gs://${BUCKET} --location=$CLUSTER_LOCATION
gcloud storage buckets update gs://${BUCKET} --uniform-bucket-level-access
gcloud storage buckets add-iam-policy-binding gs://${BUCKET} \
    --member="user:$(gcloud config get-value core/account)" \
    --role=roles/storage.objectViewer

저장소 복제

GitHub 저장소를 클론합니다.

git clone https://github.com/GoogleCloudPlatform/eventarc-samples
cd eventarc-samples/processing-pipelines

서비스 계정 만들기 및 액세스 역할 바인딩

Eventarc 트리거를 만들기 전에 Eventarc가 Pub/Sub 이벤트를 전달할 수 있도록 사용자 관리 서비스 계정을 설정하고 특정 역할을 부여합니다.

  1. eventarc-triggers-test-sa라는 서비스 계정을 만듭니다.

    TRIGGER_GSA=eventarc-triggers-test-sa
    gcloud iam service-accounts create $TRIGGER_GSA
  2. 서비스 계정에 pubsub.subscriber, monitoring.metricWriter, eventarc.eventReceiver 역할을 부여합니다.

    PROJECT_ID=$(gcloud config get-value project)
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \
        --condition=None \
        --role "roles/pubsub.subscriber"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \
        --condition=None \
        --role "roles/monitoring.metricWriter"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \
        --condition=None \
        --role "roles/eventarc.eventReceiver"

Notifier 서비스 배포

bigquery/notifier/python 디렉터리에서 차트 생성자 이벤트를 수신하고 SendGrid를 사용하여 생성된 차트의 링크를 이메일로 보내는 GKE 서비스를 배포합니다.

  1. 컨테이너 이미지 빌드 및 푸시:

    pushd bigquery/notifier/python
    export SERVICE_NAME=notifier
    docker build -t $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1 .
    docker push $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1
    popd
  2. 컨테이너 이미지의 Kubernetes 배포를 만들고 이메일을 전송할 주소와 SendGrid API 키를 포함하여 필요한 환경 변수를 설정합니다.

    export TO_EMAILS=EMAIL_ADDRESS
    export SENDGRID_API_KEY=YOUR_SENDGRID_API_KEY
    kubectl create deployment ${SERVICE_NAME} \
        --image=$CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1
    kubectl set env deployment/${SERVICE_NAME} \
        TO_EMAILS=${TO_EMAILS} \
        SENDGRID_API_KEY=${SENDGRID_API_KEY} \
        BUCKET=${BUCKET}

    다음을 바꿉니다.

    • EMAIL_ADDRESS: 생성된 차트로 연결되는 링크를 보내기 위한 이메일 주소입니다.
    • YOUR_SENDGRID_API_KEY: 앞에서 기록한 SendGrid API 키입니다.
    • REPOSITORY: Artifact Registry 저장소의 이름입니다.
  3. 배포를 Kubernetes 서비스로 노출합니다.

    kubectl expose deployment ${SERVICE_NAME} \
        --type=ClusterIP --port=80 --target-port=8080

Notifier 서비스의 트리거 만들기

지정된 Cloud Storage 버킷의 Cloud Storage 감사 로그를 필터링하고 methodName이 storage.objects.create인 GKE에 배포된 Notifier 서비스의 Eventarc 트리거를 만듭니다.

gcloud eventarc triggers create trigger-${SERVICE_NAME}-gke \
      --destination-gke-cluster=$CLUSTER_NAME \
      --destination-gke-location=$CLUSTER_LOCATION \
      --destination-gke-namespace=default \
      --destination-gke-service=$SERVICE_NAME \
      --destination-gke-path=/ \
      --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/objects/*" \
      --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com

그러면 trigger-notifier-gke라는 트리거가 생성됩니다.

Chart Creator 서비스 배포

bigquery/chart-creator/python 디렉터리에서 쿼리 실행자 이벤트를 수신하고 특정 국가의 BigQuery 테이블에서 데이터를 검색한 후 해당 데이터로 Matplotlib을 사용하여 차트를 생성하는 GKE 서비스를 배포합니다. 차트는 Cloud Storage 버킷에 업로드됩니다.

  1. 컨테이너 이미지 빌드 및 푸시:

    pushd bigquery/chart-creator/python
    export SERVICE_NAME=chart-creator
    docker build -t $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1 .
    docker push $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1
    popd
  2. 컨테이너 이미지의 Kubernetes 배포를 만들고 BUCKET 환경 변수를 설정합니다.

    kubectl create deployment ${SERVICE_NAME} \
        --image=$CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1
    kubectl set env deployment/${SERVICE_NAME} \
        BUCKET=${BUCKET}
  3. 배포를 Kubernetes 서비스로 노출합니다.

    kubectl expose deployment ${SERVICE_NAME} \
        --type=ClusterIP --port=80 --target-port=8080

Chart Creator 서비스의 트리거 만들기

GKE에 배포된 Chart Creator 서비스에 대해 Pub/Sub 주제에 게시된 메시지를 필터링하는 Eventarc 트리거를 만듭니다.

  1. 트리거를 만듭니다.

    gcloud eventarc triggers create trigger-${SERVICE_NAME}-gke \
        --destination-gke-cluster=$CLUSTER_NAME \
        --destination-gke-location=$CLUSTER_LOCATION \
        --destination-gke-namespace=default \
        --destination-gke-service=$SERVICE_NAME \
        --destination-gke-path=/ \
        --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
        --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com

    그러면 trigger-chart-creator-gke라는 트리거가 생성됩니다.

  2. Pub/Sub 주제 환경 변수를 설정합니다.

    export TOPIC_QUERY_COMPLETED=$(basename $(gcloud eventarc triggers describe trigger-${SERVICE_NAME}-gke --format='value(transport.pubsub.topic)'))

Query Runner 서비스 배포

processing-pipelines 디렉터리에서 Cloud Scheduler 이벤트를 수신하고, 공개 코로나19 데이터 세트에서 데이터를 검색하고, 결과를 새 BigQuery 테이블에 저장하는 GKE 서비스를 배포합니다.

  1. 컨테이너 이미지 빌드 및 푸시:

    export SERVICE_NAME=query-runner
    docker build -t $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1 -f Dockerfile .
    docker push $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1
  2. 컨테이너 이미지의 Kubernetes 배포를 만들고 PROJECT_ID 및 TOPIC_ID 환경 변수를 설정합니다.

    kubectl create deployment ${SERVICE_NAME} \
        --image=$CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1
    kubectl set env deployment/${SERVICE_NAME} \
        PROJECT_ID=$(gcloud config get-value project) \
        TOPIC_ID=${TOPIC_QUERY_COMPLETED}
  3. 배포를 Kubernetes 서비스로 노출합니다.

    kubectl expose deployment ${SERVICE_NAME} \
        --type=ClusterIP --port=80 --target-port=8080

Query Runner 서비스의 트리거 만들기

GKE에 배포된 Query Runner 서비스에 대해 Pub/Sub 주제에 게시된 메시지를 필터링하는 Eventarc 트리거를 만듭니다.

  1. 트리거를 만듭니다.

    gcloud eventarc triggers create trigger-${SERVICE_NAME}-gke \
        --destination-gke-cluster=$CLUSTER_NAME \
        --destination-gke-location=$CLUSTER_LOCATION \
        --destination-gke-namespace=default \
        --destination-gke-service=$SERVICE_NAME \
        --destination-gke-path=/ \
        --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
        --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com

    그러면 trigger-query-runner-gke라는 트리거가 생성됩니다.

  2. Pub/Sub 주제의 환경 변수를 설정합니다.

    export TOPIC_QUERY_SCHEDULED=$(basename $(gcloud eventarc triggers describe trigger-${SERVICE_NAME}-gke --format='value(transport.pubsub.topic)'))

작업 예약

처리 파이프라인은 두 개의 Cloud Scheduler 작업에 의해 트리거됩니다. Pub/Sub 주제에 하루에 한 번 게시하는 Cloud Scheduler 작업 두 개를 만듭니다.

gcloud scheduler jobs create pubsub cre-scheduler-uk \
      --location=$CLUSTER_LOCATION \
      --schedule="0 16 * * *" \
      --topic=${TOPIC_QUERY_SCHEDULED} \
      --message-body="United Kingdom"
gcloud scheduler jobs create pubsub cre-scheduler-cy \
      --location=$CLUSTER_LOCATION \
      --schedule="0 17 * * *" \
      --topic=${TOPIC_QUERY_SCHEDULED} \
      --message-body="Cyprus"

일정은 unix-cron 형식으로 지정됩니다. 예를 들어 0 16 * * *는 작업이 매일 UTC 16:00(오후 4시)에 실행됨을 의미합니다.

파이프라인 실행

  1. 모든 트리거가 성공적으로 생성되었는지 확인합니다.

    gcloud eventarc triggers list

    출력은 다음과 비슷하게 표시됩니다.

    NAME                       TYPE                                            DESTINATION         ACTIVE  LOCATION
    trigger-chart-creator-gke  google.cloud.pubsub.topic.v1.messagePublished   GKE:chart-creator   Yes     us-central1
    trigger-notifier-gke       google.cloud.audit.log.v1.written               GKE:notifier        Yes     us-central1
    trigger-query-runner-gke   google.cloud.pubsub.topic.v1.messagePublished   GKE:query-runner    Yes     us-central1
    
  2. Cloud Scheduler 작업 ID를 검색합니다.

    gcloud scheduler jobs list --location=$CLUSTER_LOCATION

    출력은 다음과 비슷하게 표시됩니다.

    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
    
  3. 작업이 매일 오후 4시, 5시에 실행되도록 예약되어 있지만 Cloud Scheduler 작업을 수동으로 실행할 수도 있습니다.

    gcloud scheduler jobs run cre-scheduler-cy --location=$CLUSTER_LOCATION
    gcloud scheduler jobs run cre-scheduler-uk --location=$CLUSTER_LOCATION
  4. 몇 분 후 Cloud Storage 버킷에 차트가 두 개 있는지 확인합니다.

    gcloud storage ls gs://${BUCKET}

    출력은 다음과 비슷하게 표시됩니다.

    gs://PROJECT_ID-charts/chart-cyprus.png
    gs://PROJECT_ID-charts/chart-unitedkingdom.png
    

수고하셨습니다. 차트 링크가 포함된 2개의 이메일도 받게 됩니다.

삭제

이 튜토리얼용으로 새 프로젝트를 만든 경우 이 프로젝트를 삭제합니다. 기존 프로젝트를 사용한 경우 이 튜토리얼에 추가된 변경사항은 제외하고 보존하려면 튜토리얼용으로 만든 리소스를 삭제합니다.

    Google Cloud 프로젝트 삭제:

    gcloud projects delete PROJECT_ID

튜토리얼 리소스 삭제

  1. 이 튜토리얼에서 배포한 Kubernetes 서비스 및 배포를 삭제하고 GKE 클러스터를 삭제합니다.

    kubectl delete service notifier chart-creator query-runner
    kubectl delete deployment notifier chart-creator query-runner
    gcloud container clusters delete $CLUSTER_NAME --region=$CLUSTER_LOCATION
  2. 이 튜토리얼에서 만든 Eventarc 트리거를 삭제합니다.

    gcloud eventarc triggers delete TRIGGER_NAME
    

    TRIGGER_NAME을 버킷의 이름으로 바꿉니다.

  3. Artifact Registry에서 이미지를 삭제합니다.

    gcloud artifacts docker images delete $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/notifier:v1
    gcloud artifacts docker images delete $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/chart-creator:v1
    gcloud artifacts docker images delete $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/query-runner:v1
  4. Artifact Registry 저장소를 삭제합니다.

    gcloud artifacts repositories delete REPOSITORY \
        --location=$CLUSTER_LOCATION
  5. 버킷 내에 있는 모든 객체와 함께 버킷을 삭제합니다.

    gcloud storage rm --recursive gs://${BUCKET}/
  6. Cloud Scheduler 작업을 삭제합니다.

    gcloud scheduler jobs delete cre-scheduler-cy --location=$CLUSTER_LOCATION
    gcloud scheduler jobs delete cre-scheduler-uk --location=$CLUSTER_LOCATION
  7. 튜토리얼 설정 중에 추가한 Google Cloud CLI 기본 구성을 삭제합니다.

    gcloud config unset project
    gcloud config unset eventarc/location

다음 단계