Pub/Sub에서 BigQuery로 스트리밍


이 튜토리얼에서는 BigQuery에 대한 Pub/Sub 구독 템플릿을 사용하여 Google Cloud 콘솔 또는 Google Cloud CLI를 통해 Dataflow 템플릿 작업을 만들고 실행합니다. 이 튜토리얼에서는 Pub/Sub에서 JSON 인코딩된 메시지를 읽고, 사용자 정의 함수(UDF)를 사용하여 Google에서 제공하는 스트리밍 템플릿을 확장하고, Apache Beam SDK로 메시지 데이터를 변환하고, 결과를 BigQuery 테이블에 쓰는 스트리밍 파이프라인 예시를 설명합니다.

스트리밍 분석 및 데이터 통합 파이프라인은 Pub/Sub를 사용하여 데이터를 수집하고 배포합니다. Pub/Sub를 사용하면 게시자구독자라는 이벤트 제작자 및 소비자 시스템을 만들 수 있습니다. 게시자는 이벤트를 Pub/Sub 서비스에 비동기적으로 보내고, Pub/Sub는 이벤트에 응답해야 하는 모든 서비스에 이벤트를 전달합니다.

Dataflow는 스트림(실시간) 및 일괄 모드에서 데이터를 변환하고 강화하는 완전 관리형 서비스입니다. Apache Beam SDK를 사용하여 수신 데이터를 변환하고 변환된 데이터를 출력하는 간소화된 파이프라인 개발 환경을 제공합니다.

이 워크플로의 이점은 UDF를 사용하여 메시지 데이터가 BigQuery에 쓰여지기 전에 변환할 수 있다는 것입니다. 다른 방법으로는 Dataflow를 사용하지 않고 Pub/Sub 메시지를 BigQuery에 직접 쓰는 BigQuery 구독을 사용하는 것입니다. 이 옵션은 적어도 한 번 전송만 지원하며 정확히 한 번 처리는 지원하지 않습니다.

목표

  • Pub/Sub 주제를 만듭니다.
  • 테이블 및 스키마가 있는 BigQuery 데이터 세트를 만듭니다.
  • Google에서 제공하는 스트리밍 템플릿을 사용하여 Dataflow를 통해 Pub/Sub 구독에서 BigQuery로 데이터를 스트리밍합니다.
  • 사용자 정의 함수(UDF)를 만들어 Google에서 제공하는 스트리밍 템플릿을 확장합니다.

비용

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

  • Dataflow
  • Pub/Sub
  • Cloud Storage
  • Cloud Scheduler
  • BigQuery

프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요. Google Cloud를 처음 사용하는 사용자는 무료 체험판을 사용할 수 있습니다.

이 문서에 설명된 태스크를 완료했으면 만든 리소스를 삭제하여 청구가 계속되는 것을 방지할 수 있습니다. 자세한 내용은 삭제를 참조하세요.

시작하기 전에

이 섹션에서는 프로젝트를 선택하고, API를 사용 설정하고, 사용자 계정과 워커 서비스 계정에 적절한 역할을 부여하는 방법을 설명합니다.

