Querier

Google Cloud PlatformのCloud Pub/Sub徹底解説 | 特徴、料金、使い方、Python/NodeJS/Goでの実装

2023.07.07に公開 | 2023.07.07に更新

Querier運営

@querier_io@querierinc

「Querier(クエリア)」は社内向け管理画面を圧倒的な速さで、かつビジネスのスケールに合わせて柔軟に構築することができるローコードツールです。

管理画面の構築もWeb上で完結
エンジニアのためのローコードツール

Querierについて詳しく見る

今回は、Google Cloud Platformの一部である、パワフルなメッセージングサービス、Cloud Pub/Subについて説明します。

この記事では、Cloud Pub/Subの特徴、メリット、デメリット、料金、そしてPythonやNodeJSでの使い方について詳しく解説します。

Cloud Pub/Subとは(特徴やメリット、デメリット)

Cloud Pub/Subとは、Google Cloud Platform (GCP) が提供するスケーラブルなリアルタイムメッセージングサービスです。このサービスは、大規模なデータストリームを管理して効率的に処理するために設計されています。

メリット

Cloud Pub/Subの主なメリットは以下の通りです。

  • スケーラビリティ: Cloud Pub/Subは大規模なデータストリームをハンドルするために設計されており、メッセージの生産や消費が増加した場合でも容易にスケーリングできます。
  • 信頼性: Cloud Pub/SubはGoogleの堅牢なインフラストラクチャに支えられており、高いデータ耐久性を提供します。

デメリット

一方、以下のようなデメリットも存在します。

  • 料金: 高負荷の場合、料金が高くなる可能性があります。
  • 複雑性: 設定や管理が少々複雑であると感じるユーザーもいるかもしれません。

Cloud Pub/Subの料金、無料枠はある?

Cloud Pub/Subの料金は基本的に以下の要素によって決定されます。

  1. メッセージの発行と受信: メッセージの発行(Publish)と受信(PullまたはPush)の回数に応じて課金されます。これには、成功したリクエストだけでなく、失敗したリクエストや空の応答も含まれます。
  2. メッセージの保存: メッセージが保存される期間にも料金が発生します。デフォルトでは、メッセージは7日間保存されます。ただし、メッセージが消費されて削除されれば、保存期間は短くなります。
  3. ネットワークの使用: メッセージのデータ転送量に応じて料金が発生します。ただし、同一リージョン内の転送や、Google Cloudの他のサービスとの間での転送は通常無料です。

無料枠については、Cloud Pub/Subは毎月最初の10ギガバイトのデータ転送が無料で、それを超える使用に対して課金されます。また、メッセージの発行と受信については、月に最初の10億件が無料です。

料金の詳細や最新の情報については、Google Cloud Pub/Subの公式ドキュメントをご確認ください。

これにより、実際の使用状況に応じて最適なプランを選択することができます。

Cloud Pub/Subの使い方、初期設定

Cloud Pub/Subを使用するには、まずGoogle Cloud Consoleにログインし、左側のナビゲーションメニューからPub/Subを選択します。

トピックの作成

まず、メッセージを発行するための「トピック」を作成します。トピックの作成は以下の手順で行います。

  1. Pub/Subダッシュボードで、[Create Topic] ボタンをクリックします。
  2. トピック名を入力し、必要な設定を適用します。これらは後で変更することもできます。
  3. [Create] ボタンをクリックしてトピックを作成します。

サブスクリプションの作成

次に、作成したトピックからメッセージを受け取るための「サブスクリプション」を作成します。以下の手順でサブスクリプションを作成できます。

  1. 作成したトピックを選択し、[Create Subscription] ボタンをクリックします。
  2. サブスクリプション名を入力し、配信タイプ(PullまたはPush)を選択します。また、その他の設定(例えば、アクノーレッジメントのデッドラインやメッセージの保持期間)を適用します。
  3. [Create] ボタンをクリックしてサブスクリプションを作成します。

これで初期設定は完了です。作成したトピックにメッセージを発行すると、そのメッセージはサブスクリプションを通じて受け取ることができます。

詳細な手順や設定については、Google Cloud Pub/Subの公式ドキュメントをご確認ください。

Cloud Pub/SubをPythonで使う方法

PythonでCloud Pub/Subを使用するには、google-cloud-pubsubライブラリが必要です。

from google.cloud import pubsub_v1

# PublisherとSubscriberを初期化
publisher = pubsub_v1.PublisherClient()
subscriber = pubsub_v1.SubscriberClient()

# トピックとサブスクリプションを設定
topic_path = publisher.topic_path(project_id, topic_name)
subscription_path = subscriber.subscription_path(project_id, subscription_name)

# メッセージを発行
data = 'Hello, World!'
data = data.encode('utf-8')
publisher.publish(topic_path, data=data)

# メッセージを受け取る
response = subscriber.pull(subscription_path, max_messages=10)
for msg in response.received_messages:
    print('Received message: {}'.format(msg.message.data))

Cloud Pub/SubをNodeJSで使う方法

NodeJSでCloud Pub/Subを使用するには、@google-cloud/pubsubライブラリが必要です。

const {PubSub} = require('@google-cloud/pubsub');

// PubSubクライアントを初期化
const pubSubClient = new PubSub();

// トピックとサブスクリプションを設定
const topicName = 'my-topic';
const subscriptionName = 'my-sub';

// メッセージを発行
const dataBuffer = Buffer.from('Hello, World!');
pubSubClient.topic(topicName).publish(dataBuffer);

// メッセージを受け取る
pubSubClient.subscription(subscriptionName).on('message', message => {
  console.log(`Received message: ${message.data.toString()}`);
  message.ack();
});

Cloud Pub/SubをGoで使う方法

以下にGoでCloud Pub/Subを利用する一例を示します。

import (
	"cloud.google.com/go/pubsub"
	"golang.org/x/net/context"
)

func main() {
	ctx := context.Background()
	client, err := pubsub.NewClient(ctx, "project-id")
	if err != nil {
		// Handle error.
	}

	t := client.Topic("topic-name")
	result := t.Publish(ctx, &pubsub.Message{
		Data: []byte("Hello, World!"),
	})

	// ...
}

さいごに

この記事では、Google Cloud PlatformのCloud Pub/Subについて詳しく説明しました。

Cloud Pub/Subは大規模なリアルタイムメッセージングを行うための強力なツールです。

Python、NodeJS、Goなど、多くのプログラミング言語で簡単に利用することができます。

今後は、Cloud Pub/Subを活用して更に強力なアプリケーションを構築してみてはいかがでしょうか。

「Querier(クエリア)」は社内向け管理画面を圧倒的な速さで、かつビジネスのスケールに合わせて柔軟に構築することができるローコードツールです。

最新の記事

【告知】値の参照時の仕様変更のお知らせ

このたび2024年11月11日に値の参照に関する仕様変更を予定しておりますので詳細について報告いたします。

more

管理画面の構築もWeb上で完結
エンジニアのためのローコードツール

Querierについて詳しく見る