Pub/Sub の使用中に問題が発生した場合に役立つトラブルシューティング手順について説明します。
トピックを作成できない
必要な権限があることを確認します。Pub/Sub トピックを作成するには、プロジェクトに対する Pub/Sub 編集者(roles/pubsub.editor
)の IAM ロールが必要です。このロールを付与されていない場合は、管理者にお問い合わせください。トピックのトラブルシューティングの詳細については、トピックのトラブルシューティングとインポート トピックのトラブルシューティングをご覧ください。
サブスクリプションを作成できない
以下を行ったことを確認します。
必要な権限があることを確認します。Pub/Sub サブスクリプションを作成するには、プロジェクトに対する Pub/Sub 編集者(roles/pubsub.editor)IAM ロールが必要です。このロールを付与されていない場合は、管理者にお問い合わせください。
サブスクリプションの名前を指定している。
サブスクリプションを関連付ける既存のトピックの名前を指定している。
push サブスクリプションを作成する場合は、受信 URL のプロトコルとして、
pushEndpoint
フィールドに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 サービス アカウントが編集者としてリストされているかどうか確認します。リストされていない場合、App Engine サービス アカウントを編集者として追加します。通常、App Engine サービス アカウントは
<project-id>@appspot.gserviceaccount.com
という形式になります。
過剰な管理オペレーションの使用
管理オペレーションで割り当てを過剰に消費している場合、コードのリファクタリングが必要な可能性があります。ここでは、以下の疑似コードに基づいて説明します。この例では、リソースの消費を試行する前に、管理オペレーション(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
}