콘솔

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Compute Engine, Dataflow, Cloud Logging, BigQuery, Pub/Sub, Cloud Storage, Resource Manager, and Cloud Scheduler APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Compute Engine, Dataflow, Cloud Logging, BigQuery, Pub/Sub, Cloud Storage, Resource Manager, and Cloud Scheduler APIs.

    Enable the APIs

  8. 이 튜토리얼의 단계를 완료하려면 사용자 계정에 서비스 계정 사용자 역할이 있어야 합니다. Compute Engine 기본 서비스 계정에는 Dataflow 작업자, Dataflow 관리자, Pub/Sub 편집자, 스토리지 객체 관리자, BigQuery 데이터 편집자 역할이 있어야 합니다. Google Cloud 콘솔에서 필요한 역할을 추가하려면 다음 안내를 따르세요.

    1. Google Cloud 콘솔에서 IAM 페이지로 이동합니다.

      IAM으로 이동
    2. 프로젝트를 선택합니다.
    3. 사용자 계정이 포함된 행에서 주 구성원 수정을 클릭한 다음 다른 역할 추가를 클릭합니다.
    4. 드롭다운 목록에서 서비스 계정 사용자 역할을 선택합니다.
    5. Compute Engine 기본 서비스 계정이 포함된 행에서 주 구성원 수정을 클릭한 다음 다른 역할 추가를 클릭합니다.
    6. 드롭다운 목록에서 Dataflow 작업자 역할을 선택합니다.
    7. Dataflow 관리자, Pub/Sub 편집자, 스토리지 객체 관리자, BigQuery 데이터 편집자 역할에 대해 같은 단계를 반복하고 저장을 클릭합니다.

      역할 부여에 대한 상세 설명은 콘솔을 사용하여 IAM 역할 부여를 참조하세요.

gcloud

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Enable the Compute Engine, Dataflow, Cloud Logging, BigQuery, Pub/Sub, Cloud Storage, Resource Manager, and Cloud Scheduler APIs:

    gcloud services enable compute.googleapis.com dataflow.googleapis.com logging.googleapis.com bigquery.googleapis.com pubsub.googleapis.com storage.googleapis.com cloudresourcemanager.googleapis.com cloudscheduler.googleapis.com
  7. If you're using a local shell, then create local authentication credentials for your user account:

    gcloud auth application-default login

    You don't need to do this if you're using Cloud Shell.

  8. Grant roles to your user account. Run the following command once for each of the following IAM roles: roles/iam.serviceAccountUser

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
    • Replace PROJECT_ID with your project ID.
    • Replace USER_IDENTIFIER with the identifier for your user account. For example, user:myemail@example.com.

    • Replace ROLE with each individual role.
  9. Install the Google Cloud CLI.
  10. To initialize the gcloud CLI, run the following command:

    gcloud init
  11. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  12. Make sure that billing is enabled for your Google Cloud project.

  13. Enable the Compute Engine, Dataflow, Cloud Logging, BigQuery, Pub/Sub, Cloud Storage, Resource Manager, and Cloud Scheduler APIs:

    gcloud services enable compute.googleapis.com dataflow.googleapis.com logging.googleapis.com bigquery.googleapis.com pubsub.googleapis.com storage.googleapis.com cloudresourcemanager.googleapis.com cloudscheduler.googleapis.com
  14. If you're using a local shell, then create local authentication credentials for your user account:

    gcloud auth application-default login

    You don't need to do this if you're using Cloud Shell.

  15. Grant roles to your user account. Run the following command once for each of the following IAM roles: roles/iam.serviceAccountUser

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
    • Replace PROJECT_ID with your project ID.
    • Replace USER_IDENTIFIER with the identifier for your user account. For example, user:myemail@example.com.

    • Replace ROLE with each individual role.
  16. Compute Engine 기본 서비스 계정에 역할을 부여합니다. 다음 IAM 역할마다 다음 명령어를 1회 실행합니다.

    • roles/dataflow.admin
    • roles/dataflow.worker
    • roles/storage.admin
    • roles/pubsub.editor
    • roles/bigquery.dataEditor
    gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" --role=SERVICE_ACCOUNT_ROLE

    다음을 바꿉니다.

    • PROJECT_ID: 프로젝트 ID
    • PROJECT_NUMBER: 프로젝트 번호 프로젝트 번호를 찾으려면 gcloud projects describe 명령어를 사용합니다.
    • SERVICE_ACCOUNT_ROLE: 개별 역할입니다.

예시 소스 및 싱크 만들기

이 섹션에서는 다음을 만드는 방법을 설명합니다.

  • Pub/Sub를 사용하여 데이터의 스트리밍 소스
  • BigQuery에 데이터를 로드하는 데이터 세트

