Bigtable 구독 만들기

이 문서에서는 Pub/Sub에서 Bigtable 구독을 만드는 방법을 설명합니다. Bigtable 구독을 사용하면 Pub/Sub 메시지를 Bigtable 테이블에 직접 쓸 수 있습니다.

이 구독 유형에 대한 자세한 내용은 Bigtable 구독을 참고하세요.

시작하기 전에

  • Pub/Sub 메시지를 쓸 Bigtable 테이블이 이미 있어야 합니다. 자세한 내용은 표 만들기 및 관리를 참고하세요.

  • 테이블에 data이라는 column family가 있어야 합니다. 테이블을 만들 때 열 패밀리를 추가할 수 있습니다.

  • 메시지 메타데이터를 테이블에 쓰려면 테이블에 pubsub_metadata이라는 column family도 있어야 합니다.

필수 역할 및 권한

Bigtable 구독을 만드는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 Pub/Sub 편집자 (roles/pubsub.editor) IAM 역할을 부여해 달라고 요청하세요. 역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

이 사전 정의된 역할에는 Bigtable 구독을 만드는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 펼치세요.

필수 권한

Bigtable 구독을 만들려면 다음 권한이 필요합니다.

  • 프로젝트에 대한 pubsub.subscriptions.create 권한
  • 주제에 대한 pubsub.topics.attachSubscription 권한

커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.

프로젝트 간 구독

다른 프로젝트의 주제에 대한 구독을 한 프로젝트에서 만드는 경우 구독을 만드는 프로젝트에 대한 pubsub.subscriptions.create 권한과 주제에 대한 pubsub.topics.attachSubscription 권한이 있어야 합니다.

서비스 계정에 IAM 역할 부여

Pub/Sub는 Identity and Access Management (IAM) 서비스 계정을 사용하여 Google Cloud 리소스에 액세스합니다. Pub/Sub가 Bigtable에 쓸 수 있도록 하려면 이 서비스 계정에 Bigtable 사용자(roles/bigtable.user) 역할을 부여해야 합니다.

기본적으로 Pub/Sub는 Pub/Sub 서비스 에이전트
(service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com)를 사용합니다. Bigtable 구독을 만들 때 사용자 관리형 서비스 계정을 지정할 수도 있습니다.

Pub/Sub 서비스 에이전트 사용

Pub/Sub 서비스 에이전트에 필요한 역할을 부여하려면 다음 단계를 따르세요. 테이블이 포함된 프로젝트 또는 Bigtable 인스턴스에 역할을 부여할 수 있습니다.

프로젝트

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

    IAM으로 이동

  2. Google 제공 역할 부여 포함을 선택합니다.

  3. Cloud Pub/Sub 서비스 계정 행을 찾아 주 구성원 수정을 클릭합니다.

  4. 다른 역할 추가를 클릭하고 Bigtable 사용자 역할을 선택합니다.

자세한 내용은 콘솔을 사용하여 IAM 역할 부여하기를 참고하세요.

인스턴스

  1. Google Cloud 콘솔에서 Bigtable > 인스턴스 페이지로 이동합니다.

    인스턴스로 이동

  2. 인스턴스 페이지에서 인스턴스 이름 옆의 체크박스를 선택합니다.

  3. 정보 패널이 표시되지 않으면 정보 패널 표시를 클릭합니다.

  4. 주 구성원 추가를 클릭한 다음 서비스 계정 식별자를 다음 형식으로 입력합니다.

    service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com

  5. 역할 할당 목록에서 Bigtable 사용자를 선택합니다.

  6. 저장을 클릭합니다. 주 구성원에게 리소스에 대한 역할이 부여됩니다.

커스텀 서비스 계정 사용

Pub/Sub 서비스 에이전트Bigtable 사용자 역할을 부여하면 프로젝트에서 구독을 만들 권한이 있는 모든 사용자가 Bigtable 테이블에 쓸 수 있습니다. 더 세부적인 권한을 제공하려면 대신 사용자 관리형 서비스 계정을 구성하세요.

Bigtable에 쓰도록 사용자 관리 서비스 계정을 구성하려면 다음 권한이 필요합니다.

  • 사용자 관리 서비스 계정에는 Bigtable 사용자 역할이 있어야 합니다.

  • Cloud Pub/Sub 서비스 계정에는 사용자 관리형 서비스 계정에 대한 iam.serviceAccounts.getAccessToken 권한이 있어야 합니다.

  • 구독을 만드는 사용자에게는 사용자 관리 서비스 계정에 대한 iam.serviceAccounts.actAs 권한이 있어야 합니다.

구독을 만들 때 사용자 관리 서비스 계정을 지정합니다. 자세한 내용은 Bigtable 구독 만들기를 참고하세요.

Bigtable 테이블 쓰기

이 섹션에서는 Bigtable 구독이 Pub/Sub 메시지를 테이블에 쓰는 방법을 설명합니다.

메시지 데이터

Bigtable 구독은 Pub/Sub 메시지 데이터를 data라는 열 패밀리에 작성합니다.

  • 각 행에는 하나의 메시지 데이터가 포함됩니다.

  • row key는 다음 형식으로 구독 ID, 메시지 ID 솔트 접두사, 메시지 ID를 연결한 것입니다.

    "projects/PROJECT_NUMBER/subscriptions/SUBSCRIPTION_ID#SALT_PREFIX#MESSAGE_ID"

  • 메시지 데이터는 data column family의 단일 열에 기록됩니다. 열에 빈 문자열 ("") 열 한정자가 있습니다.

  • 데이터는 BYTES 유형으로 작성됩니다.

  • 셀의 타임스탬프는 메시지의 게시 시간입니다.

