이 문서에서는 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 인스턴스에 역할을 부여할 수 있습니다.
프로젝트
Google Cloud 콘솔에서 IAM 페이지로 이동합니다.
Google 제공 역할 부여 포함을 선택합니다.
Cloud Pub/Sub 서비스 계정 행을 찾아 주 구성원 수정을 클릭합니다.
다른 역할 추가를 클릭하고 Bigtable 사용자 역할을 선택합니다.
자세한 내용은 콘솔을 사용하여 IAM 역할 부여하기를 참고하세요.
인스턴스
Google Cloud 콘솔에서 Bigtable > 인스턴스 페이지로 이동합니다.
인스턴스 페이지에서 인스턴스 이름 옆의 체크박스를 선택합니다.
정보 패널이 표시되지 않으면 정보 패널 표시를 클릭합니다.
주 구성원 추가를 클릭한 다음 서비스 계정 식별자를 다음 형식으로 입력합니다.
service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com개역할 할당 목록에서 Bigtable 사용자를 선택합니다.
저장을 클릭합니다. 주 구성원에게 리소스에 대한 역할이 부여됩니다.
커스텀 서비스 계정 사용
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"메시지 데이터는
datacolumn 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 메시지를 쓰고, 테이블을 쿼리하는 방법을 보여줍니다.
my-instance라는 새 Bigtable 인스턴스를 만듭니다.gcloud bigtable instances create my-instance --display-name="My instance" \ --cluster-config=id=my-cluster-1,zone=ZONE,nodes=1ZONE을 클러스터가 실행되는 영역으로 바꿉니다. 예:
us-central1-bdata이라는 column family가 있는table-1이라는 Bigtable 테이블을 만듭니다.gcloud bigtable instances tables create table-1 \ --instance=my-instance \ --column-families=datatopic-1이라는 Pub/Sub 주제를 만듭니다.gcloud pubsub topics create topic-1주제에서 읽어오는 Bigtable 구독을 만듭니다.
gcloud beta pubsub subscriptions create bigtable-sub \ --topic=topic-1 \ --bigtable-table=projects/PROJECT_ID/instances/my-instance/tables/table-1PROJECT_ID를 Google Cloud프로젝트 ID로 바꿉니다.
주제에 메시지를 게시합니다.
gcloud pubsub topics publish topic-1 --message='{"name":"Alice"}'메시지가 게시되면 출력은 메시지 ID입니다.
messageIds: - 'MESSAGE_ID'
Bigtable 구독은 메시지 데이터를 data column family에 씁니다. 데이터를 쿼리하려면 다음 단계를 따르세요.
Google Cloud 콘솔에서 Bigtable 인스턴스 페이지로 이동합니다.
my-cluster-1라는 인스턴스를 클릭합니다.탐색 메뉴에서 Bigtable Studio를 클릭합니다.
쿼리 편집기에서 다음 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 내에서도 구독을 모니터링할 수 있습니다.
다음 단계
- Bigtable 구독에 대해 자세히 알아보세요.
- 구독 유형을 선택합니다.
- Bigtable 구독 문제 해결