Cloud Storage 버킷 만들기

먼저 Google Cloud 콘솔 또는 Google Cloud CLI를 사용하여 Cloud Storage 버킷을 만듭니다. Dataflow 파이프라인은 이 버킷을 임시 저장소 위치로 사용합니다.

콘솔

  1. Google Cloud 콘솔에서 Cloud Storage 버킷 페이지로 이동합니다.

    버킷으로 이동

  2. 버킷 만들기를 클릭합니다.

  3. 버킷 만들기 페이지에서 버킷 이름 지정버킷 이름 지정 요구사항을 충족하는 이름을 입력합니다. Cloud Storage 버킷 이름은 전역에서 고유해야 합니다. 다른 옵션은 선택하지 마세요.

  4. 만들기를 클릭합니다.

gcloud

gcloud storage buckets create 명령어를 사용합니다.

gcloud storage buckets create gs://BUCKET_NAME

BUCKET_NAME버킷 이름 지정 요구사항을 충족하는 Cloud Storage 버킷의 이름으로 바꿉니다. Cloud Storage 버킷 이름은 전역에서 고유해야 합니다.

Pub/Sub 주제 및 구독 만들기

Pub/Sub 주제를 만든 다음 이 주제에 대한 구독을 만듭니다.

콘솔

주제를 만들려면 다음 단계를 완료합니다.

  1. Google Cloud 콘솔에서 Pub/Sub 주제 페이지로 이동합니다.

    주제로 이동

  2. 주제 만들기를 클릭합니다.

  3. 주제 ID 필드에 주제의 ID를 입력합니다. 주제 이름을 지정하는 방법에 대한 자세한 내용은 주제 또는 구독 이름 지정 안내를 참조하세요.

  4. 기본 구독 추가 옵션을 유지합니다. 다른 옵션은 선택하지 마세요.

  5. 주제 만들기를 클릭합니다.

gcloud

주제를 만들려면 gcloud pubsub topics create 명령어를 실행합니다. 구독 이름 지정 방법은 주제 또는 구독 이름 지정 안내를 참조하세요.

gcloud pubsub topics create TOPIC_ID

TOPIC_ID를 Pub/Sub 주제의 이름으로 바꿉니다.

주제에 대한 구독을 만들려면 gcloud pubsub subscriptions create 명령어를 실행합니다.

gcloud pubsub subscriptions create --topic TOPIC_ID SUBSCRIPTION_ID

SUBSCRIPTION_ID를 Pub/Sub 구독 이름으로 바꿉니다.

Cloud Scheduler 작업 만들기 및 실행

두 개의 Cloud Scheduler 작업을 만들고 실행합니다. 하나는 긍정적인 평점을 게시하는 작업이고 다른 하나는 Pub/Sub 주제에 부정적인 평점을 게시하는 작업입니다.

콘솔

긍정적인 평점을 위한 Cloud Scheduler 작업을 만듭니다.

  1. 콘솔에서 Cloud 스케줄러 페이지로 이동합니다.

    Cloud Scheduler로 이동

  2. 작업 만들기 버튼을 클릭합니다.

  3. positive-ratings-publisher 이름을 입력합니다.

  4. 이 튜토리얼에서 명령어를 실행할 위치에 가까운 Dataflow 리전을 선택합니다. REGION 변수 값은 유효한 리전 이름이어야 합니다. 리전과 위치에 대한 자세한 내용은 Dataflow 위치를 참조하세요.

  5. unix-cron 형식 * * * * *을 사용하여 작업의 빈도를 지정합니다.

    자세한 내용은 크론 작업 일정 구성을 참조하세요.

  6. 시간대를 선택합니다.

  7. 계속을 클릭합니다.

  8. 대상 목록에서 Pub/Sub를 선택합니다.

  9. 목록에서 주제 이름을 선택합니다.

  10. 대상으로 전송될 다음 메시지 문자열을 추가합니다:{"url": "https://beam.apache.org/", "review": "positive"}

  11. 만들기를 클릭합니다.