메시지 메타데이터

기본적으로 정기 결제는 메시지 메타데이터를 테이블에 쓰지 않습니다. 원하는 경우 Bigtable 구독을 만들 때 메타데이터 쓰기를 사용 설정할 수 있습니다.

메타데이터 쓰기가 사용 설정된 경우 구독은 메시지 메타데이터를 pubsub_metadata라는 column family에 씁니다. 구독을 만들기 전에 테이블에 이 이름의 column family가 있는지 확인하세요.

각 메시지에 대해 구독은 pubsub_metadata column family 아래에 다음 열이 있는 새 행을 씁니다.

데이터 유형
subscription_name 정기 결제의 이름 문자열
message_id 메시지 ID 문자열
attributes 메시지 속성이 포함된 JSON 객체 문자열

Bigtable 구독 만들기

Bigtable 구독을 만들려면 gcloud beta pubsub subscriptions create 명령어를 사용합니다.

gcloud beta pubsub subscriptions create SUBSCRIPTION_ID \
  --topic=TOPIC_ID \
  --bigtable-table=projects/PROJECT_ID/instances/INSTANCE_ID/tables/TABLE_ID

다음을 바꿉니다.

  • SUBSCRIPTION_ID: 정기 결제의 이름입니다.
  • TOPIC_ID: 읽을 주제의 이름 또는 ID입니다.
  • PROJECT_ID: 프로젝트 ID입니다.
  • INSTANCE_ID: 테이블이 포함된 Bigtable 인스턴스의 ID입니다.
  • TABLE_ID: 데이터를 쓸 테이블의 ID입니다. 테이블에 data이라는 column family가 있어야 합니다.

다음 플래그는 선택사항입니다.

  • --bigtable-write-metadata: 메시지 메타데이터를 작성할지 여부를 지정합니다. 이 플래그를 생략하면 구독에서 메타데이터를 쓰지 않습니다. 자세한 내용은 메시지 메타데이터를 참고하세요.

  • --bigtable-app-profile-id=APP_PROFILE: Bigtable 쓰기에 사용할 앱 프로필을 지정합니다. 앱 프로필은 단일 클러스터 라우팅을 사용해야 합니다. 이 플래그를 지정하지 않으면 구독에서 기본 앱 프로필을 사용합니다.

  • --bigtable-service-account-email: Bigtable에 쓸 때 사용할 서비스 계정을 지정합니다. 지정하지 않으면 구독에서 Pub/Sub 서비스 에이전트를 사용합니다. 자세한 내용은 커스텀 서비스 계정 사용을 참고하세요.

예: Pub/Sub에서 Bigtable로 쓰기

다음 예시에서는 Bigtable 구독을 만들고, 구독을 사용하여 Bigtable 테이블에 Pub/Sub 메시지를 쓰고, 테이블을 쿼리하는 방법을 보여줍니다.

  1. my-instance라는 새 Bigtable 인스턴스를 만듭니다.

    gcloud bigtable instances create my-instance --display-name="My instance" \
      --cluster-config=id=my-cluster-1,zone=ZONE,nodes=1
    

    ZONE을 클러스터가 실행되는 영역으로 바꿉니다. 예: us-central1-b

  2. data이라는 column family가 있는 table-1이라는 Bigtable 테이블을 만듭니다.

    gcloud bigtable instances tables create table-1 \
      --instance=my-instance \
      --column-families=data
    
  3. topic-1이라는 Pub/Sub 주제를 만듭니다.

    gcloud pubsub topics create topic-1
    
  4. 주제에서 읽어오는 Bigtable 구독을 만듭니다.

    gcloud beta pubsub subscriptions create bigtable-sub \
      --topic=topic-1 \
      --bigtable-table=projects/PROJECT_ID/instances/my-instance/tables/table-1
    

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

  5. 주제에 메시지를 게시합니다.

    gcloud pubsub topics publish topic-1 --message='{"name":"Alice"}'
    

    메시지가 게시되면 출력은 메시지 ID입니다.

    messageIds:
    - 'MESSAGE_ID'
    

Bigtable 구독은 메시지 데이터를 data column family에 씁니다. 데이터를 쿼리하려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에서 Bigtable 인스턴스 페이지로 이동합니다.

    인스턴스로 이동

  2. my-cluster-1라는 인스턴스를 클릭합니다.

  3. 탐색 메뉴에서 Bigtable Studio를 클릭합니다.

  4. 쿼리 편집기에서 다음 SQL 쿼리를 실행합니다.

    SELECT _key, JSON_VALUE(CAST(data[''] AS STRING), '$.name') AS name FROM table-1;
    

    쿼리 결과는 다음과 같이 표시됩니다.

    +-------------------+
    | _key      | name  |
    +-----------|-------+
    | "ROW_KEY" | Alice |
    +-------------------+
    

    메시지 데이터는 BYTES 유형으로 저장됩니다. 이 예에서 데이터는 JSON 문자열이므로 쿼리에서 GoogleSQL JSON 함수를 사용하여 데이터를 파싱할 수 있습니다.

Bigtable 구독 모니터링

Cloud Monitoring은 구독을 모니터링하기 위한 여러 측정항목을 제공합니다.

Pub/Sub와 관련하여 사용 가능한 모든 측정항목 및 설명 목록은 Pub/Sub 모니터링 문서를 참조하세요.

Pub/Sub 내에서도 구독을 모니터링할 수 있습니다.

다음 단계