このドキュメントでは、Pub/Sub トピックのスキーマを作成する方法について説明します。
準備
スキーマを作成する前に、次の作業を行います。
- トピックとパブリッシュのワークフローについて学びます。
- Pub/Sub スキーマの仕組みを理解する。
- トピックを作成します。
必要なロールと権限
スキーマの作成と管理に必要な権限を取得するには、プロジェクトに対する Pub/Sub 編集者(roles/pubsub.editor
)IAM ロールの付与を管理者に依頼してください。ロールの付与の詳細については、アクセス権の管理をご覧ください。
この事前定義ロールには、スキーマの作成と管理に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
スキーマの作成と管理には、次の権限が必要です。
-
スキーマを作成します:
pubsub.schemas.create
-
スキーマをトピックに添付します:
pubsub.schemas.attach
-
スキーマのリビジョンを commit します:
pubsub.schemas.commit
-
スキーマまたはスキーマ リビジョンを削除します:
pubsub.schemas.delete
-
スキーマまたはスキーマのリビジョンを取得します:
pubsub.schemas.get
-
スキーマを一覧表示します:
pubsub.schemas.list
-
スキーマのリビジョンを一覧表示します:
pubsub.schemas.listRevisions
-
スキーマをロールバックします:
pubsub.schemas.rollback
-
メッセージを検証します:
pubsub.schemas.validate
-
スキーマの IAM ポリシーを取得します:
pubsub.schemas.getIamPolicy
-
スキーマの IAM ポリシーを構成します:
pubsub.schemas.setIamPolicy
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
ユーザー、グループ、ドメイン、サービス アカウントなどのプリンシパルにロールと権限を付与できます。あるプロジェクトにスキーマを作成し、別のプロジェクトにあるトピックにアタッチできます。プロジェクトごとに必要な権限があることを確認します。
スキーマの作成
スキーマは、Google Cloud コンソール、gcloud CLI、Pub/Sub API、または Cloud クライアント ライブラリを使用して作成できます。スキーマを作成するためのガイドラインを以下に示します。
Pub/Sub でスキーマを機能させるには、最上位の型を 1 つだけ定義する必要があります。他の型を参照するインポート ステートメントはサポートされていません。
同じスキーマを複数のトピックに関連付けることができます。
メッセージがスキーマに対して検証されているかどうかを手動でテストできます。
Console
スキーマを作成するには、次の操作を行います。
Google Cloud コンソールで、[Pub/Sub スキーマ] ページに移動します。
[スキーマを作成] をクリックします。
[スキーマ ID] フィールドにスキーマの ID を入力します。
スキーマの名前を指定するガイドラインについては、トピック、サブスクリプション、またはスナップショットの名前の指定するガイドラインをご覧ください。
[スキーマタイプ] で [Avro] または [プロトコル バッファ] を選択します。
詳しくは、スキーマタイプをご覧ください。
[スキーマ定義] フィールドに、スキーマの Avro またはプロトコル バッファ定義を入力します。
たとえば、Avro のサンプル スキーマは次のとおりです。
{ "type": "record", "name": "Avro", "fields": [ { "name": "ProductName", "type": "string", "default": "" }, { "name": "SKU", "type": "int", "default": 0 }, { "name": "InStock", "type": "boolean", "default": false } ] }
省略可: [Validate definition] をクリックして、スキーマ定義が正しいかどうかを確認します。
検証チェックでは、スキーマと公開するメッセージの互換性はチェックされません。次のステップでメッセージをテストします。
(省略可)正しいスキーマを持つメッセージが公開されるかどうかをテストできます。
[テスト メッセージ] をクリックします。
[テスト メッセージ] ウィンドウで、[メッセージ エンコード] のタイプを選択します。
[メッセージ本文] にテスト メッセージを入力します。
[テスト] をクリックします。
たとえば、テストスキーマ用のサンプル メッセージを次に示します。この例では、[メッセージ エンコード] を
JSON
として選択します。{"ProductName":"GreenOnions", "SKU":34543, "InStock":true}
テスト メッセージ ページを終了します。
[作成] をクリックしてスキーマを保存します。
gcloud
gcloud pubsub schemas create SCHEMA_ID \ --type=SCHEMA_TYPE \ --definition=SCHEMA_DEFINITION
ここで
- SCHEMA_TYPE は
avro
かprotocol-buffer
のどちらかです。 - SCHEMA_DEFINITION は、選択したスキーマタイプに従って形式指定されたスキーマの定義を含む
string
です。
ファイルでスキーマ定義を指定することもできます。
gcloud pubsub schemas create SCHEMA_ID \ --type=SCHEMA_TYPE \ --definition-file=SCHEMA_DEFINITION_FILE
ここで
- SCHEMA_TYPE は
avro
かprotocol-buffer
のどちらかです。 - SCHEMA_DEFINITION_FILE は、選択したスキーマタイプに従って書式設定されたスキーマの定義が含まれるファイルへのパスを含む
string
です。
REST
スキーマを作成するには、次のように POST リクエストを送信します。
POST https://pubsub.googleapis.com/v1/projects/PROJECT_ID/schemas/SCHEMA_ID Authorization: Bearer $(gcloud auth application-default print-access-token) Content-Type: application/json --data @response-body.json
リクエスト本文に次のフィールドを指定します。
{ "definition": SCHEMA_DEFINITION "type": SCHEMA_TYPE }
ここで
- SCHEMA_TYPE は
avro
かprotocol-buffer
のどちらかです。 - SCHEMA_DEFINITION は、選択したスキーマタイプに従って形式指定されたスキーマの定義を含む文字列です。
レスポンスの本文には、スキーマ リソースの JSON 表現を含める必要があります。例:
{ "name": SCHEMA_NAME, "type": SCHEMA_TYPE, "definition": SCHEMA_DEFINITION "revisionId": REVISION_ID "revisionCreateTime": REVISION_CREATE_TIME }
ここで
- REVISION_ID は、サーバーで生成されたリビジョンの ID です。
- REVISION_CREATE_TIME は、リビジョンが作成された ISO 8601 タイムスタンプです。
C++
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の C++ の設定手順を実施してください。詳細については、Pub/Sub C++ API のリファレンス ドキュメントをご覧ください。
Avro
.proto
C#
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の C# の設定手順を実施してください。詳細については、Pub/Sub C# API のリファレンス ドキュメントをご覧ください。
Avro
.proto
Go
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Go の設定手順を実施してください。詳細については、Pub/Sub Go API のリファレンス ドキュメントをご覧ください。
Avro
.proto
Java
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Java の設定手順を実施してください。詳細については、Pub/Sub Java API のリファレンス ドキュメントをご覧ください。
Avro
.proto
Node.js
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Node.js の設定手順を実施してください。詳細については、Pub/Sub Node.js API のリファレンス ドキュメントをご覧ください。
Avro
.proto
Node.js
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Node.js の設定手順を実施してください。詳細については、Pub/Sub Node.js API のリファレンス ドキュメントをご覧ください。
Avro
.proto
PHP
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の PHP の設定手順を実施してください。詳細については、Pub/Sub PHP API のリファレンス ドキュメントをご覧ください。
Avro
.proto
Python
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Python の設定手順を実施してください。詳細については、Pub/Sub Python API のリファレンス ドキュメントをご覧ください。
Avro
.proto
Ruby
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Ruby の設定手順を実施してください。詳細については、Pub/Sub Ruby API のリファレンス ドキュメントをご覧ください。
Avro
.proto
スキーマが作成されると、スキーマページでスキーマの詳細を表示することが可能になります。
スキーマをトピックに関連付けることができます。