이제 1분마다 Pub/Sub 주제에 긍정적인 평점이 포함된 메시지를 전송하는 크론 작업이 생성되었습니다. Cloud 함수가 해당 주제를 구독합니다.

부정적인 평점을 위한 Cloud Scheduler 작업을 만듭니다.

  1. 콘솔의 Cloud Scheduler 페이지에서 작업 만들기 버튼을 클릭합니다.

  2. negative-ratings-publisher 이름을 입력합니다.

  3. 작업을 실행할 리전을 선택합니다.

  4. unix-cron 형식 */2 * * * *을 사용하여 작업의 빈도를 지정합니다.

    자세한 내용은 크론 작업 일정 구성을 참조하세요.

  5. 시간대를 선택합니다.

  6. 계속을 클릭합니다.

  7. 대상 목록에서 Pub/Sub를 선택합니다.

  8. 목록에서 주제 이름을 선택합니다.

  9. 대상으로 전송될 다음 메시지 문자열을 추가합니다:{"url": "https://beam.apache.org/", "review": "negative"}

  10. 만들기를 클릭합니다.

이제 2분마다 Pub/Sub 주제에 부정적인 평가가 포함된 메시지를 전송하는 크론 작업이 생성되었습니다. Cloud 함수가 해당 주제를 구독합니다.

gcloud

  1. 이 튜토리얼에서 Cloud Scheduler 작업을 만들려면 gcloud scheduler jobs create 명령어를 사용합니다. 이 단계에서는 1분마다 1개의 메시지를 게시하는 '긍정적인 평점'을 위한 게시자를 만듭니다.

    gcloud scheduler jobs create pubsub positive-ratings-publisher \
      --schedule="* * * * *" \
      --location=DATAFLOW_REGION \
      --topic="TOPIC_ID" \
      --message-body='{"url": "https://beam.apache.org/", "review": "positive"}'
    

    DATAFLOW_REGION을 Dataflow 작업을 배포할 리전으로 바꿉니다. 이 튜토리얼에서 명령어를 실행할 위치에 가까운 Dataflow 리전을 선택합니다. REGION 변수 값은 유효한 리전 이름이어야 합니다.

  2. Cloud Scheduler 작업을 시작하려면 gcloud scheduler jobs run 명령어를 사용합니다.

    gcloud scheduler jobs run --location=DATAFLOW_REGION positive-ratings-publisher
    
  3. 2분마다 1개의 메시지를 게시하는 '부정적인 평점'에 대해 다른 유사한 게시자를 작성하고 실행합니다. 이 단계에서는 2분마다 1개의 메시지를 게시하는 '부정적인 평점'을 위한 게시자를 만듭니다.

    gcloud scheduler jobs create pubsub negative-ratings-publisher \
      --schedule="*/2 * * * *" \
      --location=DATAFLOW_REGION  \
      --topic="TOPIC_ID" \
      --message-body='{"url": "https://beam.apache.org/", "review": "negative"}'
    
  4. 두 번째 Cloud Scheduler 작업을 시작합니다.

    gcloud scheduler jobs run --location=DATAFLOW_REGION negative-ratings-publisher
    

BigQuery 데이터세트 만들기

Pub/Sub 주제에 적절한 스키마로 BigQuery 데이터 세트와 테이블을 만듭니다.

콘솔

