mcpField
G
google-pubsub

google-pubsub

github.com/claude-dev-suiteクラウド・DevOps4636 回インストール2 日前に更新
リポジトリ

google-pubsub について

Google Cloud Pub/Sub を扱う開発者向けのリファレンススキルです。メッセージングの概念、配信方式、実装例、本番運用を扱います。

主な機能

  1. 01トピックとサブスクリプションの概念
  2. 02Pull、Push、エクスポート配信
  3. 03Node.js の送信側・受信側の例
  4. 04デッドレターと再試行の指針
  5. 05監視とトラブルシューティング

活用シーン

  1. 01開発用 Pub/Sub エミュレーターの起動
  2. 02ワークロードに応じた Pull/Push の選択
  3. 03サブスクライバーのフロー制御と確認の点検
  4. 04本番環境向け Pub/Sub サービスの準備

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/claude-dev-suite/claude-dev-suite --skill google-pubsub

インストール後、Claude Code で/google-pubsubを入力して読み込まれたか確認します。

同梱ファイルadvanced.md

詳細

Google Cloud Pub/Sub の主要知識

完全なリファレンス:Java/Python/Go のプロデューサーパターン、Spring Cloud GCP のコンシューマー、プッシュサブスクリプションのハンドラー、DLT、IAM、VPC Service Controls、監視アラート向けの Terraform については、advanced.md を参照してください。

詳細な知識:包括的なドキュメントについては、テクノロジーに google-pubsub を指定して mcp__documentation__fetch_docs を使用してください。

クイックスタート(エミュレーター)

# docker-compose.yml
services:
  pubsub:
    image: gcr.io/google.com/cloudsdktool/google-cloud-cli:emulators
    command: gcloud beta emulators pubsub start --host-port=0.0.0.0:8085
    ports:
      - "8085:8085"
docker-compose up -d

# Set emulator env
export PUBSUB_EMULATOR_HOST=localhost:8085

# Create topic and subscription
gcloud pubsub topics create orders
gcloud pubsub subscriptions create order-processor --topic=orders

# Test
gcloud pubsub topics publish orders --message='{"id":"123"}'
gcloud pubsub subscriptions pull order-processor --auto-ack

主要な概念

概念説明
トピックメッセージを公開するための名前付きリソース
サブスクリプションメッセージを受信するための名前付きリソース
パブリッシャートピックにメッセージを送信します
サブスクライバーサブスクリプションからメッセージを受信します
確認期限再配信されるまでに確認応答する期限です
メッセージ保持期間確認応答されていないメッセージを保持する期間です

配信タイプ

タイプ説明ユースケース
プルサブスクライバーがメッセージを要求しますバッチ処理、負荷の変動がある場合
プッシュPub/Sub がエンドポイントに送信しますサーバーレス、Webhook
BigQueryBigQuery に直接エクスポートします分析パイプライン
Cloud StorageGCS に直接エクスポートしますデータのアーカイブ

アーキテクチャ

Publisher ──▶ Topic ──▶ Subscription 1 (Pull) ──▶ Subscriber
                   ──▶ Subscription 2 (Push) ──▶ Cloud Run
                   ──▶ Subscription 3 ──▶ BigQuery

Node.js プロデューサー(@google-cloud/pubsub)

import { PubSub } from '@google-cloud/pubsub';

const pubsub = new PubSub({
  projectId: 'my-project',
});

const topic = pubsub.topic('orders');

// Publish single message
const messageId = await topic.publishMessage({
  data: Buffer.from(JSON.stringify(order)),
  attributes: {
    'correlation-id': correlationId,
    'order-type': order.type,
  },
  orderingKey: order.customerId, // For ordered delivery
});

// Batch publishing (automatic batching)
const publishOptions = {
  batching: {
    maxMessages: 100,
    maxMilliseconds: 10,
  },
};
const batchTopic = pubsub.topic('orders', publishOptions);

Node.js コンシューマー(プルサブスクリプション)

const subscription = pubsub.subscription('order-processor', {
  flowControl: {
    maxMessages: 100,
    maxExtensionMinutes: 10,
  },
  ackDeadline: 30,
});

