전역 Pub/Sub 엔드포인트에 메시지를 게시하면 Pub/Sub가 가장 가까운 Google Cloud 리전에 메시지를 자동으로 저장합니다. 메시지가 저장 및 처리되는 리전을 제어하려면 주제에 대한 메시지 스토리지 정책을 구성하면 됩니다.
메시지 스토리지 정책 개요
새 주제를 만들거나 콘솔, Google Cloud CLI 또는 REST API를 사용하여 주제를 업데이트할 때 메시지 스토리지 정책을 설정할 수 있습니다.
메시지 스토리지 정책은 메시지 콘텐츠에만 적용됩니다. 주제 이름, 라벨 또는 Identity and Access Management(IAM) 설정과 같은 다른 데이터에는 정책이 적용되지 않습니다.
Pub/Sub는 클라이언트에서 메시지를 Pub/Sub에 게시할 때 메시지를 저장합니다. 메시지 스토리지 정책은 Pub/Sub가 게시 또는 구독 요청이 시작되는 위치와 관계없이 지정한 Google Cloud 리전의 집합에서만 메시지를 저장하고 처리하도록 합니다. 정책에서 게시 작업을 위해 여러 리전을 허용하는 경우 Pub/Sub는 게시된 메시지가 Google Cloud 네트워크에 진입하는 위치와 가장 가까운 허용된 리전에 메시지를 저장합니다.
메시지 스토리지 정책을 지정할 때 enforceInTransit
을 True
로 설정할 수 있습니다. 이 플래그는 다음을 제어합니다.
메시지 스토리지 정책에서 허용되지 않는 리전에서 수신된 게시, 가져오기, streamingPull 요청은
FAILED_PRECONDITION
오류와 함께 거부됩니다.내보내기 구독 전송은 허용된 Cloud 리전 내에서만 처리됩니다. 경우에 따라 이러한 제한에 의해 내보내기 구독 메시지 전송이 완전히 일시중지할 수 있습니다. 메시지 스토리지 위치, 허용된 리전, 리소스 위치 내보내기와 같은 요인의 조합으로 인해 내보내기 위치가 지나치게 제한되므로 내보내기 구독이 이러한 상태로 전환되면 이 상태가 Stackdriver에 표시됩니다.
새 주제의 메시지 스토리지 정책
주제를 만들 때 메시지 스토리지 정책을 지정하지 않으면 메시지 스토리지 정책은 유효한 리소스 위치 제한 조직 정책에 따라 자동으로 결정됩니다. 유효한 조직 정책이 없으면 메시지 스토리지 정책에 모든 지역이 허용됩니다.
마찬가지로 지정된 메시지 스토리지 정책이 없으면 시행 중인 Pub/Sub 메시지에 전송 중인 리전 적용 조직 정책에 따라
enforceInTransit
플래그가 결정됩니다. 이 조직 정책에 대한 자세한 내용은 조직 정책 제약조건을 참조하세요.주제를 만들 때 메시지 스토리지 정책을 지정하면 메시지 스토리지 정책에 유효한 리소스 위치 제한 조직 정책에서 허용하는 지역만 포함할 수 있습니다. 유효한 조직 정책이 없으면 메시지 스토리지 정책에 모든 리전이 포함될 수 있습니다.
기존 주제의 메시지 스토리지 정책
조직 정책이 업데이트될 때 변경사항이 기존 주제에 자동으로 전파되지 않습니다. 따라서 기존 주제의 메시지 스토리지 정책이 최신 조직 정책과 동기화되지 않을 수 있습니다. 자세한 내용은 조직 정책과 주제 정책 간의 차이점 관리를 참조하세요.
주제의 메시지 스토리지 정책이 업데이트될 때 변경사항은 이미 게시된 메시지에 전파되지 않습니다. 이전 정책에 따라 이미 저장된 메시지는 새 정책과 일관되도록 이동되지 않습니다. 변경사항은 업데이트 이후에 게시된 메시지에만 적용됩니다.
예외
정책은 허용된 Google Cloud 리전 이름의 목록을 지정합니다. 따라서 다음 항목은 지원되지 않습니다.
- 제외 목록
- 영역 또는 멀티 리전 위치
순서 키가 포함된 메시지를 게시하고 메시지 스토리지 정책이 가장 가까운 리전을 제외하는 경우 Pub/Sub 서비스가 오류를 반환합니다.
메시지 스토리지 정책 구성
주제의 메시지 스토리지 정책 구성에는 다음과 같은 두 가지 방법이 있습니다.
- 조직 정책을 사용하여 메시지 스토리지 정책 설정
- 주제를 만들 때 메시지 스토리지 정책 구성
조직 정책을 사용하여 메시지 스토리지 정책 설정
콘솔
여러 주제에 적용되는 메시지 스토리지 정책을 구성하려면 리소스 위치 제한 조직 정책을 설정합니다.
Identity and Access Management 콘솔에서 조직 정책 페이지로 이동합니다.
조직 정책을 설정할 리소스 계층 구조 노드(조직, 폴더 또는 프로젝트)를 선택합니다.
필터에 리소스 위치 제한을 입력합니다.
Google Cloud - 리소스 위치 제한을 클릭합니다.
수정을 클릭합니다.
필요에 따라 리전을 추가하거나 삭제합니다.
새로 만드는 모든 주제에 이러한 설정이 상속됩니다. 변경사항이 기존 주제에 자동으로 전파되지 않습니다. 기존 주제를 업데이트하려면 업데이트 작업을 실행해야 합니다.
조직 정책에 대한 자세한 내용은 Google Cloud 리소스 관리를 참조하세요.
주제를 만들 때 메시지 스토리지 정책 구성
콘솔
Google Cloud 콘솔을 사용하는 경우 주제를 만들 때 메시지 스토리지 정책을 구성할 수 없습니다. 대신 모든 새 주제가 리소스 위치 제한 조직 정책을 자동으로 상속합니다.
하지만 주제를 만든 후에 업데이트 작업을 통해 콘솔에서 메시지 스토리지 정책을 변경할 수 있습니다.
gcloud CLI
특정 메시지 스토리지 정책으로 주제를 만들려면 gcloud pubsub topics create
명령어를 --message-storage-policy-allowed-regions
플래그와 함께 실행합니다.
gcloud pubsub topics create TOPIC_ID \ --message-storage-policy-allowed-regions=REGION1,REGION2
다음을 바꿉니다.
TOPIC_ID
: 새 주제의 ID 또는 이름입니다.REGION1, REGION2
: 지원되는 Google Cloud 리전의 쉼표로 구분된 목록입니다.
REST
메시지 스토리지 정책으로 주제를 만들려면 projects.topics.create
메서드를 사용합니다.
Authorization
헤더의 액세스 토큰으로 요청을 인증해야 합니다. 현재 애플리케이션 기본 사용자 인증 정보에 대한 액세스 토큰을 얻는 방법은 다음과 같습니다. gcloud auth application-default print-access-token
.
POST https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID
Authorization: Bearer $(gcloud auth application-default print-access-token)
Content-Type: application/json --data @response-body.json
요청 본문에 다음 필드를 지정합니다.
{
"name": "projects/PROJECT_ID/topics/TOPIC_ID",
"messageStoragePolicy": {
"allowedPersistenceRegions": ["REGION"],
"enforceInTransit": true
}
}
각 항목의 의미는 다음과 같습니다.
PROJECT_ID는 프로젝트 ID입니다.
TOPIC_ID는 주제 ID입니다.
REGION은 지정된 리전입니다.
샘플 응답:
{
"name": "projects/PROJECT_ID/topics/TOPIC_ID",
"messageStoragePolicy": {
"allowedPersistenceRegions": [
"REGION"
],
"enforceInTransit": true
}
}
메시지 스토리지 정책 구성 방법에 대한 자세한 내용은 다음 API 참조를 확인하세요.
메시지 스토리지 정책 업데이트
콘솔
Google Cloud 콘솔에서 주제 세부정보 페이지를 엽니다.
업데이트할 주제를 선택합니다.
여러 주제를 선택할 수 있습니다.
정보 패널에서 스토리지 정책 탭을 선택합니다.
이 패널은 기본적으로 접혀져 있을 수 있습니다. 패널이 접혀 있으면 정보 패널 표시를 클릭합니다.
필요한 만큼 리전을 선택하거나 선택 해제합니다.
업데이트를 클릭합니다.
gcloud CLI
조직의 리소스 위치 제한 정책에 정의된 메시지 스토리지 정책을 주제에 푸시하려면 다음 gcloud pubsub topics update
명령어를 실행합니다.
gcloud pubsub topics update TOPIC_ID \ --recompute-message-storage-policy
특정 리전으로 주제의 메시지 스토리지 정책을 업데이트하려면 gcloud pubsub topics update
명령어를 --message-storage-policy-allowed-regions
플래그와 함께 실행합니다.
gcloud pubsub topics update TOPIC_ID \ --message-storage-policy-allowed-regions=REGION1,REGION2
다음을 바꿉니다.
TOPIC_ID
: 업데이트할 주제의 ID입니다.REGION1, REGION2
: 지원되는 Google Cloud 리전의 쉼표로 구분된 목록입니다.
REST
메시지 스토리지 정책으로 주제를 업데이트하려면 projects.topics.patch
메서드를 사용합니다.
Authorization
헤더의 액세스 토큰으로 요청을 인증해야 합니다. 현재 애플리케이션 기본 사용자 인증 정보에 대한 액세스 토큰을 얻는 방법은 다음과 같습니다. gcloud auth application-default print-access-token
.
PATCH https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID
Authorization: Bearer $(gcloud auth application-default print-access-token)
Content-Type: application/json --data @response-body.json
요청 본문에 다음 필드를 지정합니다.
{
"name": "projects/PROJECT_ID/topics/TOPIC_ID",
"messageStoragePolicy": {
"allowedPersistenceRegions": ["REGION"], // Replace with your required region
"enforceInTransit": true
}
}
각 항목의 의미는 다음과 같습니다.
PROJECT_ID는 프로젝트 ID입니다.
TOPIC_ID는 주제 ID입니다.
REGION은 지정된 리전입니다.
샘플 응답:
{
"name": "projects/PROJECT_ID/topics/TOPIC_ID",
"messageStoragePolicy": {
"allowedPersistenceRegions": [
"REGION"
],
"enforceInTransit": true
}
}
메시지 스토리지 정책 업데이트 방법에 대한 자세한 내용은 다음 API 참조를 확인하세요.
조직 및 주제 정책 간의 차이점 관리
조직 및 주제 정책 간의 차이점 보기
콘솔
Google Cloud 콘솔에는 조직 정책과 개별 주제의 메시지 스토리지 정책 간의 차이점이 표시됩니다.
조직 정책과 동기화되지 않은 주제를 확인하려면 다음 안내를 따르세요.
주제 세부정보 페이지로 이동합니다.
주제를 선택합니다.
정보 패널에서 스토리지 정책 탭을 선택합니다.
이 패널은 기본적으로 접혀져 있을 수 있습니다. 패널이 접혀 있으면 정보 패널 표시를 클릭합니다.
스토리지 정책이 패널에 표시되고 조직 및 주제 정책 간의 차이점도 표시됩니다.
gcloud CLI
주제에 할당된 현재 정책을 검토하려면 다음 명령어를 실행합니다.
gcloud pubsub topics describe TOPIC_ID
다음을 바꿉니다.
TOPIC_ID
: 검토할 주제의 ID입니다.
조직 및 주제 정책 간의 차이점 해결
콘솔
Google Cloud 콘솔에서 주제 세부정보 페이지를 엽니다.
주제를 선택합니다.
정보 패널에서 스토리지 정책 탭을 선택합니다.
이 패널은 기본적으로 접혀져 있을 수 있습니다. 패널이 접혀 있으면 정보 패널 표시를 클릭합니다.
스토리지 정책이 불일치 항목과 함께 패널에 표시됩니다.
불일치가 있으면 정보 패널에 주제의 스토리지 정책을 조직 정책과 동기화하는 다음과 같은 3가지 옵션이 표시됩니다.
주제에서 허용되지 않는 위치에 스토리지를 허용합니다.
정책에서 허용하는 위치에만 스토리지를 허용하도록 업데이트합니다.
주제가 일부 허용 위치에서 스토리지를 허용하지 않음
정책에서 허용하는 모든 위치에 스토리지를 허용하도록 업데이트합니다.
주제의 허용되지 않는 위치와 허용되는 위치가 모두 오래되었습니다.
정책에서 허용하는 위치에 스토리지를 허용하도록 업데이트합니다.
적절한 옵션을 선택하여 문제를 해결합니다.
주제 업데이트를 클릭합니다.
조직 스토리지 정책과 동기화 대화상자가 열립니다.
주제 업데이트를 클릭합니다.
모니터링 및 문제 해결
메시지 데이터가 저장되는 위치를 파악하기 위해 Pub/Sub는 각 Google Cloud 리전에 따라 분류되는 측정항목을 제공합니다.
다음에 이러한 측정항목을 사용할 수 있습니다.
- 전 세계에 데이터가 배포되는 방식을 이해합니다.
- 게시자 및 구독자 배포 위치를 해당 데이터를 기준으로 최적화합니다.
메시지 스토리지 측정항목
확인되지 않은 저장된 메시지 수:
subscription/num_unacked_messages_by_region
저장된 데이터의 양:
subscription/unacked_bytes_by_region
가장 오래된 메시지 날짜:
subscription/oldest_unacked_message_age_by_region
주제와 스냅샷에 유사한 측정항목을 사용할 수 있습니다. 또한 재생을 위해 선택적으로 보관되는 확인된 메시지에 해당 측정항목을 사용할 수 있습니다. 예를 들면 다음과 같습니다.
subscription/num_retained_acked_messages_by_region
성능 및 가용성에 미치는 영향
메시지 스토리지 정책은 전체 SLA에 영향을 미치지 않지만 게시자 또는 구독자가 Google Cloud 외부 또는 정책이 허용되지 않는 리전에서 실행하는 경우 가용성 제어 기능이 저하됩니다. 메시지 스토리지 정책이 허용하는 리전 집합 내에서 게시자 클라이언트를 실행하는 사용자는 서비스 지연이나 가용성의 변화를 확인할 수 없습니다.
이러한 장단점을 이해하려면 게시 요청이 라우팅되는 방법을 고려할 필요가 있습니다. 일반적으로 Pub/Sub는 메시지를 요청 출처와 최대한 가깝게 저장하려고 합니다. Google Cloud 내에서 발생한 요청은 일반적으로 같은 리전의 Pub/Sub 인스턴스에 바인딩됩니다. 게시자가 단일 리전에 있는 경우 메시지 스토리지 정책에 리전을 더 추가해도 가용성이 높아지지 않습니다. Google Cloud 외부에서 게시하는 경우 Pub/Sub 서비스가 제공되는 근처 Google Cloud 리전으로 요청을 전달하기 위해 추가적인 라우팅 레이어가 관여합니다.
us-central1
리전만 허용하는 메시지 스토리지 정책을 가정해 보겠습니다.
us-east1
에서 실행 중인 게시자 클라이언트가Publish
요청을 실행합니다.- 이 요청이
us-east1
에 있는 Pub/Sub 서버로 라우팅됩니다. us-east1
에 데이터를 저장하는 대신 이 요청은 메시지 스토리지 정책이 허용되는 가장 가까운 리전인us-central1
에 라우팅됩니다.- Pub/Sub는 게시된 메시지를
us-central1
에 저장하고 해당 위치의 구독자에게 메시지를 전달합니다.
이 메커니즘은 요청 지연 시간과 전체 시스템 가용성에 영향을 미칩니다. 요청이 더 많은 네트워크 링크를 통과하기 때문에 완료하는 데 시간이 오래 걸리고 상대적으로 실패할 가능성이 높아집니다. 즉, 메시지가 전달되기 전에 허용되는 가장 가까운 리전을 거쳐야 하기 때문에 구독자가 메시지를 보는 데 다소 시간이 걸릴 수 있습니다. 정책이 단일 리전을 허용하지만 게시자 애플리케이션이 여러 리전에서 실행되는 경우 배포된 애플리케이션은 허용된 단일 리전에서만 사용할 수 있게 됩니다.
다음 단계
- 전역 또는 위치별 엔드포인트를 사용하는 방법에 대한 자세한 내용은 Pub/Sub API 개요를 참조하세요.