BigQuery 데이터 세트를 만듭니다.

  1. Google Cloud Console에서 BigQuery 페이지를 엽니다.

    BigQuery 페이지로 이동

  2. 탐색기 패널에서 데이터 세트를 만들 프로젝트를 선택합니다.

  3. 작업 옵션을 펼치고 데이터 세트 만들기를 클릭합니다.

  4. 데이터 세트 만들기 페이지에서 다음을 실행합니다.

    • 데이터세트 IDtutorial_dataset을 입력합니다.
    • 데이터 위치에서 데이터 세트의 지리적 위치를 선택합니다. 데이터 세트가 생성된 후에는 위치를 변경할 수 없습니다.

    • 다른 옵션은 선택하지 마세요.

    • 데이터 세트 만들기를 클릭합니다.

스키마가 있는 BigQuery 테이블을 만듭니다.

  1. 탐색기 패널에서 프로젝트를 확장하고 tutorial_dataset 데이터 세트를 선택합니다.

  2. 작업 옵션을 펼치고 열기를 클릭합니다.

  3. 세부정보 패널에서 테이블 만들기를 클릭합니다.

  4. 테이블 만들기 페이지의 소스 섹션에서 빈 테이블을 선택합니다.

  5. 테이블 만들기 페이지의 대상 섹션에서 다음을 수행합니다.

    • 데이터 세트 이름tutorial_dataset로 설정되었는지 확인합니다.
    • 테이블 이름 필드에 tutorial을 입력합니다.
    • 테이블 유형기본 테이블로 설정되어 있는지 확인합니다.
  6. 스키마 섹션에 스키마 정의를 입력합니다. 텍스트로 편집을 사용 설정하고 다음 테이블 스키마를 JSON 배열로 입력합니다.

    [
      {
        "mode": "NULLABLE",
        "name": "url",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "review",
        "type": "STRING"
      }
    ]
    
  7. 파티션 및 클러스터 설정에서 기본값(No partitioning)을 그대로 둡니다.

  8. 고급 옵션 섹션에서 암호화의 기본값(Google-managed key)을 그대로 둡니다. 기본적으로 Dataflow는 비활성 상태로 저장된 고객 콘텐츠를 암호화합니다.

  9. 테이블 만들기를 클릭합니다.

gcloud

bq mk 명령어를 사용하여 데이터 세트를 만듭니다.

bq --location=DATAFLOW_REGION mk \
PROJECT_ID:tutorial_dataset

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

bq mk 명령어를 --table 또는 -t 플래그와 함께 사용하여 데이터 세트에 테이블을 만듭니다.

bq mk \
    --table \
    PROJECT_ID:tutorial_dataset.tutorial \
    url:STRING,review:STRING

사용자 정의 함수(UDF) 만들기

선택적으로 JavaScript UDF를 만들어 Google에서 제공하는 Pub/Sub 구독을 BigQuery 템플릿으로 확장할 수 있습니다. UDF를 사용하면 템플릿에 제공되지 않은 데이터 변환을 정의하고 이를 템플릿에 삽입할 수 있습니다.

다음 UDF는 수신되는 등급의 URL을 검증합니다. URL이 없거나 잘못된 등급은 동일한 프로젝트 및 데이터 세트에서 데드 레터 테이블로도 알려진 _error_records 서픽스가 추가된 다른 출력 테이블로 전달됩니다.

자바스크립트

/**
 * User-defined function (UDF) to transform events
 * as part of a Dataflow template job.
 *
 * @param {string} inJson input Pub/Sub JSON message (stringified)
 */
 function process(inJson) {
    const obj = JSON.parse(inJson);
    const includePubsubMessage = obj.data && obj.attributes;
    const data = includePubsubMessage ? obj.data : obj;

    if (!data.hasOwnProperty('url')) {
      throw new Error("No url found");
    } else if (data.url !== "https://beam.apache.org/") {
      throw new Error("Unrecognized url");
    }

    return JSON.stringify(obj);
  }

이 자바스크립트 스니펫을 이전에 만든 Cloud Storage 버킷에 저장합니다.

파이프라인 실행