const messageHandler = async (message) => {
  try {
    const order = JSON.parse(message.data.toString());
    const correlationId = message.attributes['correlation-id'];

    await processOrder(order);
    message.ack();
  } catch (error) {
    console.error('Processing failed:', error);
    message.nack(); // Will be redelivered
  }
};

subscription.on('message', messageHandler);
subscription.on('error', (error) => console.error('Subscription error:', error));

// Graceful shutdown
process.on('SIGTERM', async () => {
  await subscription.close();
});

デッドレタートピック

# Create DLT
gcloud pubsub topics create orders-dlq
gcloud pubsub subscriptions create orders-dlq-sub --topic=orders-dlq

# Create subscription with DLT
gcloud pubsub subscriptions create order-processor \
  --topic=orders \
  --dead-letter-topic=orders-dlq \
  --max-delivery-attempts=5

このスキルを使用しない場合

次の場合は、別のメッセージングソリューションを使用してください。

  • AWS ネイティブのアーキテクチャ:SQS のほうが AWS との統合に優れています
  • Azure ネイティブのアーキテクチャ:Azure Service Bus を使用してください
  • リプレイを伴うイベントストリーミング:Dataflow または Kafka を使用してください
  • オンプレミスへのデプロイ:RabbitMQ または ActiveMQ を使用してください
  • マルチクラウドでの可搬性:Kafka または RabbitMQ を使用してください
  • 複雑なルーティングパターン:RabbitMQ のほうが柔軟性に優れています
  • JMS への準拠が必要:ActiveMQ を使用してください

アンチパターン

アンチパターン問題点解決策
デッドレタートピックがない失敗したメッセージが失われますすべてのサブスクリプションに DLT を設定します
確認期限が短いメッセージが重複処理されます最大処理時間より長い期限を設定します
再試行ポリシーがない失敗時にすぐ再配信されます指数バックオフを設定します
同期的な公開スループットが低下しますバッチ処理と非同期公開を使用します
フロー制御なしのプルコンシューマーが過負荷になりますmax_messages の上限を設定します
必要な場合にメッセージ順序を指定しない順不同で処理されます順序指定キーを使用します
メッセージペイロードが大きいコストが増加し、パフォーマンスが低下します参照先として Cloud Storage を使用します
IAM の最小権限を適用しないセキュリティリスクが生じます最小限のロールを持つサービスアカウントを使用します

トラブルシューティングのクイックガイド

問題考えられる原因対処法
メッセージを受信できないサブスクリプションがない、またはトピックが間違っていますサブスクリプションを作成し、トピックを確認します
メッセージが重複する確認期限が切れています確認期限を延長するか、処理を速くします
メッセージが DLT にある最大配信試行回数を超えています処理ロジックを確認し、DLT を確認します
権限が拒否されるIAM ロールがありませんPublisher/Subscriber ロールを付与します
順序が保証されない順序指定キーがない、またはサブスクリプションが間違っています順序指定キーを設定し、メッセージの順序指定を有効にします
レイテンシが高いバッチ処理の遅延、またはネットワークの問題ですバッチ遅延を短縮し、ネットワークを確認します
プッシュサブスクリプションが失敗するエンドポイントが停止している、または認証に失敗していますエンドポイントの正常性を確認し、認証を検証します
バックログが増加しているコンシューマーの処理速度が遅いコンシューマーを追加するか、処理を最適化します

本番環境への対応

監視メトリクス
メトリクスアラートのしきい値
num_undelivered_messages> 10000
oldest_unacked_message_age> 3600s
num_outstanding_messages> 10000
dead_letter_message_count> 0
publish_latenciesp99 > 1s
チェックリスト
  • 最小権限の IAM ロール
  • コンポーネントごとのサービスアカウント
  • デッドレタートピックの設定
  • 再試行ポリシーの設定
  • 適切な ACK 期限
  • メッセージ保持期間の設定
  • モニタリングアラートの設定
  • スキーマ検証(必要な場合)
  • メッセージ順序の設定(必要な場合)
  • VPC Service Controls(必要な場合)

リファレンスドキュメント

詳細なナレッジ:包括的なドキュメントを参照するには、テクノロジーとして google-pubsub を指定して mcp__documentation__fetch_docs を使用してください。

利用可能なトピック:basics、producers、consumers、production

コメント