Bigtable 구독 만들기

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

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

시작하기 전에

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

  • 테이블에 data라는 column family가 있어야 합니다. 테이블을 만들 때 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. 콘솔에서 IAM 페이지로 이동합니다. Google Cloud

    IAM으로 이동

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

  3. Cloud Pub/Sub 서비스 계정 (주 구성원 service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com) 의 행을 찾아 주 구성원 수정을 클릭합니다.

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

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

인스턴스

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

    인스턴스로 이동

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

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

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

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

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

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

또한 Pub/Sub 서비스 계정에 Pub/Sub 서비스 에이전트 역할이 있는지 확인합니다. 이렇게 하면 Pub/Sub에서 Bigtable 인스턴스 프로젝트의 관리자 API 할당량을 사용할 수 있습니다.

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

    IAM으로 이동

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

  3. Cloud Pub/Sub 서비스 계정 (주 구성원 service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com) 의 행을 찾아 주 구성원 수정을 클릭합니다.

  4. 역할 할당 섹션에서 Cloud Pub/Sub 서비스 에이전트 역할이 아직 없으면 다른 역할 추가 를 클릭하여 추가합니다.

커스텀 서비스 계정 사용

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

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

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

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

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

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

Bigtable 테이블 쓰기

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

메시지 데이터

Bigtable 구독은 Pub/Sub 메시지 데이터를 data라는 column family에 씁니다.

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

  • 행 키는 구독 ID, 메시지 ID 솔트 프리픽스, 메시지 ID를 연결한 것으로, 형식은 다음과 같습니다.

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

  • 메시지 데이터는 data column family의 단일 열에 쓰입니다. 열에는 빈 문자열 ("") column qualifier가 있습니다.

  • 데이터는 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 구독을 만들고, 구독을 사용하여 Pub/Sub 메시지를 Bigtable 테이블에 쓰고, 테이블을 쿼리하는 방법을 보여줍니다.

  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를 프로젝트 ID로 바꿉니다. Google Cloud

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

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

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

    messageIds:
    - 'MESSAGE_ID'
    

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

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

    인스턴스로 이동

  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 내에서도 구독을 모니터링할 수 있습니다.

다음 단계