Google에서 제공하는 Pub/Sub Subscription to BigQuery 템플릿을 사용하여 스트리밍 파이프라인을 실행합니다. 파이프라인은 Pub/Sub 주제에서 수신 데이터를 가져와 BigQuery 데이터 세트에 데이터를 출력합니다.

콘솔

  1. Google Cloud 콘솔에서 Dataflow 작업 페이지로 이동합니다.

    작업으로 이동

  2. 템플릿에서 작업 만들기를 클릭합니다.

  3. Dataflow 작업의 작업 이름을 입력합니다.

  4. 리전 엔드포인트에서 Dataflow 작업의 리전을 선택합니다.

  5. Dataflow 템플릿에 대해 BigQuery에 대한 Pub/Sub 구독 템플릿을 선택합니다.

  6. BigQuery 출력 테이블에 다음을 입력합니다.

    PROJECT_ID:tutorial_dataset.tutorial
    
  7. Pub/Sub 입력 구독에 다음을 입력합니다.

    projects/PROJECT_ID/subscriptions/SUBSCRIPTION_ID
    

    PROJECT_ID를 BigQuery 데이터 세트를 만든 프로젝트의 프로젝트 ID로, SUBSCRIPTION_ID를 Pub/Sub 구독의 이름으로 바꿉니다.

  8. 임시 위치에 다음을 입력합니다.

    gs://BUCKET_NAME/temp/
    

    BUCKET_NAME을 Cloud Storage 버킷의 이름으로 바꿉니다. temp 폴더는 스테이징된 파이프라인 작업과 같은 임시 파일을 저장합니다.

  9. 선택사항: 작업에 UDF를 포함하려면 선택적 매개변수를 펼칩니다.

    1. Cloud Storage의 자바스크립트 UDF 경로에 다음을 입력합니다.

      gs://BUCKET_NAME/dataflow_udf_transform.js
      
    2. 자바스크립트 UDF 이름에 다음을 입력합니다.

      process
      
  10. 작업 실행을 클릭합니다.

템플릿이 데드 레터 테이블로 메시지를 전달할 수 있는지 확인하려면 URL이 없거나 잘못된 등급을 게시합니다.

  1. Pub/Sub 주제 페이지로 이동합니다.

  2. TOPIC_ID를 클릭합니다.

  3. 메시지 섹션으로 이동합니다.

  4. 메시지 게시를 클릭합니다.

  5. 메시지 본문에 URL이 없거나 잘못된 등급을 입력합니다. 예를 들면 다음과 같습니다.

    {"url": "https://beam.apache.org/documentation/sdks/java/", "review": "positive"}
    
  6. 게시를 클릭합니다.

gcloud

셸 또는 터미널에서 템플릿을 실행하려면 gcloud dataflow jobs run 명령어를 사용합니다.

gcloud dataflow jobs run JOB_NAME \
    --gcs-location gs://dataflow-templates-DATAFLOW_REGION/latest/PubSub_Subscription_to_BigQuery \
    --region DATAFLOW_REGION \
    --staging-location gs://BUCKET_NAME/temp \
    --parameters \
inputSubscription=projects/PROJECT_ID/subscriptions/SUBSCRIPTION_ID,\
outputTableSpec=PROJECT_ID:tutorial_dataset.tutorial

JOB_NAME을 원하는 고유한 이름으로 바꿉니다.

선택적으로 UDF로 템플릿을 실행하려면 다음 명령어를 사용합니다.

gcloud dataflow jobs run JOB_NAME \
    --gcs-location gs://dataflow-templates-DATAFLOW_REGION/latest/PubSub_Subscription_to_BigQuery \
    --region DATAFLOW_REGION \
    --staging-location gs://BUCKET_NAME/temp \
    --parameters \
inputSubscription=projects/PROJECT_ID/subscriptions/SUBSCRIPTION_ID,\
outputTableSpec=PROJECT_ID:tutorial_dataset.tutorial,\
javascriptTextTransformGcsPath=gs://BUCKET_NAME/dataflow_udf_transform.js,\
javascriptTextTransformFunctionName=process

