Pub/Sub 사용 중에 문제가 발생할 경우 유용하게 활용할 수 있는 문제 해결 단계를 알아봅니다.
주제를 만들 수 없음
필요한 권한이 있는지 확인합니다.
Pub/Sub 주제를 만들려면 프로젝트에 대해 Pub/Sub 편집자(roles/pubsub.editor
) Identity and Access Management 역할이 필요합니다. 이 역할이 없으면 관리자에게 문의하세요.
주제 관련 정보의 문제 해결에 대한 자세한 내용은 주제 문제 해결 및 가져오기 주제 문제 해결를 참조하세요.
구독 생성 불가
다음을 완료했는지 확인합니다.
필요한 권한이 있는지 확인합니다. Pub/Sub 구독을 만들려면 프로젝트에 대해 Pub/Sub 편집자(roles/pubsub.editor) IAM 역할이 필요합니다. 이 역할이 없으면 관리자에게 문의하세요.
구독 이름을 지정했습니다.
구독을 연결하려는 기존 주제 이름을 지정했습니다.
push 구독을 만드는 경우
pushEndpoint
필드에 수신 URL의 프로토콜로https://
를 소문자(http://
또는HTTPS://
아님)로 지정했습니다.
구독의 문제 해결 정보에 대한 자세한 내용은 pull 구독 문제 해결, push 구독 문제 해결, BigQuery 구독 문제 해결, Cloud Storage 구독 문제 해결을 참조하세요.
오류 403 (Forbidden)
개
이 오류가 발생한다면 다음을 수행하세요.
- Google Cloud 콘솔에서 Pub/Sub API를 사용 설정했는지 확인합니다.
특히 프로젝트 간 통신에 Pub/Sub API를 사용하는 경우, 요청을 수행하는 주 구성원이 관련 Pub/Sub API 리소스에 필요한 권한을 갖고 있는지 확인합니다.
Dataflow를 사용하는 경우
{PROJECT_NUMBER}@cloudservices.gserviceaccount.com
및 Compute Engine 서비스 계정{PROJECT_NUMBER}-compute@developer.gserviceaccount.com
에 모두 관련 Pub/Sub API 리소스에 대한 필수 권한이 있는지 확인합니다. 자세한 내용은 Dataflow 보안 및 권한을 참조하세요.App Engine을 사용한다면 프로젝트의 권한 페이지를 확인해 App Engine 서비스 계정이 Pub/Sub 편집자로 표시되어 있는지 살펴봅니다. 그렇지 않다면 App Engine 서비스 계정을 Pub/Sub 편집자로 추가해야 합니다. 일반적으로 App Engine 서비스 계정은
<project-id>@appspot.gserviceaccount.com
형식입니다.
기타 일반적인 오류 코드
Pub/Sub API와 관련된 다른 일반적인 오류 코드 목록 및 설명은 오류 코드를 참고하세요.
과도한 관리 작업 사용
관리 작업에 할당량을 너무 많이 사용하고 있는 경우 코드를 리팩터링해야 할 수도 있습니다. 다음 유사 코드를 예시로 들어 보겠습니다. 이 예시에서는 리소스를 소모하기 전에 관리 작업(GET
)을 사용하여 구독이 있는지 확인합니다. GET
및 CREATE
모두 관리 작업입니다.
if !GetSubscription my-sub {
CreateSubscription my-sub
}
Consume from subscription my-sub
보다 효율적인 패턴은 구독에서 메시지를 소비하려고 시도하는 것입니다(구독 이름을 합리적으로 확신할 수 있다고 가정). 이 낙관적 접근 방식에서는 오류가 있는 경우에만 구독을 가져오거나 생성합니다. 다음 예를 참조하세요.
try {
Consume from subscription my-sub
} catch NotFoundError {
CreateSubscription my-sub
Consume from subscription my-sub
}