一般的なトラブルシューティング

Pub/Sub の使用中に問題が発生した場合に役立つトラブルシューティング手順について説明します。

トピックを作成できない

必要な権限があることを確認します。Pub/Sub トピックを作成するには、プロジェクトに対する Pub/Sub 編集者roles/pubsub.editor)の Identity and Access Management ロールが必要です。このロールを付与されていない場合は、管理者にお問い合わせください。トピックに関するトラブルシューティングの詳細については、以下のページをご覧ください。

サブスクリプションを作成できない

以下を行ったことを確認します。

  • 必要な権限があることを確認します。Pub/Sub サブスクリプションを作成するには、プロジェクトに対する Pub/Sub 編集者(roles/pubsub.editor)IAM ロールが必要です。このロールを付与されていない場合は、管理者にお問い合わせください。

  • サブスクリプションの名前を指定した。

  • サブスクリプションをアタッチする既存のトピックの名前を指定している。

  • push サブスクリプションを作成する場合、受信 URL のプロトコルとして、pushEndpoint フィールドに https:// を小文字で指定している(http://HTTPS:// は不可)。

定期購入に関するトラブルシューティングの詳細については、以下のページをご覧ください。

権限に関する問題のトラブルシューティング

Pub/Sub 権限は、Pub/Sub リソースに対してアクションを実行できるユーザーとサービス アカウントを制御します。権限が正しく構成されていないと、権限拒否エラーが発生し、メッセージ フローが中断される可能性があります。監査ログには、すべての権限変更の詳細な記録が残るため、これらの問題の原因を特定できます。

監査ログで Pub/Sub の権限に関する問題をトラブルシューティングするには:

  1. ログ エクスプローラを表示するために必要な権限を取得します。

    詳細については、始める前にをご覧ください。

  2. Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。

    [ログ エクスプローラ] に移動

  3. 既存の Google Cloud プロジェクト、フォルダ、または組織を選択します。

  4. 関連するログを見つけるために使用できるフィルタの一覧を次に示します。

    • resource.type="pubsub_topic" OR resource.type="pubsub_subscription": トピックまたはサブスクリプションの構成やアクセス制御の変更に関連する可能性のある問題のトラブルシューティングを行う場合は、このクエリを起点として使用します。他のフィルタと組み合わせて、検索結果をさらに絞り込むこともできます。

    • protoPayload.methodName="google.iam.v1.SetIamPolicy": 権限の誤りや欠落が原因で問題が発生している疑いがある場合は、このクエリを使用します。IAM ポリシーの変更者と変更内容を追跡するのに役立ちます。これは、ユーザーがトピックにパブリッシュできない、サブスクリプションをサブスクライブできない、アプリケーションが Pub/Sub リソースへのアクセスを拒否された、アクセス制御の予期しない変更などの問題のトラブルシューティングに役立ちます。

    • protoPayload.status.code=7: 権限に明示的に関連するエラーが発生した場合は、このクエリを使用します。これにより、失敗しているアクションと、そのアクションを試みているユーザーを特定できます。このクエリを前のクエリと組み合わせて、権限拒否の原因となっている可能性のある特定のリソースと IAM ポリシーの変更を特定できます。

  5. ログを分析して、イベントのタイムスタンプ、変更を行ったプリンシパル、行われた変更の種類などの要素を特定します。

  6. 監査ログから収集した情報に基づいて、是正措置を講じることができます。

Terraform の権限に関する問題のトラブルシューティング

Terraform で Pub/Sub を使用する場合は、Terraform コードで必要なロールを明示的に付与します。たとえば、パブリッシュの場合、アプリケーションのサービス アカウントに roles/pubsub.publisher ロールが必要です。このロールが Terraform コードで明示的に定義されていない場合、将来の terraform apply で削除される可能性があります。これは、関係のないアップデート中に発生することが多く、信頼性の高いアプリケーションが突然 PERMISSION_DENIED エラーで失敗します。コードでロールを明示的に定義すると、このような意図しない回帰を防ぐことができます。