템플릿이 데드 레터 테이블로 메시지를 전달할 수 있는지 확인하려면 URL이 없거나 잘못된 등급을 게시합니다. 예를 들면 다음과 같습니다.

gcloud pubsub topics publish TOPIC_ID \
  --message='{"url": "https://beam.apache.org/documentation/sdks/java/", "review": "positive"}'

결과 보기

BigQuery 테이블에 기록된 데이터를 봅니다.

콘솔

  1. Google Cloud Console에서 BigQuery 페이지로 이동합니다.
    BigQuery 페이지로 이동

  2. 쿼리 편집기 창에서 다음 쿼리를 실행합니다.

    SELECT * FROM `PROJECT_ID.tutorial_dataset.tutorial`
    LIMIT 1000
    

    데이터가 테이블에 표시되는 데 최대 1분이 걸릴 수 있습니다.

    이 쿼리는 지난 24시간 동안 테이블에 추가된 행을 반환합니다. 표준 SQL을 사용하여 쿼리를 실행할 수도 있습니다.

    데드 레터 테이블에 일부 오류 레코드가 기록될 것으로 예상되면 쿼리에서 테이블 이름 tutorial_error_records를 사용합니다. 예를 들면 다음과 같습니다.

    SELECT * FROM `PROJECT_ID.tutorial_dataset.tutorial_error_records`
    LIMIT 1000
    

gcloud

BigQuery에서 다음 쿼리를 실행하여 결과를 확인합니다.

bq query --use_legacy_sql=false 'SELECT * FROM `'"PROJECT_ID.tutorial_dataset.tutorial"'`'

이 파이프라인이 실행되는 동안 매분 BigQuery 테이블에 새 행이 추가됩니다.

데드 레터 테이블에 일부 오류 레코드가 기록될 것으로 예상되면 쿼리에서 테이블 이름 tutorial_error_records를 사용합니다. 예를 들면 다음과 같습니다.

SELECT * FROM `PROJECT_ID.tutorial_dataset.tutorial_error_records`
LIMIT 1000

삭제

이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.

프로젝트 삭제

비용이 청구되지 않도록 하는 가장 쉬운 방법은 튜토리얼에서 만든 Google Cloud 프로젝트를 삭제하는 것입니다.

콘솔

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

gcloud

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

개별 리소스 삭제

나중에 프로젝트를 재사용하려면 프로젝트를 유지하고 튜토리얼 중에 만든 리소스를 삭제하면 됩니다.

Dataflow 파이프라인 중지

콘솔

  1. Google Cloud 콘솔에서 Dataflow 작업 페이지로 이동합니다.

    작업으로 이동

  2. 중지할 작업을 클릭합니다.

    작업을 중지하려면 작업 상태가 실행 중이어야 합니다.

  3. 작업 세부정보 페이지에서 중지를 클릭합니다.

  4. 취소를 클릭합니다.

  5. 선택을 확인하려면 작업 중지를 클릭합니다.

gcloud

Dataflow 작업을 취소하려면 gcloud dataflow jobs 명령어를 사용합니다.

gcloud dataflow jobs list \
  --filter 'NAME=JOB_NAME AND STATE=Running' \
  --format 'value(JOB_ID)' \
  --region "DATAFLOW_REGION" \
  | xargs gcloud dataflow jobs cancel --region "DATAFLOW_REGION"

Google Cloud 프로젝트 리소스 정리

콘솔

  1. Cloud Scheduler 작업을 삭제합니다.

    1. Google Cloud 콘솔에서 Cloud Scheduler 페이지로 이동합니다.

      Cloud Scheduler로 이동

    2. 작업을 선택합니다.

    3. 페이지 상단의 삭제 버튼을 클릭하고 삭제를 확인합니다.

  2. Pub/Sub 주제 및 구독을 삭제합니다.

    1. Google Cloud 콘솔에서 Pub/Sub 주제 페이지로 이동합니다.

      주제로 이동

    2. 앞서 만든 주제를 선택합니다.

    3. 삭제를 클릭하여 주제를 영구 삭제합니다.

    4. Google Cloud 콘솔에서 Pub/Sub 구독 페이지로 이동합니다.

      구독 페이지로 이동

    5. 주제로 만든 구독을 선택합니다.

    6. 삭제를 클릭하여 주제를 영구 삭제합니다.

  3. BigQuery 테이블 및 데이터 세트를 삭제합니다.

    1. Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.

      BigQuery로 이동

    2. 탐색기 패널에서 프로젝트를 펼칩니다.

    3. 삭제하려는 데이터 세트 옆에 있는 작업 보기를 클릭한 다음 삭제를 클릭합니다.

  4. Cloud Storage 버킷을 삭제합니다.

    1. Google Cloud 콘솔에서 Cloud Storage 버킷 페이지로 이동합니다.

      버킷으로 이동

    2. 삭제할 버킷을 선택하고 삭제를 클릭한 후 안내를 따르세요.

gcloud

  1. Cloud Scheduler 작업을 삭제하려면 gcloud scheduler jobs delete 명령어를 사용합니다.

    gcloud scheduler jobs delete negative-ratings-publisher --location=DATAFLOW_REGION
    
    gcloud scheduler jobs delete positive-ratings-publisher --location=DATAFLOW_REGION
    
  2. Pub/Sub 구독 및 주제를 삭제하려면 gcloud pubsub subscriptions deletegcloud pubsub topics delete 명령어를 사용합니다.

    gcloud pubsub subscriptions delete SUBSCRIPTION_ID
    gcloud pubsub topics delete TOPIC_ID
    
  3. BigQuery 테이블을 삭제하려면 bq rm 명령어를 사용합니다.

    bq rm -f -t PROJECT_ID:tutorial_dataset.tutorial
    
  4. BigQuery 데이터 세트를 삭제합니다. 데이터 세트만으로는 비용이 발생하지 않습니다.

    bq rm -r -f -d PROJECT_ID:tutorial_dataset
    
  5. Cloud Storage 버킷을 삭제하려면 gcloud storage rm 명령어를 사용합니다. 버킷만으로는 비용이 발생하지 않습니다.

    gcloud storage rm gs://BUCKET_NAME --recursive
    

사용자 인증 정보 취소

콘솔

프로젝트를 유지할 경우 Compute Engine 기본 서비스 계정에 부여한 역할을 취소합니다.

  1. Google Cloud 콘솔에서 IAM 페이지로 이동합니다.

IAM으로 이동

  1. 프로젝트, 폴더, 조직을 선택합니다.

  2. 액세스 권한을 취소하려는 주 구성원이 포함된 행을 찾으세요. 이 행에서 주 구성원 수정을 클릭합니다.

  3. 취소할 역할마다 삭제 버튼을 클릭한 다음 저장을 클릭합니다.

gcloud

  • 프로젝트를 유지할 경우 Compute Engine 기본 서비스 계정에 부여한 역할을 취소합니다. 다음 IAM 역할마다 다음 명령어를 한 번 실행합니다.
    • roles/dataflow.admin
    • roles/dataflow.worker
    • roles/storage.admin
    • roles/pubsub.editor
    • roles/bigquery.dataEditor
      gcloud projects remove-iam-policy-binding <var>PROJECT_ID</var> \
      --member=serviceAccount:<var>PROJECT_NUMBER</var>-compute@developer.gserviceaccount.com \
      --role=<var>ROLE</var>
    

  • Optional: Revoke the authentication credentials that you created, and delete the local credential file.

    gcloud auth application-default revoke
  • Optional: Revoke credentials from the gcloud CLI.

    gcloud auth revoke

다음 단계