Apicurio Registry ユーザーガイド


Red Hat build of Apicurio Registry 3.1

Apicurio Registry 3.1 でのスキーマと API の管理

Red Hat build of Apicurio Registry Documentation Team

概要

このガイドでは、Apicurio Registry を紹介し、Apicurio Registry Web コンソール、REST API、Maven プラグイン、または Java クライアントを使用してイベントスキーマと API 設計を管理する方法を説明します。このガイドでは、Java コンシューマーおよびプロデューサーアプリケーションで Kafka クライアントシリアライザーとデシリアライザーを使用する方法も説明します。また、サポートされている Apicurio Registry のコンテンツタイプと、オプションのルール設定も説明します。

はじめに

Red Hat ドキュメントへのフィードバック

Red Hat ドキュメントに関するご意見やご感想をお寄せください。

改善を提案するには、Jira 課題を作成し、変更案を説明してください。ご要望に迅速に対応できるよう、できるだけ詳細にご記入ください。

前提条件

  • Red Hat カスタマーポータルのアカウントがある。このアカウントを使用すると、Red Hat Jira Software インスタンスにログインできます。
    アカウントをお持ちでない場合は、アカウントを作成するように求められます。

手順

  1. Create issue にアクセスします。
  2. Summary テキストボックスに、問題の簡単な説明を入力します。
  3. Description テキストボックスに、次の情報を入力します。

    • 問題が見つかったページの URL。
    • 問題の詳細情報。
      他のフィールドの情報はデフォルト値のままにすることができます。
  4. Create をクリックして、Jira 課題をドキュメントチームに送信します。

フィードバックをご提供いただきありがとうございました。

第1章 Apicurio Registry の概要

この章では、Apicurio Registry の概念と機能を紹介し、レジストリーに格納されているサポート対象のアーティファクトタイプを詳しく説明します。

1.1. Apicurio Registry 2.3 の使用

Apicurio Registry は、イベント駆動型および API のアーキテクチャー全体で標準的なイベントスキーマおよび API 設計を共有するためのデータストアです。Apicurio Registry を使用して、クライアントアプリケーションからデータの構造を切り離し、REST インターフェイスを使用して実行時にデータ型と API の記述を共有および管理できます。

クライアントアプリケーションは、再デプロイする必要なく、実行時に Apicurio Registry との間で最新のスキーマ更新を動的にプッシュまたはプルできます。開発者チームは、Apicurio Registry に対して、すでに運用環境にデプロイされているサービスに必要な既存のスキーマをクエリーしたり、開発中の新しいサービスに必要な新しいスキーマを登録したりできます。

クライアントアプリケーションコードで Apicurio Registry の URL を指定することにより、クライアントアプリケーションが Apicurio Registry に保存されているスキーマと API 設計を使用できるようにすることができます。Apicurio Registry は、メッセージのシリアル化と逆シリアル化に使用されるスキーマを保存できます。これらのスキーマはクライアントアプリケーションから参照され、クライアントアプリケーションが送受信するメッセージがそれらのスキーマと互換性があることを確認します。

Apicurio Registry を使用して、アプリケーションからデータ構造を切り離し、メッセージ全体のサイズを減らすことでコストを削減して、組織内のスキーマおよび API 設計の一貫性を高めて効率化します。Apicurio Registry は、開発者および管理者がレジストリーコンテンツの管理を簡単に行えるように Web コンソールを提供します。

オプションのルールを設定して、Apicurio Registry コンテンツの進化を管理できます。これらには、アップロードされたコンテンツが有効であること、または他のバージョンと互換性があることを確認するためのルールが含まれます。新しいバージョンを Apicurio Registry にアップロードする前に、設定されたすべてのルールに合格する必要があります。これにより、無効または互換性のないスキーマまたは API 設計に時間が費やされることはありません。

Red Hat build of Apicurio Registry は、Apicurio Registry オープンソースコミュニティープロジェクトをベースにしています。詳細は https://github.com/apicurio/apicurio-registry を参照してください。

Apicurio Registry 機能
  • Apache Avro、JSON スキーマ、Google Protobuf、AsyncAPI、OpenAPI などの標準イベントスキーマおよび API 仕様の複数のペイロード形式。
  • Apache Kafka または PostgreSQL データベースにコンテンツを保存するためのプラグ可能な Apicurio Registry ストレージオプション。
  • Apicurio Registry のコンテンツが時間の経過とともにどのように進化するかを管理するための、コンテンツの検証、互換性、整合性に関するルール。
  • Web コンソール、REST API、コマンドライン、Maven プラグイン、または言語 SDK を使用した Apicurio Registry コンテンツ管理。
  • 外部システム用の Kafka Connect との統合を含む、完全な Apache Kafka スキーマレジストリーサポート。
  • 実行時にメッセージタイプを検証する Kafka クライアントシリアライザー/デシリアライザー (SerDes)。
  • 既存の Confluent スキーマレジストリークライアントアプリケーションとの互換性。
  • メモリーフットプリントが低く、デプロイメントの時間が高速化されるクラウドネイティブ Quarkus Java ランタイム
  • OpenShift/Kubernetes 上の Apicurio Registry の Operator ベースのインストール。
  • Red Hat build of Keycloak を使用した OpenID Connect (OIDC) 認証。

1.2. Apicurio Registry のスキーマと API アーティファクト

イベントスキーマや API 設計などの Apicurio Registry に保存される項目は、レジストリー アーティファクト と呼ばれます。以下は、単純な株価アプリケーションの JSON 形式の Apache Avro スキーマアーティファクトの例を示しています。

Avro スキーマの例

{
   "type": "record",
   "name": "price",
   "namespace": "com.example",
   "fields": [
       {
           "name": "symbol",
           "type": "string"
       },
       {
           "name": "price",
           "type": "string"
       }
   ]
}
Copy to Clipboard Toggle word wrap

スキーマまたは API 設計が Apicurio Registry にアーティファクトとして追加されると、クライアントアプリケーションはそのスキーマまたは API 設計を使用して、実行時にクライアントメッセージが正しいデータ構造に準拠していることを検証できます。

アーティファクトには、生成されたメタデータと編集可能なメタデータの両方がありますアーティファクトの標準メタデータには、以下が含まれます (ただし、これらに限定されません)。

1.2.1. 生成されたプロパティーまたはイミュータブルなプロパティー

  • groupId
  • artifactId
  • artifactType
  • createdOn
  • modifiedBy
  • modifiedOn

1.2.2. 編集可能なプロパティー

  • name
  • description
  • labels
  • owner
アーティファクトのバージョン

すべてのアーティファクトには、0 個以上の _artifact version_s があります。実際のコンテンツ (およびメタデータ) が含まれるのは、アーティファクトバージョンのみです。これらのバージョンはアーティファクトのコンテンツの進化を表し、イミュータブルです。アーティファクトは、バージョンの順序付けられたシーケンスと考えることができます。通常、最新バージョンがスキーマまたは API 設計コンテンツの「最新状態」を表します。

アーティファクトバージョンには、生成されたメタデータと編集可能なメタデータの両方が含まれます。アーティファクトの標準メタデータには、以下が含まれます (ただし、これらに限定されません)。

1.2.3. 生成されたプロパティーまたはイミュータブルなプロパティー

  • groupId
  • artifactId
  • version
  • globalId
  • contentId
  • owner
  • createdOn
  • modifiedBy
  • modifiedOn

1.2.4. 編集可能なプロパティー

  • name
  • description
  • labels
  • state
スキーマと API のグループ

アーティファクトグループ は、スキーマまたは API アーティファクトのオプションの名前付きコレクションです。各グループには、論理的に関連したスキーマまたは API 設計のセットが含まれており、通常、特定のアプリケーションまたは組織に属する単一のエンティティーにより管理されます。

スキーマと API 設計を追加して Apicurio Registry で整理するときに、オプションのアーティファクトグループを作成できます。たとえば、development および production アプリケーション環境、あるいは sales および engineering 組織に一致するグループを作成できます。

スキーマおよび API グループには複数のアーティファクトタイプを含めることができます。たとえば、Protobuf、Avro、JSON スキーマ、OpenAPI、または AsyncAPI アーティファクトをすべて同じグループに含めることができます。

グループには、生成されたメタデータと編集可能なメタデータの両方があります。グループの標準メタデータには、以下が含まれます (ただし、これらに限定されません)。

1.2.5. 生成されたプロパティーまたはイミュータブルなプロパティー

  • groupId
  • owner
  • createdOn
  • modifiedBy
  • modifiedOn

1.2.6. 編集可能なプロパティー

  • description
  • labels

Apicurio Registry Web コンソール、REST API、コマンドライン、Maven プラグイン、または Java クライアントアプリケーションを使用して、スキーマおよび API アーティファクトとグループを作成できます。

注記

Apicurio Registry Web コンソールを使用する場合、グループの指定はオプションであり、default グループが自動的に使用されます。REST API または Maven プラグインを使用し、一意のグループを作成したくない場合は API パスで default グループを指定します。

他のスキーマと API への参照

一部の Apicurio Registry アーティファクトタイプには、あるアーティファクトファイルから別のアーティファクトファイルへの アーティファクト参照 を含めることができます。再利用可能なスキーマまたは API コンポーネントを定義し、それらを複数の場所から参照して効率を高めることができます。たとえば、$ref ステートメントを使用して JSON スキーマまたは OpenAPI で参照を指定したり、import ステートメントを使用して Google Protobuf で参照を指定したり、ネストされた名前空間を使用して Apache Avro で参照を指定したりできます。

次の例は、ネストされた名前空間を使用して Exchange という名前の別のスキーマへの参照を含む、TradeKey という名前の単純な Avro スキーマを示しています。

ネストされた Exchange スキーマを持つ TradeKey スキーマ

{
 "namespace": "com.kubetrade.schema.trade",
 "type": "record",
 "name": "TradeKey",
 "fields": [
   {
     "name": "exchange",
     "type": "com.kubetrade.schema.common.Exchange"
   },
   {
     "name": "key",
     "type": "string"
   }
 ]
}
Copy to Clipboard Toggle word wrap

交換スキーマ

{
 "namespace": "com.kubetrade.schema.common",
 "type": "enum",
 "name": "Exchange",
 "symbols" : ["GEMINI"]
}
Copy to Clipboard Toggle word wrap

アーティファクト参照は、アーティファクトタイプ固有の参照から内部 Apicurio Registry 参照にマップされるアーティファクトメタデータのコレクションとして Apicurio Registry に格納されます。Apicurio Registry の各成果物参照は、次のもので構成されています。

  • グループ ID
  • アーティファクト ID
  • アーティファクトのバージョン
  • アーティファクト参照名

Apicurio Registry コア REST API、Maven プラグイン、および Java シリアライザー/デシリアライザー (SerDes) を使用して、アーティファクト参照を管理できます。Apicurio Registry は、アーティファクトリーファレンスをアーティファクトコンテンツと共に保存します。Apicurio Registry は、すべてのアーティファクトリーファレンスのコレクションも保持しているため、コレクションを検索したり、特定のアーティファクトのすべてのリファレンスを一覧表示したりできます。

サポートされているアーティファクトタイプ

Apicurio Registry は現在、次のアーティファクトタイプのアーティファクトリーファレンスのみをサポートしています。

  • Avro
  • Protobuf
  • JSON Schema
  • OpenAPI
  • AsyncAPI

1.3. Apicurio Registry Web コンソールを使用したコンテンツの管理

Apicurio Registry Web コンソールを使用して、レジストリーに保存されているスキーマと API アーティファクトおよびオプションのグループを閲覧および検索し、新しいスキーマと API アーティファクト、グループ、およびバージョンを追加できます。ラベル、名前、グループ、および説明でアーティファクトを検索できます。アーティファクトのコンテンツや利用可能なバージョンを表示するか、アーティファクトファイルをローカルでダウンロードできます。

レジストリーのコンテンツに対して、オプションのルールを設定することもできます。これは、グローバル、グループ単位、または各スキーマや API アーティファクトごとに設定できます。コンテンツの検証および互換性に関するこれらの任意のルールは、新しいスキーマと API アーティファクトまたはバージョンをレジストリーにアップロードする際に適用されます。

詳細は、12章Apicurio Registry コンテンツルールの参照 を参照してください。

図1.1 Apicurio Registry Web コンソール

Apicurio Registry Web コンソールは、http://MY_REGISTRY_UI_URL/ から利用できます。

1.4. クライアント用の Apicurio Registry REST API

クライアントアプリケーションは、Core Registry API v3 を使用して、Apicurio Registry のスキーマと API アーティファクトを管理できます。この API は、次の機能の操作を提供します。

管理者
Apicurio Registry データを .zip ファイルにエクスポートまたはインポートし、実行時に Apicurio Registry インスタンスのログレベルを管理します。
グループ
Apicurio Registry 内のアーティファクトのグループを管理します。グループを作成して、アーティファクトをより適切に整理することができます。
グループルール
特定のグループ内のスキーマまたは API アーティファクトのコンテンツの進化を管理するルールを設定して、無効または互換性のないコンテンツが Apicurio レジストリーに追加されるのを防ぎます。グループルールは、設定されているグローバルルールよりも優先されます。
アーティファクト
Apicurio Registry に保存されているスキーマと API アーティファクトを管理します。
アーティファクトのメタデータ
スキーマまたは API アーティファクトに関する詳細を管理します。アーティファクト名、説明、ラベルなどの詳細を編集できます。アーティファクトグループ、アーティファクトが作成または変更された時期などの詳細は読み取り専用です。
アーティファクトルール
特定のスキーマまたは API アーティファクトのコンテンツの進化を管理するルールを設定して、無効または互換性のないコンテンツが Apicurio Registry に追加されないようにします。アーティファクトルールは、設定されているグループルールやグローバルルールをオーバーライドします。
アーティファクトのバージョン
スキーマまたは API アーティファクトのコンテンツを構成するバージョンのシーケンスを管理します。アーティファクトバージョンのライフサイクル状態: enabled、disabled、または deprecated を管理することもできます。
グローバルルール
無効または互換性のないコンテンツが Apicurio Registry に追加されないようにするために、すべてのスキーマおよび API アーティファクトのコンテンツの進化を管理するルールを設定します。グローバルルールは、アーティファクトとそのグループにルールが設定されていない場合にのみ適用されます。
検索
スキーマと API アーティファクトおよびバージョンを、名前、グループ、説明、ラベルなどで参照または検索します。
システム
Apicurio Registry のバージョンと、Apicurio Registry サーバーのリソース制限を取得します。
ユーザー
現在の Apicurio Registry ユーザーを取得します。
他のスキーマレジストリー REST API との互換性

Apicurio Registry は、それぞれの REST API の実装を含めることで、次のスキーマレジストリーとの互換性も提供します。

  • Apicurio Registry Core Registry API v2
  • Confluent Schema Registry API v7

Confluent クライアントライブラリーを使用するアプリケーションは、ドロップインの代替として Apicurio Registry を使用できます。詳細は、Confluent Schema Registry の置換 を参照してください。

1.5. Apicurio Registry ストレージのオプション

Apicurio Registry は、レジストリーデータの基礎となるストレージに対して以下のオプションを提供します。

Expand
表1.1 Apicurio Registry データストレージオプション
ストレージオプション説明

PostgreSQL データベース

PostgreSQL は、実稼働環境でのパフォーマンス、安定性、およびデータ管理 (バックアップ/復元など) に推奨されるデータストレージオプションです。

Apache Kafka

Kafka ストレージは、データベース管理の専門知識が利用できない実稼働環境、または Kafka のストレージが特定の要件である実稼働環境向けに提供されています。

Kafka プロデューサーアプリケーションは、シリアライザーを使用して、特定のイベントスキーマに準拠するメッセージをエンコードできます。Kafka コンシューマーアプリケーションはデシリアライザーを使用して、特定のスキーマ ID に基づいてメッセージが適切なスキーマを使用してシリアライズされたことを検証できます。

図1.2 Apicurio Registry と Kafka クライアントの SerDes アーキテクチャー

Apicurio Registry は、実行時に以下のメッセージタイプを検証するために Kafka クライアントシリアライザー/デシリアライザー (SerDes) を提供します。

  • Apache Avro
  • Google Protobuf
  • JSON Schema

Apicurio Registry の Maven リポジトリーとソースコードの配布には、これらのメッセージタイプの Kafka SerDes 実装が含まれており、Kafka クライアントアプリケーションの開発者は、これを使用して、Apicurio Registry と統合できます。

これらの実装には、サポートされている各メッセージタイプのカスタム Java クラスが含まれています。たとえば、io.apicurio.registry.serde.avro などです。クライアントアプリケーションは、検証のために実行時に Apicurio Registry からスキーマをプルするために使用できます。

1.7. Kafka Connect コンバーターを使用した外部システムへのデータのストリーミング

Apache Kafka Connect と Apicurio Registry を使用して、Kafka と外部システム間でデータをストリーミングできます。Kafka Connect を使用すると、異なるシステムのコネクターを定義して、大量のデータを Kafka ベースのシステムに出し入れできます。

図1.3 Apicurio Registry と Kafka Connect のアーキテクチャー

Apicurio Registry は、Kafka Connect に次の機能を提供します。

  • Kafka Connect スキーマのストレージ
  • Apache Avro および JSON スキーマの Kafka Connect コンバーター
  • スキーマを管理するコアレジストリー API

Avro および JSON スキーマコンバーターを使用して、Kafka Connect スキーマを Avro または JSON スキーマにマッピングすることができます。これらのスキーマは、メッセージのキーと値をコンパクトな Avro バイナリー形式または人間が判読できる JSON 形式にシリアライズすることができます。メッセージにはスキーマ情報が含まれず、スキーマ ID のみが含まれるため、変換された JSON は冗長性が低くなります。

Apicurio Registry は、Kafka トピックで使用される Avro および JSON スキーマを管理および追跡できます。スキーマは Apicurio Registry に保存され、メッセージコンテンツから切り離されるため、各メッセージには小さなスキーマ識別子だけを含める必要があります。Kafka など I/O 律速のシステムの場合、これはプロデューサーおよびコンシューマーのトータルスループットが向上することを意味します。

Apicurio Registry が提供する Avro および JSON スキーマのシリアライザーとデシリアライザー (SerDes) は、このユースケースの Kafka プロデューサーとコンシューマーによって使用されます。変更イベントを消費するために作成する Kafka コンシューマーアプリケーションは、Avro または JSON SerDes を使用して、これらのイベントを逆シリアル化できます。Apicurio Registry SerDes は、Kafka ベースのシステムにインストールし、Kafka Connect や Debezium などの Kafka Connect ベースのシステムと共に使用できます。

1.8. Apicurio Registry のデモンストレーション例

Apicurio Registry は、さまざまなユースケースシナリオで Apicurio Registry を使用する方法を示すオープンソースのサンプルアプリケーションを提供します。たとえば、これらには、Kafka シリアライザーおよびデシリアライザー (SerDes) Java クラスで使用されるスキーマの保存が含まれます。これらのクラスは、Apicurio Registry からスキーマをフェッチして、Kafka メッセージペイロードをシリアル化、逆シリアル化、または検証する操作を生成または使用するときに使用します。

これらのアプリケーションは、次の例のような使用例を示しています。

  • Apache Avro Kafka SerDes
  • Apache Avro Maven プラグイン
  • Apache Camel Quarkus と Kafka
  • CloudEvents
  • Confluent Kafka SerDes
  • Custom ID strategy
  • Debezium を使用したイベント駆動型のアーキテクチャー
  • Google Protobuf Kafka SerDes
  • JSON Schema Kafka SerDes
  • REST クライアント

1.9. Apicurio Registry で利用可能なディストリビューション

Apicurio Registry は、配布の一部として次のコンポーネントを提供します。

Expand
表1.2 Apicurio Registry Operator とイメージ
Distribution場所リリースカテゴリー

Apicurio Registry Operator

OperatorsOperatorHub の OpenShift Web コンソール

一般公開

Apicurio Registry Operator のコンテナーイメージ

Red Hat Ecosystem Catalog

一般公開

Apicurio レジストリーのコンテナーイメージ (バックエンド)

Red Hat Ecosystem Catalog

一般公開

Apicurio レジストリーのコンテナーイメージ (ユーザーインターフェイス)

Red Hat Ecosystem Catalog

一般公開

Expand
表1.3 Apicurio Registry の zip ダウンロード
Distribution場所リリースカテゴリー

インストール用のサンプルカスタムリソース定義

Red Hat ソフトウェアのダウンロード

一般公開

Maven リポジトリー

Red Hat ソフトウェアのダウンロード

一般公開

Source code

Red Hat ソフトウェアのダウンロード

一般公開

Kafka Connect converters

Red Hat ソフトウェアのダウンロード

一般提供

注記

利用可能な Apicurio Registry ディストリビューションにアクセスするには、Red Hat Integration のサブスクリプションが必要で、Red Hat カスタマーポータルにログインする必要があります。

第2章 Apicurio Registry のコンテンツルール

この章では、Apicurio Registry のコンテンツを管理するために使用されるオプションのルールを紹介し、利用可能なルール設定の詳細を提供します。

2.1. ルールを使用して、Apicurio Registry コンテンツを管理する

Apicurio Registry に追加されたアーティファクトコンテンツのデプロイメントを管理するために、オプションのルールを設定できます。新しいアーティファクトバージョンを Apicurio Registry に追加する前に、設定されたすべてのグローバルルール、グループ固有ルール、またはアーティファクト固有ルールはパスする必要があります。設定されたアーティファクト固有ルールは、設定されたグループ固有ルールをオーバーライドし、さらにグループ固有ルールは設定されたグローバルルールをオーバーライドします。

これらのルールの目的は、無効なコンテンツが Apicurio Registry に追加されるのを防ぎ、アーティファクトの進化を制御することです (たとえば、新しいアーティファクトバージョンと以前のバージョンとの互換性をチェックするなど)。たとえば、次の理由でコンテンツが無効になる可能性があります。

  • 特定のアーティファクトタイプ (AVROPROTOBUF など) の構文が無効
  • 有効な構文で、セマンティクスが仕様に違反している
  • 新しいコンテンツに現在のアーティファクトバージョンに関連する変更の違反が含まれる場合の非互換性
  • アーティファクト参照の整合性 (重複または存在しないアーティファクト参照マッピングなど)

オプションのコンテンツルールは、Apicurio Registry Web コンソール、REST API コマンド、またはいずれかの SDK を使用して有効にできます。

2.1.1. ルールの適用時

ルールは、コンテンツが Apicurio Registry に追加された場合のみ、適用されます。これには、以下の REST 操作が含まれます。

  • アーティファクトの追加
  • アーティファクトバージョンの追加

ルールに違反した場合、Apicurio Registry は HTTP エラーを返します。応答本文には、違反したルールと、何が問題だったのかを示すメッセージが含まれます。

2.1.2. ルールの優先順位

アーティファクト固有ルールとグローバルルールの優先順位は次のとおりです。

  • アーティファクト固有ルールは最も優先度が高い
  • グループ固有ルールは次に優先度が高い
  • グローバルルールは最も優先度が低い
注記

ルールが上位レベル (たとえば、グローバルレベル) で設定されているが、そのルールを下位レベルで無効にしたい場合は、下位レベルで同じルールを設定し (オーバーライドされるように)、そのルールの値を NONE に設定する必要があります。

2.1.3. ルールの仕組み

各ルールには、名前と設定情報があります。Apicurio Registry は、各アーティファクト、各グループのルールのリストと、グローバルルールのリストを管理します。リスト内の各ルールは、ルール実装の名前と設定で構成されます。

ルールが実行されると、アーティファクトの現在のバージョン (存在する場合) の内容と、追加されるアーティファクトの新しいバージョンが提供されます。ルールの実装は、アーティファクトがそのルールに合格するかどうかに応じて、合格または失敗のいずれかを返します。そうでない場合、Apicurio Registry は HTTP エラー応答で理由を報告します。一部のルールは、コンテンツの以前のバージョンを使用しない場合があります。たとえば、互換性ルールは以前のバージョンを使用しますが、構文またはセマンティック妥当性ルールは使用しません。

2.1.4. コンテンツルールの設定

管理者は、Apicurio Registry のグローバルルール、グループ固有ルール、およびアーティファクト固有ルールを設定できます。開発者は、グループ固有およびアーティファクト固有ルールのみを設定できます。

Apicurio Registry は、特定のアーティファクト用に設定されたルールを適用します。そのレベルでルールが設定されていない場合、Apicurio Registry はグループ固有ルールを適用します。グループレベルでルールが設定されていない場合、Apicurio Registry はグローバルに設定されたルールを適用します。グローバルルールが設定されていない場合は、ルールは適用されません。

グループとアーティファクト固有ルールを設定する

Apicurio Registry Web コンソールまたは REST API を使用して、グループ固有およびアーティファクト固有ルールを設定できます。詳細は以下を参照してください。

グローバルルールの設定

管理者は、いくつかの方法でグローバルルールを設定できます。

  • REST API で admin/rules 操作を使用する方法
  • Apicurio Registry Web コンソールを使用する
  • Apicurio Registry アプリケーションプロパティーを使用してデフォルトのグローバルルールを設定する

デフォルトのグローバルルールの設定

開発者は、アプリケーションレベルで Apicurio Registry を設定して、グローバルなルールを有効または無効にすることができます。以下のアプリケーションプロパティー形式を使用して、インストール後の設定を行わずに、インストール時にデフォルトのグローバルルールを設定できます。

apicurio.rules.global.<ruleName>
Copy to Clipboard Toggle word wrap

現在、以下のルール名がサポートされています。

  • compatibility
  • validity
  • integrity

application プロパティーの値は、設定されたルールに固有の有効な設定オプションである必要があります。

注記

これらのアプリケーションプロパティーは、Java システムプロパティーとして設定することも、Quarkus application.properties ファイルに含めることもできます。詳細は、Quarkus のドキュメント を参照してください。

第3章 Apicurio Registry のセキュリティーオプションの設定

この章では、Apicurio Registry セキュリティーの設定オプションを指定する方法を説明します。たとえば、これには、Red Hat build of Keycloak または Microsoft Azure Active Directory での認証や、Apicurio Registry でのロールベースの認可が含まれます。

注記

利用可能なすべての設定オプションのリストは、13章Apicurio Registry 設定リファレンス を参照してください。

3.1. Red Hat build of Keycloak を使用した Apicurio Registry の認証と認可の設定

このセクションでは、Apicurio Registry および Red Hat build of Keycloak の認証および認可オプションを手作業で設定する方法を説明します。

注記

また、これらの設定を自動的に設定する方法の詳細は、「Red Hat build of Keycloak を使用した Apicurio Registry の認証と認可の設定」 を参照してください。

Apicurio Registry Web コンソールとコア REST API は、OAuth と OpenID Connect (OIDC) をベースとする Red Hat build of Keycloak での認証をサポートします。同じ Red Hat build of Keycloak レルムとユーザーは OpenID Connect を使用して Apicurio Registry Web コンソールとコア REST API で連携されるため、必要なクレデンシャルは 1 セットのみです。

Apicurio Registry は、デフォルトの admin、write、および read-only ユーザーロールのロールベースの認可を提供します。Apicurio Registry は、レジストリーアーティファクトの作成者のみが更新または削除できる、コンテンツベースの認可をスキーマまたは API レベルで提供します。Apicurio Registry の認証および認可設定は、デフォルトでは無効になっています。

前提条件

手順

  1. Red Hat build of Keycloak 管理コンソールで、Apicurio Registry 用の Red Hat build of Keycloak レルムを作成します。デフォルトでは、Apicurio Registry は registry のレルム名を想定しています。レルムの作成に関する詳細は、Red Hat build of Keycloak のユーザードキュメント を参照してください。
  2. Apicurio Registry API 用の Red Hat build of Keycloak クライアントを作成します。デフォルトでは、Apicurio Registry は次の設定を想定しています。

    • Client ID: registry-api
    • Client Protocol: openid-connect
    • Access Type: bearer-only

      他のクライアント設定にはデフォルト値を使用できます。

      注記

      Red Hat build of Keycloak サービスアカウントを使用している場合、クライアントの アクセスタイプbearer-only ではなく、confidential にする必要があります。

  3. Apicurio Registry Web コンソール用の Red Hat build of Keycloak クライアントを作成します。デフォルトでは、Apicurio Registry は次の設定を想定しています。

    • Client ID: apicurio-registry
    • Client Protocol: openid-connect
    • Access Type: public
    • Valid Redirect URLs: http://my-registry-url:8080/*
    • Web Origins: +

      他のクライアント設定にはデフォルト値を使用できます。

  4. OpenShift 上の Apicurio Registry デプロイメントで、次の Apicurio Registry 環境変数を指定し、Red Hat build of Keycloak を使用して認証を設定します。

    Expand
    表3.1 Red Hat build of Keycloak を使用した Apicurio レジストリー認証の設定
    環境変数説明デフォルト

    QUARKUS_OIDC_TENANT_ENABLED

    Apicurio Registry の認証を有効にします。true に設定すると、Red Hat build of Keycloak を使用した認証に次の環境変数が必要になります。

    String

    false

    QUARKUS_OIDC_AUTH_SERVER_URL

    Red Hat build of Keycloak 認証サーバーの URL。たとえば、http://localhost:8080 です。

    String

    -

    QUARKUS_OIDC_CLIENT_ID

    Apicurio Registry REST API のクライアント ID。

    String

    registry-api

    APICURIO_UI_AUTH_OIDC_CLIENT-ID

    Apicurio Registry Web コンソールのクライアント ID。

    String

    apicurio-registry

    ヒント

    OpenShift に環境変数を設定する例は、「OpenShift での Apicurio Registry ヘルスチェックの設定」 を参照してください。

  5. 以下のオプションを true に設定して、Red Hat build of Keycloak で Apicurio Registry ユーザーロールを有効にします。

    Expand
    表3.2 Apicurio Registry ロールベース認証の設定
    環境変数Java システムプロパティーデフォルト値

    APICURIO_AUTH_ROLE-BASED-AUTHORIZATION

    apicurio.auth.role-based-authorization

    Boolean

    false

  6. Apicurio Registry ユーザーロールが有効になっている場合、Apicurio Registry ユーザーを、Red Hat build of Keycloak レルム内の以下のデフォルトユーザーロールの少なくとも 1 つに割り当てる必要があります。

    Expand
    表3.3 レジストリーの認証および認可のデフォルトユーザーロール
    ロールアーティファクトの読み取りアーティファクトの書き込みグローバルルール概要

    sr-admin

    はい

    はい

    はい

    すべての作成、読み取り、更新、および削除操作へのフルアクセス。

    sr-developer

    はい

    はい

    いいえ

    グローバルルールの設定を除く、作成、読み取り、更新、および削除操作へのアクセス。このロールは、アーティファクト固有のルールを設定できます。

    sr-readonly

    はい

    いいえ

    いいえ

    読み取りおよび検索操作のみへのアクセス。このロールはルールを設定できません。

  7. 以下を true に設定して、Apicurio Registry のスキーマおよび API アーティファクトの更新に対して所有者のみの認可を有効にします。

    Expand
    表3.4 所有者のみの認可の設定
    環境変数Java システムプロパティーデフォルト値

    APICURIO_AUTH_OWNER-ONLY-AUTHORIZATION_LIMIT-GROUP-ACCESS

    apicurio.auth.owner-only-authorization.limit-group-access

    Boolean

    false

3.2. Microsoft Azure Active Directory を使用した Apicurio Registry の認証と認可の設定

このセクションでは、Apicurio Registry および Microsoft Azure Active Directory (Azure AD) の認証および認可オプションを手動で設定する方法を説明します。

Apicurio Registry Web コンソールとコア REST API は、OpenID Connect (OIDC) と OAuth 認可コードフローに基づく Azure AD での認証をサポートします。Apicurio Registry は、デフォルトの admin、write、および read-only ユーザーロールのロールベースの認可を提供します。Apicurio Registry の認証および認可設定は、デフォルトでは無効になっています。

Azure AD を使用して Apicurio Registry を保護するには、特定の設定を持つ Azure AD 内の有効なディレクトリーが必要です。これには、推奨設定を使用して Apicurio Registry アプリケーションを Azure AD ポータルに登録し、Apicurio Registry で環境変数を設定することが含まれます。

前提条件

手順

  1. メールアドレスまたは GitHub アカウントを使用して Azure AD ポータルにログインします。
  2. ナビゲーションメニューで、Manage > App registrations > New registration を選択し、次の設定を完了します。

    • Name: アプリケーション名を入力します。例: apicurio-registry-example
    • Supported account types: Accounts in any organizational directory をクリックします。
    • Redirect URI: リストから Single-page application を選択し、Apicurio Registry Web コンソールアプリケーションホストを入力します。例: https://test-registry.com/ui/

      重要

      Apicurio Registry アプリケーションホストを Redirect URI として登録する必要があります。ログインすると、ユーザーは認証のために Apicurio Registry から Azure AD にリダイレクトされます。その後、ユーザーをアプリケーションに戻す必要があります。Azure AD では、登録されていないリダイレクト URL は許可されません。

  3. Register をクリックします。アプリケーション登録の詳細は、Manage > App registrations > apicurio-registry-example を選択すると表示されます。
  4. Manage > Authentication を選択し、アプリケーションがリダイレクト URL とトークンを使用して次のように設定されていることを確認します。

    • Redirect URIs: たとえば、https://test-registry.com/ui/ です。
    • Implicit grant and hybrid flows: ID tokens (used for implicit and hybrid flows) をクリックします。
  5. Azure AD > Admin > App registrations > Your app > Application (client) ID を選択します。例: 123456a7-b8c9-012d-e3f4-5fg67h8i901
  6. Azure AD > Admin > App registrations > Your app > Directory (tenant) ID を選択します。例: https://login.microsoftonline.com/1a2bc34d-567e-89f1-g0hi-1j2kl3m4no56/v2.0
  7. Apicurio Registry で、Azure AD 設定を使用して次の環境変数を設定します。

    Expand
    表3.5 Apicurio Registry での Azure AD の設定
    環境変数説明設定

    QUARKUS_OIDC_CLIENT-ID

    Apicurio Registry REST API のクライアントアプリケーション ID

    手順 5 で取得した Azure AD アプリケーション (クライアント) ID。例: 123456a7-b8c9-012d-e3f4-5fg67h8i901

    APICURIO_UI_AUTH_OIDC_CLIENT-ID

    Apicurio Registry Web コンソールのクライアントアプリケーション ID。

    手順 5 で取得した Azure AD アプリケーション (クライアント) ID。例: 123456a7-b8c9-012d-e3f4-5fg67h8i901

    QUARKUS_OIDC_AUTH-SERVER-URL

    Azure AD での認証用 URL。

    手順 6 で取得した Azure AD アプリケーション (テナント) ID。例: https://login.microsoftonline.com/1a2bc34d-567e-89f1-g0hi-1j2kl3m4no56/v2.0

  8. Apicurio Registry で、Apicurio Registry 固有の設定用に次の環境変数を設定します。

    Expand
    表3.6 Apicurio レジストリー固有の設定
    環境変数説明設定

    QUARKUS_OIDC_TENANT-ENABLED

    Apicurio Registry の認証を有効にします。

    true

    QUARKUS_HTTP_CORS_ORIGINS

    cross-origin resource sharing (CORS) 用の Apicurio Registry デプロイメントのホスト。

    例: https://test-registry.com

    APICURIO_UI_AUTH_OIDC_REDIRECT-URI

    Apicurio Registry Web コンソールのホスト。

    例: https://test-registry.com/ui

    APICURIO_AUTH_ROLE-BASED-AUTHORIZATION

    Apicurio レジストリーでロールベースの認証を有効にします。

    true

    QUARKUS_OIDC_ROLES_ROLE-CLAIM-PATH

    Azure AD がロールを保存するクレームの名前。

    roles

    注記

    Apicurio Registry でロールを有効にする場合は、アプリケーションロールとして同じロールを Azure AD でも作成する必要があります。Apicurio Registry で想定されるデフォルトのロールは、sr-adminsr-developersr-readonly です。

  9. Apicurio Registry UI で、次の環境変数を設定します。
Expand
環境変数説明設定

REGISTRY_AUTH_TYPE

 

oidc

REGISTRY_AUTH_TOKEN_TYPE

使用するトークン。Azure AD には、標準以外のアクセストークンが含まれているため、ID トークンを使用する必要があります。

id

3.3. Apicurio Registry の認証および認可の設定オプション

Apicurio Registry は、Red Hat build of Keycloak または HTTP Basic 認証を使用した OpenID Connect の認証オプションを提供します。

Apicurio Registry には、ロールベースおよびコンテンツベースのアプローチの認可オプションが用意されています。

  • デフォルトの管理者、書き込み、および読み取り専用のユーザーロールに対するロールベースの認可。
  • アーティファクトまたはアーティファクトグループの所有者のみがアーティファクトを更新または削除できるスキーマまたは API アーティファクトのコンテンツベースの認可。
重要

Apicurio Registry のすべての認証および認可オプションはデフォルトで無効になっています。これらのオプションを有効にする前に、まず QUARKUS_OIDC_TENANT_ENABLED オプションを true に設定する必要があります。

この章では、次の設定オプションの詳細を説明します。

Red Hat build of Keycloak で OpenID Connect を使用した Apicurio Registry 認証

以下の環境変数を設定して、Red Hat build of Keycloak を使用して Apicurio Registry Web コンソールおよび API の認証を設定できます。

Expand
表3.7 Red Hat build of Keycloak を使用した Apicurio レジストリー認証の設定
環境変数説明デフォルト

QUARKUS_OIDC_TENANT-ENABLED

Apicurio Registry の認証を有効にします。true に設定すると、Red Hat build of Keycloak を使用した認証に次の環境変数が必要になります。

String

false

QUARKUS_OIDC_AUTH-SERVER-URL

Red Hat build of Keycloak 認証サーバーの URL。たとえば、http://localhost:8080 です。

String

-

QUARKUS_OIDC_CLIENT-ID

Apicurio Registry REST API のクライアント ID。

String

registry-api

APICURIO_UI_AUTH_OIDC_CLIENT-ID

Apicurio Registry Web コンソールのクライアント ID。

String

apicurio-registry

QUARKUS_OIDC_TLS_TRUST_STORE_FILE

Quarkus が OpenID Connect (OIDC) 通信の保護に使用する TLS トラストストアへのファイルパスを指定します。トラストストアは、OIDC プロバイダーとのセキュアな TLS 接続の確立に必要な信頼できる証明書を使用して設定できます。

String

-

QUARKUS_OIDC_TLS_TRUST_STORE_PASSWORD

TLS トラストストアファイルへのアクセスに必要なパスワード。

String

-

APICURIO_AUTH_ROLE-BASED-AUTHORIZATION

ロールベースの認可を有効または無効にします。

Boolean

False

HTTP Basic を使用した Apicurio Registry 認証

デフォルトでは、Apicurio Registry は OpenID Connect を使用した認証をサポートしています。ユーザーまたは API クライアントは、Apicurio Registry REST API への認証済み呼び出しを行うためにアクセストークンを取得する必要があります。ただし、一部のツールは OpenID Connect をサポートしていないため、次の設定オプションを true に設定することで、HTTP Basic 認証をサポートするように Apicurio Registry を設定することもできます。

Expand
表3.8 Apicurio Registry HTTP 基本認証の設定
環境変数Java システムプロパティーデフォルト値

QUARKUS_OIDC_TENANT-ENABLED

quarkus.oidc.tenant-enabled

Boolean

false

APICURIO_AUTHN_BASIC-CLIENT-CREDENTIALS.ENABLED

apicurio.authn.basic-client-credentials.enabled

Boolean

false

Apicurio Registry HTTP Basic クライアント認証情報キャッシュの有効期限

HTTP Basic クライアント認証情報キャッシュの有効期限を設定することもできます。デフォルトでは、HTTP Basic 認証を使用する場合、Apicurio Registry は JWT トークンをキャッシュし、不要なときに新しいトークンを発行しません。JWT トークンのキャッシュ有効期限を設定できます。このトークンは、デフォルトで 10 分に設定されます。

Red Hat build of Keycloak を使用する場合は、この設定を Red Hat build of Keycloak JWT 有効期限から 1 分を引いた値に設定するのが最適です。たとえば、Red Hat build of Keycloak で有効期限を 5 分に設定している場合は、次の設定オプションを 4 分に設定する必要があります。

Expand
表3.9 HTTP Basic クライアント認証情報キャッシュの有効期限の設定
環境変数Java システムプロパティーデフォルト値

APICURIO_AUTHN_BASIC-CLIENT-CREDENTIALS_CACHE-EXPIRATION

apicurio.authn.basic-client-credentials.cache-expiration

Integer

10

Apicurio Registry のロールベースの認可

次のオプションを true に設定して、Apicurio Registry でロールベースの認可を有効にすることができます。

Expand
表3.10 Apicurio Registry ロールベース認証の設定
環境変数Java システムプロパティーデフォルト値

QUARKUS_OIDC_TENANT-ENABLED

quarkus.oidc.tenant-enabled

Boolean

false

APICURIO_AUTH_ROLE-BASED-AUTHORIZATION

apicurio.auth.role-based-authorization

Boolean

false

次に、ユーザーの認証トークンに含まれるロール (Red Hat build of Keycloak を使用した認証時に付与されるロールなど) を使用するか、Apicurio Registry によって内部的に管理されるロールマッピングを使用するように、ロールベースの認可を設定できます。

Red Hat build of Keycloak で割り当てられたロールを使用する

Red Hat build of Keycloak によって割り当てられたロールの使用を有効にするには、次の環境変数を設定します。

Expand
表3.11 Red Hat build of Keycloak を使用した Apicurio Registry のロールベース認可の設定
環境変数説明デフォルト

APICURIO_AUTH_ROLE-SOURCE

token に設定すると、ユーザーのロールは認証トークンから取得されます。

String

token

APICURIO_AUTH_ROLES_ADMIN

ユーザーが管理者であることを示すロールの名前。

String

sr-admin

APICURIO_AUTH_ROLES_DEVELOPER

ユーザーが開発者であることを示すロールの名前。

String

sr-developer

APICURIO_AUTH_ROLES_READONLY

ユーザーが読み取り専用アクセス権を持っていることを示すロールの名前。

String

sr-readonly

Apicurio Registry が Red Hat build of Keycloak のロールを使用するように設定されている場合、Apicurio Registry ユーザーを Red Hat build of Keycloak の次のユーザーロールの少なくとも 1 つに割り当てる必要があります。ただし、表3.11「Red Hat build of Keycloak を使用した Apicurio Registry のロールベース認可の設定」 の環境変数を使用して別のユーザーロール名を設定できます。

Expand
表3.12 認証および認可のための Apicurio Registry ロール
ロール名アーティファクトの読み取りアーティファクトの書き込みグローバルルール説明

sr-admin

はい

はい

はい

すべての作成、読み取り、更新、および削除操作へのフルアクセス。

sr-developer

はい

はい

いいえ

グローバルルールの設定およびインポート/エクスポートを除く、操作の作成、読み取り、更新、および削除へのアクセス。このロールは、アーティファクト固有のルールのみを設定できます。

sr-readonly

はい

いいえ

いいえ

読み取りおよび検索操作のみへのアクセス。このロールはルールを設定できません。

Apicurio Registry でロールを直接管理する

Apicurio Registry によって内部的に管理されるロールの使用を有効にするには、次の環境変数を設定します。

Expand
表3.13 内部ロールマッピングを使用した Apicurio Registry ロールベースの認可の設定
環境変数説明デフォルト

APICURIO_AUTH_ROLE-SOURCE

application に設定すると、ユーザーロールは Apicurio Registry によって内部的に管理されます。

String

token

内部で管理されたロールマッピングを使用する場合は、Apicurio Registry REST API の /admin/roleMappings エンドポイントを使用して、ユーザーにロールを割り当てることができます。詳細は、Apicurio Registry REST API のドキュメント を参照してください。

ユーザーに付与できるロールは、ADMINDEVELOPER、または READ_ONLY のいずれかだけです。管理者権限を持つユーザーのみが、他のユーザーにアクセス権を付与できます。

Apicurio Registry の管理者オーバーライド設定

Apicurio Registry にはデフォルトの管理者ユーザーがいないため、通常、ユーザーが管理者として識別されるように別の方法を設定すると便利です。次の環境変数を使用して、この管理オーバーライド機能を設定できます。

Expand
表3.14 Apicurio Registry admin-override の設定
環境変数説明デフォルト

APICURIO_AUTH_ADMIN-OVERRIDE_ENABLED

管理オーバーライド機能を有効にします。

String

false

APICURIO_AUTH_ADMIN-OVERRIDE_FROM

管理オーバーライド情報を探す場所。現在 token のみがサポートされています。

String

token

APICURIO_AUTH_ADMIN-OVERRIDE_TYPE

ユーザーが管理者かどうかを判断するために使用される情報の種類。値は FROM 変数の値によって異なります。たとえば、FROM が token の場合は role または claim です。

String

role

APICURIO_AUTH_ADMIN-OVERRIDE_ROLE

ユーザーが管理者であることを示すロールの名前。

String

sr-admin

APICURIO_AUTH_ADMIN-OVERRIDE_CLAIM

管理オーバーライドを決定するために使用する JWT トークンクレームの名前。

String

org-admin

APICURIO_AUTH_ADMIN-OVERRIDE_CLAIM-VALUE

CLAIM 変数によって示される JWT トークンクレームの値は、ユーザーが管理オーバーライドを付与されるためのものでなければなりません。

String

true

たとえば、この admin- オーバーライド機能を使用して、Red Hat build of Keycloak で sr-admin ロールを単一のユーザーに割り当て、そのユーザーに admin ロールを付与できます。そのユーザーは、/admin/roleMappings REST API (または関連する UI) を使用して、追加のユーザー (追加の管理者を含む) にロールを付与できます。

Apicurio Registry 所有者のみの許可

以下のオプションを true に設定して、Apicurio Registry 内のアーティファクトまたはアーティファクトグループの更新に対して所有者のみの許可を有効にすることができます。

Expand
表3.15 所有者のみの認可の設定
環境変数Java システムプロパティーデフォルト値

QUARKUS_OIDC_TENANT_ENABLED

quarkus.oidc.tenant-enabled

Boolean

false

APICURIO_AUTH_OWNER-ONLY-AUTHORIZATION

apicurio.auth.owner-only-authorization

Boolean

false

APICURIO_AUTH_OWNER-ONLY-AUTHORIZATION_LIMIT-GROUP-ACCESS

apicurio.auth.owner-only-authorization.limit-group-access

Boolean

false

所有者のみの許可が有効になっている場合は、アーティファクトを作成したユーザーのみがそのアーティファクトを変更または削除できます。

所有者のみの許可とグループの所有者のみの許可の両方が有効になっている場合は、アーティファクトグループを作成したユーザーのみが、そのアーティファクトグループへの書き込みアクセス権 (そのグループのアーティファクトを追加または削除するなど) を持ちます。

Apicurio Registry の認証済み読み取りアクセス

認証済み読み取りアクセスオプションが有効になっている場合、Apicurio Registry は、ユーザーロールに関係なく、同じ組織内の認証済みユーザーからのリクエストに対して、少なくとも読み取り専用アクセスを許可します。

認証された読み取りアクセスを有効にするには、まずロールベースの認可を有効にしてから、次のオプションが true に設定されていることを確認する必要があります。

Expand
表3.16 認証済み読み取りアクセスの設定
環境変数Java システムプロパティーデフォルト値

QUARKUS_OIDC_TENANT-ENABLED

quarkus.oidc.tenant-enabled

Boolean

false

APICURIO_AUTH_AUTHENTICATED-READ-ACCESS_ENABLED

apicurio.auth.authenticated-read-access.enabled

Boolean

false

詳細は、「Apicurio Registry のロールベースの認可」 を参照してください。

Apicurio Registry の匿名の読み取り専用アクセス

2 つの主要な認証タイプ (ロールベースの認証と所有者ベースの認証) に加えて、Apicurio Registry は匿名の読み取り専用アクセスオプションをサポートしています。

認証認証情報のない REST API 呼び出しなどの匿名ユーザーが REST API への読み取り専用呼び出しを行うことを許可するには、次のオプションを true に設定します。

Expand
表3.17 匿名の読み取り専用アクセスの設定
環境変数Java システムプロパティーデフォルト値

QUARKUS_OIDC_TENANT-ENABLED

quarkus.oidc.tenant-enabled

Boolean

false

APICURIO_AUTH_ANONYMOUS-READ-ACCESS_ENABLED

apicurio.auth.anonymous-read-access.enabled

Boolean

false

第4章 Apicurio Registry デプロイメントを設定する

この章では、Apicurio Registry デプロイメントに重要な設定オプションを指定する方法を説明します。これには、Apicurio Registry Web コンソール、ログ、ヘルスチェックなどの機能が含まれます。

注記

利用可能なすべての設定オプションのリストは、13章Apicurio Registry 設定リファレンス を参照してください。

4.1. Apicurio Registry Web コンソールを設定する

オプションの環境変数を設定して、デプロイメント環境専用に Apicurio Registry Web コンソールを設定したり、その動作をカスタマイズしたりできます。

前提条件

  • Apicurio Registry はすでにインストールされています。
Web コンソールのデプロイメント環境の設定

ブラウザーで Apicurio Registry Web コンソールにアクセスすると、いくつかの初期設定が読み込まれます。次の設定は必須です。

  • コア Apicurio Registry サーバー REST API v3 の URL

通常、Apicurio Registry Operator は、REST API v3 URL を使用して UI コンポーネントを自動的に設定します。ただし、UI コンポーネントのデプロイメント設定で適切な環境変数を設定することで、この値を上書きできます。

手順

以下の環境変数を設定し、デフォルトの URL を上書きします。

  • REGISTRY_API_URL: コア Apicurio Registry サーバー REST API v3 の URL を指定します。例: https://registry-api.my-domain.com/apis/registry/v3
読み取り専用モードでの Web コンソールの設定

オプション機能として、Apicurio Registry の Web コンソールを読み取り専用モードに設定することができます。このモードでは、Apicurio Registry Web コンソールでユーザーが登録されたアーティファクトを変更できる機能がすべて無効になります。たとえば、これには以下が含まれます。

  • グループの作成
  • アーティファクトの作成
  • 新しいアーティファクトバージョンのアップロード
  • アーティファクトメタデータの更新
  • アーティファクトの削除

手順

次の環境変数を設定します。

  • REGISTRY_FEATURE_READ_ONLY: true に設定して読み取り専用モードを有効にします。デフォルトは false です。

4.1.1. OpenShift での Apicurio Registry ヘルスチェックの設定

liveness および readiness プローブのオプションの環境変数を設定して、OpenShift の Apicurio Registry サーバーの健全性を監視できます。

  • アプリケーションが進行可能な場合は liveness プローブ のテスト。アプリケーションが進行不可能な場合、OpenShift は障害のある Pod を自動的に再起動します。
  • アプリケーションが要求を処理する準備ができている場合は readiness プローブ のテスト。アプリケーションが準備できていない場合、リクエストに圧倒されてしまい、プローブが失敗した期間は OpenShift がリクエストの送信を停止します。他の Pod が OK の場合は、引き続き要求を受け取ります。
重要

liveness および readiness 環境変数のデフォルト値はほとんどの場合を想定して設計されており、環境で必要とされる場合にのみ変更する必要があります。デフォルトへの変更は、ハードウェア、ネットワーク、および保存されたデータ量によって異なります。これらの値は、不要なオーバーヘッドを回避するために、できるだけ低く抑える必要があります。

前提条件

  • クラスター管理者として OpenShift クラスターにアクセスできる。
  • OpenShift に Apicurio Registry がすでにインストールされている。
  • AMQ Streams または PostgreSQL のいずれかで、選択した Apicurio Registry ストレージがインストールされ、設定されている。

手順

  1. OpenShift Container Platform Web コンソールで、クラスター管理者権限を持つアカウントを使用してログインします。
  2. Installed Operators > Apicurio Registry をクリックします。
  3. ApicurioRegistry タブで、example-apicurioregistry などのデプロイメントの Operator カスタムリソースをクリックします。
  4. メインの概要ページで、Deployment Name セクションと Apicurio Registry デプロイメントの対応する DeploymentConfig 名を見つけます (例: example-apicurioregistry)。
  5. 左側のナビゲーションメニューで Workloads > Deployment Configs をクリックし、DeploymentConfig 名を選択します。
  6. Environment タブをクリックして、Single values env セクションに環境変数を入力します。以下に例を示します。

    • NAME: LIVENESS_STATUS_RESET
    • VALUE: 350
  7. 下部にある Save をクリックします。

    代わりに、OpenShift oc コマンドを使用して、これらの手順を実行することもできます。詳細は、OpenShift CLI のドキュメント を参照してください。

4.2. Apicurio Registry ヘルスチェックの環境変数

このセクションでは、OpenShift の Apicurio Registry ヘルスチェックに使用できる環境変数を説明します。これには、OpenShift 上の Apicurio Registry サーバーの健全性を監視する liveness および readiness プローブが含まれます。手順の例は、「OpenShift での Apicurio Registry ヘルスチェックの設定」 を参照してください。

重要

以下の環境変数は参考としてのみ提供されます。デフォルト値はほとんどの場合を想定して設計されており、環境に必要な場合のみ変更する必要があります。デフォルトへの変更は、ハードウェア、ネットワーク、および保存されたデータ量によって異なります。これらの値は、不要なオーバーヘッドを回避するために、できるだけ低く抑える必要があります。

liveness 環境変数
Expand
表4.1 Apicurio Registry liveness プローブの環境変数
名前説明デフォルト

LIVENESS_ERROR_THRESHOLD

liveness プローブが失敗するまでに発生する可能性のある liveness の問題またはエラーの数。

Integer

1

LIVENESS_COUNTER_RESET

しきい値となる数のエラーが発生する期間。たとえば、この値が 60 でしきい値が 1 の場合、1 分間に 2 件のエラーが発生するとチェックが失敗します。

60

LIVENESS_STATUS_RESET

liveness プローブが OK ステータスにリセットされるために、エラーなしで経過する必要のある秒数。

300

LIVENESS_ERRORS_IGNORED

無視された liveness 例外のコンマ区切りリスト。

String

io.grpc.StatusRuntimeException,org.apache.kafka.streams.errors.InvalidStateStoreException

注記

OpenShift は liveness チェックに失敗した Pod を自動的に再起動するため、liveness 設定は readiness 設定とは異なり、OpenShift 上の Apicurio Registry の動作に直接影響を与えません。

readiness 環境変数
Expand
表4.2 Apicurio Registry readiness プローブの環境変数
名前説明デフォルト

READINESS_ERROR_THRESHOLD

readiness プローブが失敗するまでに発生する可能性のある readiness の問題またはエラーの数。

Integer

1

READINESS_COUNTER_RESET

しきい値となる数のエラーが発生する期間。たとえば、この値が 60 でしきい値が 1 の場合、1 分間に 2 件のエラーが発生するとチェックが失敗します。

60

READINESS_STATUS_RESET

liveness プローブが OK ステータスにリセットされるために、エラーなしで経過する必要のある秒数。ここでは、Pod が通常の動作に戻るまでの準備ができていない状態の期間を意味します。

300

READINESS_TIMEOUT

readiness は 2 つの操作のタイムアウトを追跡します。

  • ストレージリクエストが完了するまでの時間
  • HTTP REST API リクエストが応答を返すまでの時間

これらの操作に設定されたタイムアウトよりも時間がかかった場合、これは readiness 問題またはエラーとしてカウントされます。この値は、両方の操作のタイムアウトを制御します。

5

第5章 Web コンソールを使用した Apicurio Registry コンテンツの管理

Apicurio Registry Web コンソールを使用して、Apicurio Registry に保存されているスキーマと API アーティファクトを管理できます。これには、Apicurio Registry コンテンツのアップロードと参照、コンテンツのオプションルールの設定、およびクライアント sdk コードの生成が含まれます。

5.1. Apicurio Registry Web コンソールを使用してアーティファクトを表示する

Apicurio Registry Web コンソールを使用して、Apicurio Registry に保存されているスキーマと API アーティファクトを参照できます。このセクションでは、Apicurio Registry グループ、アーティファクト、バージョン、ルールを表示する簡単な例を示します。

前提条件

  • Apicurio Registry が環境にインストールされ、実行されている。
  • Apicurio Registry Web コンソールにログインしている。

    http://MY_REGISTRY_UI_URL/

  • Web コンソール、コマンドライン、Maven プラグイン、またはクライアントアプリケーションを使用して、アーティファクトが Apicurio Registry に追加されている。

手順

  1. Explore タブで、Apicurio Registry に保存されているアーティファクトのリストを参照するか、検索文字列を入力してアーティファクトを検索します。リストから選択して、名前、グループ、ラベル、グローバル ID などの特定の条件で検索できます。

    図5.1 Apicurio Registry Web コンソールのアーティファクト

  2. アーティファクトをクリックすると、次の詳細が表示されます。

    • 概要: アーティファクト ID、名前、説明、ラベルなどのアーティファクトメタデータを表示します。また、アーティファクトコンテンツに対して設定できる有効性および互換性のルールも表示されます。
    • バージョン: すべてのアーティファクトバージョンのリストを表示します。アーティファクトの作成時に最初のバージョンをアップロードすることを選択しない限り、これは空になります。
    • ブランチ: アーティファクトのブランチのリストを表示します。これにより、少なくとも latest ブランチが表示されますが、設定によっては他の生成されたブランチが表示される場合もあります。

      図5.2 Apicurio Registry Web コンソールのアーティファクトの詳細

  3. すべてのアーティファクトバージョンのリストを表示するには、Versions タブをクリックします。次に、リスト内のいずれかのバージョンをクリックするか、リスト内のバージョンの Action メニューから View Version を選択します。続いて、以下のアーティファクトバージョンの詳細が表示されます。

    • Overview: バージョン名、説明、グローバル ID、コンテンツ ID、ラベルなどのアーティファクトバージョンのメタデータを表示します。アーティファクトバージョンに対して作成されたコメントも表示されます。
    • Documentation (OpenAPI および AsyncAPI のみ): 自動生成された REST API ドキュメントを表示します。
    • Content: 完全なアーティファクトバージョンコンテンツの読み取り専用ビューを表示します。JSON コンテンツの場合、JSON または YAML をクリックして、好みの形式を表示できます。
    • References: このアーティファクトによって参照されるすべてのアーティファクトの読み取り専用ビューを表示します。View artifacts that reference this artifact version をクリックすることもできます。

      図5.3 Apicurio Registry Web コンソールのアーティファクトバージョンの詳細

  4. アーティファクトの内容を my-openapi.json または my-protobuf-schema.proto などのローカルファイルに保存するには、Download をクリックします。

5.2. Apicurio Registry Web コンソールを使用してアーティファクトを追加する

Apicurio Registry Web コンソールを使用して、スキーマと API アーティファクトを Apicurio Registry にアップロードできます。このセクションでは、Apicurio Registry アーティファクトを作成し、新しいアーティファクトバージョンを追加する簡単な例を示します。

前提条件

  • Apicurio Registry が環境にインストールされ、実行されている。
  • Apicurio Registry Web コンソールにログインしている。

    http://MY_REGISTRY_UI_URL/

手順

  1. Explore タブで Create artifact をクリックし、Create artifact ウィザードを完了します。

    注記

    コンテンツなしでプレースホルダーアーティファクトを作成できますが、Apicurio Registry はコンテンツタイプを自動的に検出できないため、アーティファクトタイプを指定する必要があります。プレースホルダーを作成すると、最初にルールを作成し、後でコンテンツを追加できます。

    1. Artifact Coordinates を指定して、Next をクリックします。

      • Group ID & Artifact ID: デフォルトの空の設定を使用して、アーティファクト ID を自動的に生成し、アーティファクトを default のアーティファクトグループに追加します。または、オプションのアーティファクトグループまたはアーティファクト ID を入力することもできます。
      • Type: デフォルトの Auto-Detect 設定を使用してアーティファクトタイプを自動的に検出するか (空のアーティファクトを作成する場合は許可されません)、リストからアーティファクトタイプを選択します (例: Avro Schema または OpenAPI)。自動検出できない Kafka Connect Schema アーティファクトタイプを手動で選択する必要があります。
    2. Artifact Metadata を指定して、Next をクリックします。

      • Name: 新しいアーティファクトの任意のわかりやすい名前を入力します。
      • Description: 新しいアーティファクトの任意の説明を入力します。
      • Labels: オプションで、新しいアーティファクトに 1 つ以上のラベル (名前と値のペア) を追加します。
    3. Version Content を指定して、Next をクリックします。

      • Version Number: 最初のバージョンを作成する場合は、任意のバージョン文字列を追加します。
      • コンテンツ: 次のいずれかのオプションを使用してコンテンツを指定します。

        • From file: Browse をクリックしてファイルを選択するか、ファイルをドラッグアンドドロップします。たとえば、my-openapi.jsonmy-schema.proto などです。または、テキストボックスにファイルの内容を入力することもできます。
        • From URL: 有効かつアクセス可能な URL を入力し、Fetch をクリックします。たとえば、https://petstore3.swagger.io/api/v3/openapi.json です。
    4. Version Metadata を指定します。

      • Name: オプションで、最初のアーティファクトバージョンのフレンドリーネームを入力します。
      • Description: オプションで、最初のアーティファクトバージョンの説明を入力します。
      • Labels: オプションで、最初のアーティファクトバージョンに 1 つ以上のラベル (名前と値のペア) を追加します。
  2. Create をクリックして、アーティファクトの詳細を表示します。

    • 概要: アーティファクト ID、名前、説明、ラベルなどのアーティファクトメタデータを表示します。また、アーティファクトコンテンツに対して設定できる有効性および互換性のルールも表示されます。
    • バージョン: すべてのアーティファクトバージョンのリストを表示します。アーティファクトの作成時に最初のバージョンをアップロードすることを選択しない限り、これは空になります。
    • ブランチ: アーティファクトのブランチのリストを表示します。これにより、少なくとも latest ブランチが表示されますが、設定によっては他の生成されたブランチが表示される場合もあります。

      次の例は、Apache Avro アーティファクトの例を示しています。

      図5.4 Apicurio Registry Web コンソールのアーティファクトの詳細

  3. Overview タブで、Edit 鉛筆アイコンをクリックして、名前や説明などのアーティファクトメタデータを編集します。

    分類や検索の目的で、0 個以上のラベル (名前 + 値) を追加することもできます。ラベルを追加するには、次の手順を実行します。

    1. Add label をクリックします。
    2. キー名と値を入力します (オプション)。
    3. 複数のプロパティーを追加するには、最初の 2 つの手順を繰り返します。
    4. Save をクリックします。
  4. アーティファクトの内容を my-protobuf-schema.proto または my-openapi.json などのローカルファイルに保存するには、ページの最後にある Download をクリックします。
  5. 新しいアーティファクトバージョンを追加するには、Versions タブに切り替えて、ツールバーの Create version をクリックします。次に、以下の情報を提供します。

    1. Version Number: オプションで、新しいバージョンのバージョン文字列を追加します。
    2. コンテンツ: 次のいずれかのオプションを使用してコンテンツを指定します。

      1. From file: Browse をクリックしてファイルを選択するか、ファイルをドラッグアンドドロップします。たとえば、my-openapi.jsonmy-schema.proto などです。または、テキストボックスにファイルの内容を入力することもできます。
      2. From URL: 有効かつアクセス可能な URL を入力し、Fetch をクリックします。たとえば、https://petstore3.swagger.io/api/v3/openapi.json です。
    3. これで、Create ボタンをクリックして新しいバージョンを作成できます。
  6. アーティファクトを削除するには、ページヘッダーの Delete をクリックします。

    警告

    アーティファクトを削除すると、アーティファクトとそのバージョンがすべて削除され、元に戻すことはできません。

5.3. Apicurio Registry Web コンソールを使用してコンテンツルールを設定する

Apicurio Registry Web コンソールを使用して、オプションのルールを設定し、無効なコンテンツまたは互換性のないコンテンツが Apicurio Registry に追加されないようにします。新しいアーティファクトバージョンを Apicurio Registry にアップロードする前に、設定されたすべてのアーティファクト固有ルール、グループ固有ルール、またはグローバルルールにパスする必要があります。設定されたアーティファクト固有ルールは、設定されたグループ固有ルールをオーバーライドし、さらにグループ固有ルールはグローバルルールをオーバーライドします。このセクションでは、グローバルルール、グループ固有ルール、およびアーティファクト固有ルールを設定する簡単な例を示します。

前提条件

  • Apicurio Registry が環境にインストールされ、実行されている。
  • Apicurio Registry Web コンソールにログインしている。

    http://MY_REGISTRY_UI_URL/

  • アーティファクトは、Web コンソール、コマンドライン、Maven プラグイン、または Java クライアントアプリケーションを使用して Apicurio Registry に追加されています。
  • ロールベースの承認が有効になっている場合は、グローバルルール設定に対する管理者アクセス権が付与されます。

手順 (グループ固有ルール)

  1. Explore タブで、"Search for" メニューから Groups を選択して、Apicurio Registry 内のグループのリストを参照します。
  2. グループをクリックすると、その詳細とコンテンツルールが表示されます。
  3. Group-specific rulesEnable をクリックして、グループ内のすべてのアーティファクトコンテンツの有効性、互換性、または整合性ルールを設定し、リストから適切なルール設定を選択します。たとえば、Validity rule では、Full を選択します。

    図5.5 Apicurio Registry Web コンソールのグループ固有ルール

手順 (アーティファクト固有ルール)

  1. Explore タブで、"Search for" メニューから Artifacts を選択して、Apicurio Registry 内のアーティファクトのリストを参照します。
  2. リストからアーティファクトをクリックすると、その詳細とコンテンツルールが表示されます。
  3. Artifact-specific rules で、Enable をクリックしてアーティファクトコンテンツの有効性、互換性、または整合性ルールを設定し、リストから適切なルール設定を選択します。たとえば、Validity rule では、Full を選択します。

    図5.6 Apicurio Registry Web コンソールの Artifact コンテンツルール

手順 (グローバルルール)

  1. グローバルルールにアクセスするには、Global rules タブをクリックします。
  2. Enable をクリックして、すべてのアーティファクトコンテンツに対してグローバルな有効性、互換性または整合性のルールを設定し、リストから適切なルール設定を選択します。

    図5.7 Apicurio Registry Web コンソールの Artifact コンテンツルール

注記

アーティファクト固有、グループ固有、またはグローバルルールを無効にするには、ルールの横にあるゴミ箱アイコンをクリックします。これを実行すると、ルールがより高いレベル (グローバルなど) で設定されている場合は、より高いレベルのルール設定が再度適用されます。

5.4. Apicurio Registry Web コンソールを使用したアーティファクト所有者の変更

管理者として、またはスキーマまたは API アーティファクトの所有者として、Apicurio Registry Web コンソールを使用して、アーティファクトの所有者を別のユーザーアカウントに変更できます。

たとえば、この機能は、所有者または管理者のみがアーティファクトを変更できるように、Settings タブで Apicurio Registry に対して Artifact owner-only authorization オプションが設定されている場合に役立ちます。所有者ユーザーが組織を離れる場合、または所有者アカウントが削除される場合は、所有者を変更する必要があるかもしれません。または、単に修正権限を新しいユーザーに引き継ぐ必要がある場合にも、所有者を変更する必要があるかもしれません。

注記

Artifact owner-only authorization 設定とアーティファクトの Owner フィールドは、Apicurio Registry のデプロイ時に認証が有効になっている場合に のみ 表示されます。詳細は、以下を参照してください。

OpenShift への Red Hat build of Apicurio Registry のインストールおよびデプロイ

前提条件

  • Apicurio Registry がデプロイされ、アーティファクトが作成されている。
  • アーティファクトの現在の所有者または管理者として Apicurio Registry Web コンソールにログインしている。

    http://MY_REGISTRY_UI_URL/

手順

  1. Explore タブで、Apicurio Registry に保存されているアーティファクトのリストを参照するか、検索文字列を入力してアーティファクトを検索します。リストから選択して、名前、グループ、ラベル、グローバル ID などの条件で検索できます。
  2. 再割り当てするアーティファクトをクリックします。
  3. Overview セクションで、Owner フィールドの横にある鉛筆アイコンをクリックします。
  4. New owner フィールドで、アカウント名を選択または入力します。
  5. Change owner をクリックします。

5.5. Web コンソールを使用して Apicurio Registry 設定を行う

管理者は、Apicurio Registry Web コンソールを使用して、実行時に Apicurio Registry の動的な設定を行うことができます。認証、承認、API 互換性などの機能の設定オプションを管理できます。

注記

Apicurio Registry のデプロイ時に認証がすでに有効になっている場合は、認証と承認の設定は Web コンソールにのみ表示されます。詳細は、4章Apicurio Registry デプロイメントを設定する を参照してください。

前提条件

  • Apicurio Registry はすでにデプロイされている。
  • 管理者アクセスで Apicurio Registry Web コンソールにログインしている。

    http://MY_REGISTRY_UI_URL/

手順

  1. Apicurio Registry Web コンソールで、Settings タブをクリックします。
  2. Apicurio Registry 用の設定を選択します。

    Expand
    表5.1 認証設定
    設定説明

    HTTP Basic 認証

    認証がすでに有効になっている場合にのみ表示されます (デプロイメント中)。選択すると、Apicurio Registry ユーザーは、OAuth に加えて HTTP 基本認証を使用して認証できます。デフォルトでは選択されていません。

    Expand
    表5.2 承認設定
    設定説明

    匿名の読み取りアクセス

    認証が有効な場合のみ表示されます。選択すると、Apicurio Registry は、認証情報がない匿名ユーザーからの要求に対して、読み取り専用アクセスを許可します。この設定は、Apicurio Registry を使用してスキーマまたは API を外部に公開する場合に便利です。デフォルトでは選択されていません。

    アーティファクト所有者のみの承認

    認証が有効な場合のみ表示されます。選択すると、アーティファクトを作成したユーザーのみがそのアーティファクトを変更できます。デフォルトでは選択されていません。

    アーティファクトグループ所有者のみの承認

    認証がすでに有効で、Artifact owner-only authorization も有効な場合にのみ表示されます。選択すると、アーティファクトグループを作成したユーザーのみが、そのアーティファクトグループへの書き込みアクセス権 (そのグループのアーティファクトの追加や削除など) を持ちます。デフォルトでは選択されていません。

    認証された読み取りアクセス

    認証が有効な場合のみ表示されます。選択すると、Apicurio Registry は、ユーザーロールに関係なく、認証されたユーザーからのリクエストに対して、少なくとも読み取り専用アクセスを許可します。デフォルトでは選択されていません。

    Expand
    表5.3 互換性設定
    設定説明

    正規ハッシュモード (互換性 API)

    選択すると、Schema Registry 互換性 API はコンテンツの通常のハッシュではなく標準的なハッシュを使用します。

    レガシー ID モード (互換 API)

    選択すると、Confluent Schema Registry 互換性 API は contentId の代わりに globalId をアーティファクト識別子として使用します。

    返されるサブジェクトの最大数 (互換性 API)

    Confluent Schema Registry 互換性 API (/subjects エンドポイント用) によって返されるサブジェクトの最大数を決定します。

    Expand
    表5.4 Web コンソールの設定
    設定説明

    ダウンロードリンクの有効期限

    セキュリティー上の理由により期限切れになるまでに、.zip ダウンロードファイルへの生成されたリンクがアクティブな秒数 (例: Apicurio Registry からアーティファクトデータをエクスポートする場合)。デフォルトは 30 秒です。

    Expand
    表5.5 Semantic versioning 設定
    設定説明

    semver ブランチを自動的に作成する

    有効にすると、メジャー ('A.x') およびマイナー ('A.B.x') アーティファクトバージョンのブランチが自動的に作成または更新されます。

    すべてのバージョン番号が 'semver' と互換性があることを確認する

    有効にすると、すべてのアーティファクトバージョンが Semantic Versioning 2 形式 (https://semver.org) に準拠していることが検証されます。

    Expand
    表5.6 追加のプロパティー
    設定説明

    アーティファクトの削除

    選択すると、ユーザーは Core Registry API を使用して Apicurio Registry 内のアーティファクトを削除できるようになります。デフォルトでは選択されていません。

    アーティファクトバージョンの削除

    選択すると、ユーザーは Core Registry API を使用して Apicurio Registry 内のアーティファクトバージョンを削除できるようになります。デフォルトでは選択されていません。

    グループの削除

    選択すると、ユーザーは Core Registry API を使用して Apicurio Registry 内のグループを削除できるようになります。デフォルトでは選択されていません。

    ストレージ読み取り専用モード

    選択すると、レジストリーはストレージへの書き込み操作に対してエラーを返します (このプロパティーを除く)。デフォルトでは有効になっていません。

5.6. Apicurio Registry Web コンソールを使用したデータのエクスポートとインポート

管理者は、Apicurio Registry Web コンソールを使用して、ある Apicurio Registry インスタンスからデータをエクスポートし、このデータを別の Apicurio Registry インスタンスにインポートできます。この機能を使用して、異なるインスタンス間でデータを簡単に移行できます。

次の例は、Apicurio Registry インスタンス間で .zip ファイル内の既存のデータをエクスポートおよびインポートする方法を示しています。Apicurio Registry インスタンスに含まれるすべてのアーティファクトデータは、.zip ファイルにエクスポートされます。

前提条件

  • Apicurio Registry インスタンスが次のように作成されている。

    • エクスポート元のソースインスタンスには、少なくとも 1 つのスキーマまたは API アーティファクトが含まれている
    • インポート先のターゲットインスタンスは、一意の ID を保持するために空である
  • 管理者アクセスで Apicurio Registry Web コンソールにログインしている。

    http://MY_REGISTRY_UI_URL/

手順

  1. ソース Apicurio Registry インスタンスの Web コンソールで、Explore タブを表示します。
  2. ツールバーの Create artifact の横にある追加のアクションアイコン (縦に並んだ 3 つのドット) をクリックし、Export all (as .ZIP) を選択して、この Apicurio Registry インスタンスのデータを .zip ダウンロードファイルにエクスポートします。
  3. ターゲットの Apicurio Registry インスタンスの Web コンソールで、Explore タブを表示します。
  4. ツールバーの Create artifact の横にある追加のアクションアイコン (縦に並んだ 3 つのドット) をクリックし、Import from .ZIP を選択します。
  5. 以前にエクスポートした .zip ダウンロードファイルをドラッグアンドドロップするか、参照します。
  6. Import をクリックし、データがインポートされるまで待ちます。

第6章 REST API を使用して Apicurio Registry コンテンツを管理する

クライアントアプリケーションは、Apicurio Registry REST API オペレーションを使用して、Apicurio Registry のスキーマと API アーティファクトを管理できます。たとえば、実稼働環境にデプロイされた CI/CD パイプラインで使用できます。Core Registry API v3 は、Apicurio Registry に保存されているアーティファクト、バージョン、メタデータ、およびルールの操作を提供します。詳細は、Apicurio Registry REST API ドキュメント を参照してください。

この章では、Core Registry API v3 を使用して、次のタスクを実行する方法の例を示します。

6.1. Apicurio Registry REST API コマンドを使用したスキーマおよび API アーティファクトの管理

このセクションでは、Core Registry API v3 を使用して、Apicurio Registry で単純なスキーマアーティファクトを追加および取得する簡単な curl ベースの例を示します。

前提条件

  • Apicurio Registry が環境にインストールされ、実行されている。

手順

  1. /groups/{groupId}/artifacts 操作を使用して、Apicurio Registry にアーティファクトを追加します。次の curl コマンドの例では、株価アプリケーションの単純なスキーマアーティファクトを追加します。

    $ curl -X POST MY-REGISTRY-URL/apis/registry/v3/groups/my-group/artifacts \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $ACCESS_TOKEN" \
      --data-raw '{
        "artifactId": "share-price",
        "artifactType": "AVRO",
        "firstVersion": {
            "content": {
                "content": "{\"type\":\"record\",\"name\":\" p\",\"namespace\":\"com.example\", \"fields\":[{\"name\":\"symbol\",\"type\":\"string\"},{\"name\":\"price\",\"type\":\"string\"}]}",
                "contentType": "application/json"
            }
        }
    }'
    Copy to Clipboard Toggle word wrap
    • この例では、アーティファクト ID が share-price の Apache Avro スキーマアーティファクトを追加します。一意のアーティファクト ID を指定しない場合、Apicurio Registry は UUID として自動的に生成します。
    • MY-REGISTRY-URL は、Apicurio Registry がデプロイされているホスト名です。たとえば、http://localhost:8080 です。
    • この例では、API パスで my-group のグループ ID を指定します。一意のグループ ID を指定しない場合は、API パスで ../groups/default を指定する必要があります。
  2. 応答に、アーティファクトが追加されたことを確認するために、想定される JSON body が含まれていることを確認します。以下に例を示します。

    {"artifact":{"owner":"","createdOn":"2024-09-26T17:24:21Z","modifiedBy":"","modifiedOn":"2024-09-26T17:24:21Z","artifactType":"AVRO","groupId":"my-group","artifactId":"share-price"},"version":{"version":"1","owner":"","createdOn":"2024-09-26T17:24:21Z","artifactType":"AVRO","globalId":2,"state":"ENABLED","groupId":"my-group","contentId":2,"artifactId":"share-price"}}
    Copy to Clipboard Toggle word wrap
    • アーティファクトの追加時にバージョンが指定されなかったため、デフォルトのバージョン 1 が自動的に作成されます。
    • これは Apicurio Registry に追加された 2 番目のアーティファクトであるため、グローバル ID とコンテンツ ID の値は 2 です。
  3. API パスのアーティファクト ID を使用して、Apicurio Registry からアーティファクトバージョンコンテンツを取得します。この例では、指定された ID は share-price です。

    $ curl -H "Authorization: Bearer $ACCESS_TOKEN" \
     MY-REGISTRY-URL/apis/registry/v3/groups/my-group/artifacts/share-price/versions/1/content
     {"type":"record","name":"price","namespace":"com.example",
      "fields":[{"name":"symbol","type":"string"},{"name":"price","type":"string"}]}
    Copy to Clipboard Toggle word wrap

Core Registry API v3 を使用してスキーマと API アーティファクトを追加するときにアーティファクトバージョン番号を指定しないと、Apicurio Registry によってバージョン番号が自動的に生成されます。新規アーティファクト作成時のデフォルトのバージョンは 1 です。

Apicurio Registry は、アーティファクトまたはアーティファクトバージョンを作成する際に、バージョン番号を指定できるカスタムバージョン管理もサポートしています。カスタムバージョン値を指定すると、アーティファクトまたはアーティファクトバージョンを作成する際に通常割り当てられるデフォルトバージョンがオーバーライドされます。続いて、バージョン番号を必要とする REST API 操作を実行する場合は、このバージョン値を使用できます。

このセクションでは、Core Registry API v3 を使用して、Apicurio Registry でカスタム Apache Avro スキーマバージョンを追加および取得する簡単な curl ベースの例を示します。カスタムバージョン番号を指定して、アーティファクトを作成したり、アーティファクトバージョンを追加したりできます。

前提条件

  • Apicurio Registry が環境にインストールされ、実行されている。

手順

  1. /groups/{groupId}/artifacts 操作を使用して、レジストリーにアーティファクトバージョンを追加します。以下の curl コマンドの例は、株価アプリケーションの単純なアーティファクトを追加します。

    $ curl -X POST MY-REGISTRY-URL/apis/registry/v3/groups/my-group/artifacts \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $ACCESS_TOKEN" \
      --data-raw '{
        "artifactId": "my-share-price",
        "artifactType": "AVRO",
        "firstVersion": {
            "version": "1.1.1",
            "content": {
                "content": "{\"type\":\"record\",\"name\":\" p\",\"namespace\":\"com.example\", \"fields\":[{\"name\":\"symbol\",\"type\":\"string\"},{\"name\":\"price\",\"type\":\"string\"}]}",
                "contentType": "application/json"
            }
        }
    }'
    Copy to Clipboard Toggle word wrap
    • この例では、アーティファクト ID が my-share-price でバージョンが 1.1.1 の Avro スキーマアーティファクトを追加します。バージョンを指定しない場合、Apicurio Registry はデフォルトバージョンの 1 を自動的に生成します。
    • MY-REGISTRY-URL は、Apicurio Registry がデプロイされているホスト名です。たとえば、http://localhost:8080 です。
    • この例では、API パスで my-group のグループ ID を指定します。一意のグループ ID を指定しない場合は、API パスで ../groups/default を指定する必要があります。
  2. 応答に、カスタムアーティファクトバージョンが追加されたことを確認するために、想定される JSON body が含まれていることを確認します。以下に例を示します。

    {"artifact":{"owner":"","createdOn":"2024-09-26T17:06:21Z","modifiedBy":"","modifiedOn":"2024-09-26T17:06:21Z","artifactType":"AVRO","groupId":"my-group","artifactId":"my-share-price"},"version":{"version":"1.1.1","owner":"","createdOn":"2024-09-26T17:06:21Z","artifactType":"AVRO","globalId":4,"state":"ENABLED","groupId":"my-group","contentId":4,"artifactId":"my-share-price"}}
    Copy to Clipboard Toggle word wrap
    • アーティファクトの追加時に、1.1.1 のカスタムバージョンが指定されました。
    • これはレジストリーに追加された 4 つ目のアーティファクトであるため、グローバル ID とコンテンツ ID の値は 4 になります。
  3. API パスでアーティファクト ID とバージョンを使用して、レジストリーからアーティファクトコンテンツを取得します。この例では、指定された ID は my-share-price であり、バージョンは 1.1.1 です。

    $ curl -H "Authorization: Bearer $ACCESS_TOKEN" \
        MY-REGISTRY-URL/apis/registry/v3/groups/my-group/artifacts/my-share-price/versions/1.1.1/content
    {"type":"record","name":"price","namespace":"com.example",
      "fields":[{"name":"symbol","type":"string"},{"name":"price","type":"string"}]}
    Copy to Clipboard Toggle word wrap

一部の Apicurio Registry アーティファクトタイプには、あるアーティファクトファイルから別のアーティファクトファイルへの アーティファクト参照 を含めることができます。再利用可能なスキーマまたは API アーティファクトを定義し、アーティファクト参照の複数の場所からそれらを参照することで、効率を高めることができます。

次のアーティファクトタイプはアーティファクト参照をサポートしています。

  • Apache Avro
  • Google Protobuf
  • JSON Schema
  • OpenAPI
  • AsyncAPI

このセクションでは、Core Registry API v3 を使用して、Apicurio Registry 内の単純な Avro スキーマアーティファクトへのアーティファクト参照を追加および取得する、単純な curl ベースの例を示します。

この例では、最初に ItemId という名前のスキーマアーティファクトを作成します。

ItemId スキーマ

{
    "namespace":"com.example.common",
    "name":"ItemId",
    "type":"record",
    "fields":[
        {
            "name":"id",
            "type":"int"
        }
    ]
}
Copy to Clipboard Toggle word wrap

次に、この例では、ネストされた ItemId アーティファクトへの参照を含む、Item という名前のスキーマアーティファクトを作成します。

ネストされた ItemId スキーマを持つアイテムスキーマ

{
    "namespace":"com.example.common",
    "name":"Item",
    "type":"record",
    "fields":[
        {
            "name":"itemId",
            "type":"com.example.common.ItemId"
        }
    ]
}
Copy to Clipboard Toggle word wrap

前提条件

  • Apicurio Registry が環境にインストールされ、実行されている。

手順

  1. /groups/{groupId}/artifacts 操作を使用して、ネストされたアーティファクト参照を作成する ItemId スキーマアーティファクトを追加します。

    $ curl -X POST MY-REGISTRY-URL/apis/registry/v3/groups/my-group/artifacts \
       -H "Content-Type: application/json" \
       -H "Authorization: Bearer $ACCESS_TOKEN" \
       --data '{"artifactId":"ItemId","artifactType":"AVRO","firstVersion":{"version":"1.0.0","content":{"content":"{\"namespace\":\"com.example.common\",\"name\":\"ItemId\",\"type\":\"record\",\"fields\":[{\"name\":\"id\",\"type\":\"int\"}]}","contentType":"application/json"}}}'
    Copy to Clipboard Toggle word wrap
    • この例では、ItemId のアーティファクト ID を持つ Avro スキーマアーティファクトを追加します。一意のアーティファクト ID を指定しない場合、Apicurio Registry は UUID として自動的に生成します。
    • MY-REGISTRY-URL は、Apicurio Registry がデプロイされているホスト名です。たとえば、http://localhost:8080 です。
    • この例では、API パスで my-group のグループ ID を指定します。一意のグループ ID を指定しない場合は、API パスで ../groups/default を指定する必要があります。
  2. 応答に、アーティファクトが追加されたことを確認するために、想定される JSON body が含まれていることを確認します。以下に例を示します。

    {"artifact":{"owner":"","createdOn":"2024-09-26T16:27:38Z","modifiedBy":"","modifiedOn":"2024-09-26T16:27:38Z","artifactType":"AVRO","groupId":"my-group","artifactId":"ItemId"},"version":{"version":"1.0.0","owner":"","createdOn":"2024-09-26T16:27:38Z","artifactType":"AVRO","globalId":2,"state":"ENABLED","groupId":"my-group","contentId":2,"artifactId":"ItemId"}}
    Copy to Clipboard Toggle word wrap
  3. /groups/{groupId}/artifacts 操作を使用して、ItemId スキーマへのアーティファクト参照を含む Item スキーマアーティファクトを追加します。

    $ curl -X POST MY-REGISTRY-URL/apis/registry/v3/groups/my-group/artifacts \
    -H 'Content-Type: application/json' \
    -H "Authorization: Bearer $ACCESS_TOKEN" \
    --data-raw '{
    	"artifactId": "Item",
    	"artifactType": "AVRO",
    	"firstVersion": {
    		"version": "1.0.0",
    		"content": {
    			"content": "{\"namespace\":\"com.example.common\",\"name\":\"Item\",\"type\":\"record\",\"fields\":[{\"name\":\"itemId\",\"type\":\"com.example.common.ItemId\"}]}",
    			"contentType": "application/json",
    			"references": [
    				{
    					"name": "com.example.common.ItemId",
    					"groupId": "my-group",
    					"artifactId": "ItemId",
    					"version": "1.0.0"
    				}
    			]
    		}
    	}
    }'
    Copy to Clipboard Toggle word wrap
  4. アーティファクトが参照を使用して作成されたことを確認するために、予期される JSON body が応答に含まれていることを確認します。以下に例を示します。

    {"artifact":{"owner":"","createdOn":"2024-09-26T16:28:45Z","modifiedBy":"","modifiedOn":"2024-09-26T16:28:45Z","artifactType":"AVRO","groupId":"my-group","artifactId":"Item"},"version":{"version":"1.0.0","owner":"","createdOn":"2024-09-26T16:28:45Z","artifactType":"AVRO","globalId":3,"state":"ENABLED","groupId":"my-group","contentId":3,"artifactId":"Item"}}
    Copy to Clipboard Toggle word wrap
  5. 参照を含むアーティファクトの座標を指定して、Apicurio Registry からアーティファクト参照を取得します。

    $ curl -H "Authorization: Bearer $ACCESS_TOKEN" MY-REGISTRY-URL/apis/registry/v3/groups/my-group/artifacts/Item/versions/1.0.0/references
    Copy to Clipboard Toggle word wrap
  6. 応答に、このアーティファクト参照に必要とされる JSON 本文が含まれていることを確認してください。以下に例を示します。

    [{"groupId":"my-group","artifactId":"ItemId","version":"1.0.0","name":"com.example.common.ItemId"}]
    Copy to Clipboard Toggle word wrap

間接参照

参照されるコンテンツをインライン化したアーティファクトのコンテンツを持つことが役立つ状況がいくつかあります。このような状況では、Core Registry API v3 は特定の操作で 参照パラメーター をサポートします。

このサポートは現在、特定の API 操作にパラメーターが存在する場合に、Avro、JSON スキーマ、Protobuf、OpenAPI、および AsyncAPI に対して実装されています。このパラメーターは他のスキーマタイプではサポートされていません。

  1. 逆参照された (インライン化された) スキーマコンテンツを取得します。

    $ curl -H "Authorization: Bearer $ACCESS_TOKEN" MY-REGISTRY-URL/apis/registry/v3/groups/my-group/artifacts/Item/versions/1.0.0/content?references=DEREFERENCE
    Copy to Clipboard Toggle word wrap
  2. 応答に、参照がインライン化されたこのアーティファクトコンテンツの予想される JSON 本文が含まれていることを確認します。以下に例を示します。

    {"type":"record","name":"Item","namespace":"com.example.common","fields":[{"name":"itemId","type":{"type":"record","name":"ItemId","fields":[{"name":"id","type":"int"}]}}]}
    Copy to Clipboard Toggle word wrap

このサポートは現在、API 操作で dereference パラメーターが指定されている場合に、Avro、Protobuf、OpenAPI、AsyncAPI、および JSON Schema アーティファクトに対してのみ実装されています。このパラメーターは、他のアーティファクトタイプではサポートされません。

注記

Protobuf アーティファクトの場合、コンテンツの逆参照は、すべてのスキーマが同じパッケージに属している場合にのみサポートされます。

注記

循環依存関係は、一部のアーティファクトタイプ (JSON スキーマなど) では許可されますが、Apicurio Registry ではサポートされていません。

管理者は、Core Registry API v3 を使用して、ある Apicurio Registry インスタンスからデータをエクスポートし、別の Apicurio Registry インスタンスにインポートできるため、異なるインスタンス間でデータを移行できます。

このセクションでは、Core Registry API v3 を使用して、ある Apicurio Registry インスタンスから別のインスタンスへ .zip 形式で既存のデータをエクスポートおよびインポートする、シンプルな curl ベースの例を示します。Apicurio Registry インスタンスに含まれるすべてのアーティファクトデータは、.zip ファイルにエクスポートされます。

前提条件

  • Apicurio Registry が環境にインストールされ、実行されている。
  • Apicurio Registry インスタンスが作成されている。

    • データのエクスポート元のソースインスタンスには、1 つ以上のスキーマまたは API アーティファクトが含まれている。
    • データをインポートするターゲットインスタンスは、一意の ID を保持するために空。

手順

  1. 既存のソース Apicurio Registry インスタンスから Apicurio Registry データをエクスポートします。

    $ curl MY-REGISTRY-URL/apis/registry/v3/admin/export \
      -H "Authorization: Bearer $ACCESS_TOKEN" \
      --output my-registry-data.zip
    Copy to Clipboard Toggle word wrap

    MY-REGISTRY-URL は、ソース Apicurio Registry がデプロイされているホスト名です。たとえば、http://my-source-registry:8080 です。

  2. レジストリーデータをターゲット Apicurio Registry インスタンスにインポートします。

    $ curl -X POST "MY-REGISTRY-URL/apis/registry/v3/admin/import" \
      -H "Content-Type: application/zip" -H "Authorization: Bearer $ACCESS_TOKEN" \
      --data-binary @my-registry-data.zip
    Copy to Clipboard Toggle word wrap

    MY-REGISTRY-URL は、ターゲットの Apicurio Registry がデプロイされているホスト名です。たとえば、http://my-target-registry:8080 です。

第7章 Maven プラグインを使用した Apicurio Registry コンテンツの管理

クライアントアプリケーションの開発時に、Apicurio Registry Maven プラグインを使用して、Apicurio Registry に保存されているスキーマと API アーティファクトを管理できます。

前提条件

  • Apicurio Registry が環境にインストールされ、実行されている。
  • Apache Maven が環境にインストールおよび設定されている。

7.1. Maven プラグインを使用したスキーマおよび API アーティファクトの追加

Maven プラグインの最も一般的な使用例は、クライアントアプリケーションのビルド中に、アーティファクトを追加することです。これは、register 実行目標を使用して実現できます。

前提条件

  • クライアントアプリケーションの Maven プロジェクトを作成している。詳細は、Apache Maven のドキュメント を参照してください。

手順

  1. Maven pom.xml ファイルを更新して、apicurio-registry-maven-plugin を使用してアーティファクトを登録します。以下の例は、Apache Avro および GraphQL スキーマの登録を示しています。

    <plugin>
      <groupId>io.apicurio</groupId>
      <artifactId>apicurio-registry-maven-plugin</artifactId>
      <version>${apicurio.version}</version>
      <executions>
          <execution>
            <phase>generate-sources</phase>
            <goals>
                <goal>register</goal>  
    1
    
            </goals>
            <configuration>
                <registryUrl>MY-REGISTRY-URL/apis/registry/v3</registryUrl> 
    2
    
                <authServerUrl>MY-AUTH-SERVER</authServerUrl>
                <clientId>MY-CLIENT-ID</clientId>
                <clientSecret>MY-CLIENT-SECRET</clientSecret> 
    3
    
                <clientScope>MY-CLIENT-SCOPE</clientScope>
                <artifacts>
                    <artifact>
                        <groupId>TestGroup</groupId> 
    4
    
                        <artifactId>FullNameRecord</artifactId>
                        <file>${project.basedir}/src/main/resources/schemas/record.avsc</file>
                        <ifExists>FAIL</ifExists>
                    </artifact>
                    <artifact>
                        <groupId>TestGroup</groupId>
                        <artifactId>ExampleAPI</artifactId> 
    5
    
                        <artifactType>GRAPHQL</artifactType>
                        <file>${project.basedir}/src/main/resources/apis/example.graphql</file>
                        <ifExists>FIND_OR_CREATE_VERSION</ifExists>
                        <canonicalize>true</canonicalize>
                    </artifact>
                </artifacts>
            </configuration>
        </execution>
      </executions>
     </plugin>
    Copy to Clipboard Toggle word wrap
    1
    register を実行ゴールとして指定し、スキーマアーティファクトを Apicurio Registry にアップロードします。
    2
    ../apis/registry/v3 エンドポイントで Apicurio Registry URL を指定します。
    3
    認証が必要な場合は、認証サーバーおよびクライアントの認証情報を指定できます。
    4
    Apicurio Registry アーティファクトグループ ID を指定します。一意のグループ ID を使用しない場合は、default のグループを指定できます。
    5
    指定したグループ ID、アーティファクト ID、および場所を使用して複数のアーティファクトを登録できます。
  2. たとえば、mvn package コマンドを使用して、Maven プロジェクトをビルドします。

7.2. Maven プラグインを使用したスキーマおよび API アーティファクトのダウンロード

Maven プラグインを使用して、Apicurio Registry からアーティファクトをダウンロードできます。これは、たとえば、登録されたスキーマからコードを生成する場合などに便利です。

前提条件

  • クライアントアプリケーションの Maven プロジェクトを作成している。詳細は、Apache Maven のドキュメント を参照してください。

手順

  1. Maven pom.xml ファイルを更新して、apicurio-registry-maven-plugin を使用してアーティファクトをダウンロードします。以下の例は、Apache Avro および GraphQL スキーマのダウンロードを示しています。

    <plugin>
      <groupId>io.apicurio</groupId>
      <artifactId>apicurio-registry-maven-plugin</artifactId>
      <version>${apicurio.version}</version>
      <executions>
        <execution>
          <phase>generate-sources</phase>
          <goals>
            <goal>download</goal> 
    1
    
          </goals>
          <configuration>
              <registryUrl>MY-REGISTRY-URL/apis/registry/v3</registryUrl> 
    2
    
              <authServerUrl>MY-AUTH-SERVER</authServerUrl>
              <clientId>MY-CLIENT-ID</clientId>
              <clientSecret>MY-CLIENT-SECRET</clientSecret> 
    3
    
              <clientScope>MY-CLIENT-SCOPE</clientScope>
              <artifacts>
                  <artifact>
                      <groupId>TestGroup</groupId> 
    4
    
                      <artifactId>FullNameRecord</artifactId> 
    5
    
                      <file>${project.build.directory}/classes/record.avsc</file>
                      <overwrite>true</overwrite>
                  </artifact>
                  <artifact>
                      <groupId>TestGroup</groupId>
                      <artifactId>ExampleAPI</artifactId>
                      <version>1</version>
                      <file>${project.build.directory}/classes/example.graphql</file>
                      <overwrite>true</overwrite>
                  </artifact>
              </artifacts>
          </configuration>
        </execution>
      </executions>
    </plugin>
    Copy to Clipboard Toggle word wrap
    1
    実行目標として download を指定します。
    2
    ../apis/registry/v3 エンドポイントで Apicurio Registry URL を指定します。
    3
    認証が必要な場合は、認証サーバーおよびクライアントの認証情報を指定できます。
    4
    Apicurio Registry アーティファクトグループ ID を指定します。一意のグループを使用しない場合は、default のグループを指定できます。
    5
    アーティファクト ID を使用すると、複数のアーティファクトを指定したディレクトリーにダウンロードできます。
  2. たとえば、mvn package コマンドを使用して、Maven プロジェクトをビルドします。

7.3. Maven プラグインを使用したスキーマおよび API アーティファクトのテスト

実際にアーティファクトを変更することなく、アーティファクトを登録できることを確認する場合があります。これは、ルールが Apicurio Registry に設定されている場合に役に立ちます。アーティファクトのコンテンツが設定済みのルールのいずれかに違反する場合、アーティファクトのテストに失敗します。

注記

Maven プラグインを使用してアーティファクトをテストする場合には、アーティファクトがテストに合格しても、Apicurio Registry にコンテンツが追加されません。

前提条件

  • クライアントアプリケーションの Maven プロジェクトを作成している。詳細は、Apache Maven のドキュメント を参照してください。

手順

  1. Maven pom.xml ファイルを更新して、apicurio-registry-maven-plugin を使用してアーティファクトをテストします。Apache Avro スキーマのテストの例を以下に示します。

    <plugin>
      <groupId>io.apicurio</groupId>
      <artifactId>apicurio-registry-maven-plugin</artifactId>
      <version>${apicurio.version}</version>
      <executions>
          <execution>
            <phase>generate-sources</phase>
            <goals>
                <goal>test-update</goal>  
    1
    
            </goals>
            <configuration>
                <registryUrl>MY-REGISTRY-URL/apis/registry/v3</registryUrl> 
    2
    
                <authServerUrl>MY-AUTH-SERVER</authServerUrl>
                <clientId>MY-CLIENT-ID</clientId>
                <clientSecret>MY-CLIENT-SECRET</clientSecret> 
    3
    
                <clientScope>MY-CLIENT-SCOPE</clientScope>
                <artifacts>
                    <artifact>
                        <groupId>TestGroup</groupId> 
    4
    
                        <artifactId>FullNameRecord</artifactId>
                        <file>${project.basedir}/src/main/resources/schemas/record.avsc</file> 
    5
    
                    </artifact>
                </artifacts>
            </configuration>
        </execution>
      </executions>
     </plugin>
    Copy to Clipboard Toggle word wrap
    1
    スキーマアーティファクトをテストするための実行目標として test-update を指定します。
    2
    ../apis/registry/v3 エンドポイントで Apicurio Registry URL を指定します。
    3
    認証が必要な場合は、認証サーバーおよびクライアントの認証情報を指定できます。
    4
    Apicurio Registry アーティファクトグループ ID を指定します。一意のグループを使用しない場合は、default のグループを指定できます。
    5
    アーティファクト ID を使用すると、指定のディレクトリーから複数のアーティファクトをテストできます。
  2. たとえば、mvn package コマンドを使用して、Maven プロジェクトをビルドします。

7.4. Apicurio Registry Maven プラグインを使用したアーティファクト参照の手動追加

一部の Apicurio Registry アーティファクトタイプには、あるアーティファクトファイルから別のアーティファクトファイルへの アーティファクト参照 を含めることができます。再利用可能なスキーマまたは API アーティファクトを定義し、アーティファクト参照の複数の場所からそれらを参照することで、効率を高めることができます。

次のアーティファクトタイプはアーティファクト参照をサポートしています。

  • Apache Avro
  • Google Protobuf
  • JSON Schema
  • OpenAPI
  • AsyncAPI

このセクションでは、Apicurio Registry Maven プラグインを使用して、Apicurio Registry に格納されている単純な Avro スキーマアーティファクトへのアーティファクト参照を手動で登録する簡単な例を示します。この例では、次の Exchange スキーマアーティファクトが Apicurio Registry にすでに作成されていることを前提としています。

交換スキーマ

{
  "namespace": "com.kubetrade.schema.common",
  "type": "enum",
  "name": "Exchange",
  "symbols" : ["GEMINI"]
}
Copy to Clipboard Toggle word wrap

次に、この例では、ネストされた Exchange スキーマアーティファクトへの参照を含む TradeKey スキーマアーティファクトを作成します。

Exchange スキーマへのネストされた参照を含む TradeKey スキーマ

{
  "namespace": "com.kubetrade.schema.trade",
  "type": "record",
  "name": "TradeKey",
  "fields": [
    {
      "name": "exchange",
      "type": "com.kubetrade.schema.common.Exchange"
    },
    {
      "name": "key",
      "type": "string"
    }
  ]
}
Copy to Clipboard Toggle word wrap

前提条件

  • クライアントアプリケーションの Maven プロジェクトを作成している。詳細は、Apache Maven のドキュメント を参照してください。
  • 参照された Exchange スキーマアーティファクトが Apicurio Registry にすでに作成されている。

手順

  1. apicurio-registry-maven-plugin を使用して TradeKey スキーマを登録するように Maven pom.xml ファイルを更新します。これには、次のように Exchange スキーマへのネストされた参照が含まれます。

    <plugin>
        <groupId>io.apicurio</groupId>
        <artifactId>apicurio-registry-maven-plugin</artifactId>
        <version>${apicurio-registry.version}</version>
        <executions>
            <execution>
                <phase>generate-sources</phase>
                <goals>
                    <goal>register</goal> 
    1
    
                </goals>
                <configuration>
                    <registryUrl>MY-REGISTRY-URL/apis/registry/v3</registryUrl> 
    2
    
                    <authServerUrl>MY-AUTH-SERVER</authServerUrl>
                    <clientId>MY-CLIENT-ID</clientId>
                    <clientSecret>MY-CLIENT-SECRET</clientSecret> 
    3
    
                    <clientScope>MY-CLIENT-SCOPE</clientScope>
                    <artifacts>
                        <artifact>
                            <groupId>test-group</groupId> 
    4
    
                            <artifactId>TradeKey</artifactId>
                            <version>2.0</version>
                            <artifactType>AVRO</artifactType>
                            <file>
                                ${project.basedir}/src/main/resources/schemas/TradeKey.avsc
                            </file>
                            <ifExists>FIND_OR_CREATE_VERSION</ifExists>
                            <canonicalize>true</canonicalize>
                            <references>
                                <reference> 
    5
    
                                    <name>com.kubetrade.schema.common.Exchange</name>
                                    <groupId>test-group</groupId>
                                    <artifactId>Exchange</artifactId>
                                    <version>2.0</version>
                                    <artifactType>AVRO</artifactType>
                                    <file>
                                        ${project.basedir}/src/main/resources/schemas/Exchange.avsc
                                    </file>
                                    <ifExists>FIND_OR_CREATE_VERSION</ifExists>
                                    <canonicalize>true</canonicalize>
                                </reference>
                            </references>
                        </artifact>
                    </artifacts>
                </configuration>
            </execution>
        </executions>
    </plugin>
    Copy to Clipboard Toggle word wrap
    1
    register を実行ゴールとして指定し、スキーマアーティファクトを Apicurio Registry にアップロードします。
    2
    ../apis/registry/v3 エンドポイントを使用して Apicurio Registry URL を指定します。
    3
    認証が必要な場合は、認証サーバーおよびクライアントの認証情報を指定できます。
    4
    Apicurio Registry アーティファクトグループ ID を指定します。一意のグループ ID を使用しない場合は、default のグループを指定できます。
    5
    グループ ID、アーティファクト ID、バージョン、タイプ、および場所を使用して、Apicurio Registry アーティファクト参照を指定します。この方法で、複数のアーティファクト参照を登録できます。
  2. たとえば、mvn package コマンドを使用して、Maven プロジェクトをビルドします。

7.5. Apicurio Registry Maven プラグインを使用したアーティファクト参照の自動追加

一部の Apicurio Registry アーティファクトタイプには、あるアーティファクトファイルから別のアーティファクトファイルへの アーティファクト参照 を含めることができます。再利用可能なスキーマまたは API アーティファクトを定義し、アーティファクト参照の複数の場所からそれらを参照することで、効率を高めることができます。

次のアーティファクトタイプはアーティファクト参照をサポートしています。

  • Apache Avro
  • Google Protobuf
  • JSON Schema
  • OpenAPI
  • AsyncAPI

単一のアーティファクトを指定し、Apicurio Registry Maven プラグインを設定して、同じディレクトリーにあるアーティファクトへのすべての参照を自動的に検出し、これらの参照を自動的に登録できます。これはテクノロジープレビューの機能です。

重要

テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

このセクションでは、Maven プラグインを使用して Avro スキーマを登録し、単純なスキーマアーティファクトへのアーティファクト参照を自動的に検出して登録する簡単な例を紹介します。この例では、親 TradeKey アーティファクトとネストされた Exchange スキーマアーティファクトの両方が、同じディレクトリーで利用可能であることを前提としています。

Exchange スキーマへのネストされた参照を含む TradeKey スキーマ

{
  "namespace": "com.kubetrade.schema.trade",
  "type": "record",
  "name": "TradeKey",
  "fields": [
    {
      "name": "exchange",
      "type": "com.kubetrade.schema.common.Exchange"
    },
    {
      "name": "key",
      "type": "string"
    }
  ]
}
Copy to Clipboard Toggle word wrap

交換スキーマ

{
  "namespace": "com.kubetrade.schema.common",
  "type": "enum",
  "name": "Exchange",
  "symbols" : ["GEMINI"]
}
Copy to Clipboard Toggle word wrap

前提条件

  • クライアントアプリケーションの Maven プロジェクトを作成している。詳細は、Apache Maven のドキュメント を参照してください。
  • TradeKey スキーマアーティファクトとネストされた Exchange スキーマアーティファクトファイルは両方とも、同じディレクトリーにあります。

手順

  1. apicurio-registry-maven-plugin を使用して TradeKey スキーマを登録するように Maven pom.xml ファイルを更新します。これには、次のように Exchange スキーマへのネストされた参照が含まれます。

    <plugin>
        <groupId>io.apicurio</groupId>
        <artifactId>apicurio-registry-maven-plugin</artifactId>
        <version>${apicurio-registry.version}</version>
        <executions>
            <execution>
                <phase>generate-sources</phase>
                <goals>
                    <goal>register</goal> 
    1
    
                </goals>
                <configuration>
                    <registryUrl>MY-REGISTRY-URL/apis/registry/v3</registryUrl> 
    2
    
                    <authServerUrl>MY-AUTH-SERVER</authServerUrl>
                    <clientId>MY-CLIENT-ID</clientId>
                    <clientSecret>MY-CLIENT-SECRET</clientSecret> 
    3
    
                    <clientScope>MY-CLIENT-SCOPE</clientScope>
                    <artifacts>
                        <artifact>
                            <groupId>test-group</groupId> 
    4
    
                            <artifactId>TradeKey</artifactId>
                            <version>2.0</version>
                            <artifactType>AVRO</artifactType>
                            <file>
                                ${project.basedir}/src/main/resources/schemas/TradeKey.avsc 
    5
    
                            </file>
                            <ifExists>FIND_OR_CREATE_VERSION</ifExists>
                            <canonicalize>true</canonicalize>
                            <autoRefs>true</autoRefs> 
    6
    
                        </artifact>
                    </artifacts>
                </configuration>
            </execution>
        </executions>
    </plugin>
    Copy to Clipboard Toggle word wrap
    1
    register を実行ゴールとして指定し、スキーマアーティファクトを Apicurio Registry にアップロードします。
    2
    ../apis/registry/v3 エンドポイントを使用して Apicurio Registry URL を指定します。
    3
    認証が必要な場合は、認証サーバーおよびクライアントの認証情報を指定できます。
    4
    参照を含む親アーティファクトグループ ID を指定します。一意のグループ ID を使用しない場合は、default のグループを指定できます。
    5
    親アーティファクトファイルの場所を指定します。参照されるアーティファクトはすべて、同じディレクトリーに置く必要があります。
    6
    <autoRefs> オプションを true に設定すると、同じディレクトリー内のアーティファクトへのすべての参照が自動的に検出されて登録されます。この方法で、複数のアーティファクト参照を登録できます。
  2. たとえば、mvn package コマンドを使用して、Maven プロジェクトをビルドします。

第8章 SDK を使用して Apicurio Registry コンテンツを管理する

Apicurio Registry クライアントアプリケーション (Java、Typescript、Python、または Golang) を作成し、それを使用して Apicurio Registry に保存されているアーティファクトを管理できます。

8.1. Apicurio Registry SDK

提供されている SDK のいずれかを使用して、Apicurio Registry に保存されているアーティファクトを管理できます。アーティファクトの作成、読み取り、更新、削除など、REST API でサポートされている任意の必要な操作を実行できます。Apicurio Registry SDK を使用して、グローバルルールの管理や Apicurio Registry データのインポートとエクスポートなどの管理者機能を実行することもできます。

Apicurio Registry の一部として提供される以下の SDK のいずれかを使用できます。

  • Java
  • Typescript
  • Python
  • Golang

8.1.1. Java

Apache Maven プロジェクトに正しい依存関係を追加することで、Apicurio Registry Java SDK にアクセスできます。詳細は、「Apicurio Registry SDK アプリケーションの作成」 を参照してください。

Apicurio Registry クライアントは、必要に応じてカスタマイズできる JDK によって提供される HTTP クライアントを使用して、実装されます。たとえば、カスタムヘッダーを追加したり、Transport Layer Security (TLS) 認証の設定オプションを有効にしたりすることができます。詳細は、「Apicurio Registry Java SDK の設定」 を参照してください。

8.1.2. Typescript

アプリケーションの package.json ファイルに正しい依存関係を追加することで、Apicurio Registry Typescript SDK にアクセスできます (node.js アプリケーションを想定)。

https://www.npmjs.com/package/@apicurio/apicurio-registry-sdk

8.1.3. Python

Python プロジェクトに正しい依存関係を追加することで、Apicurio Registry Python SDK にアクセスできます (pypi を使用していると仮定します)。

https://pypi.org/project/apicurioregistrysdk/

8.1.4. Golang

プロジェクトに適切な依存関係を追加することで、Apicurio Registry Golang SDK にアクセスできます。

https://github.com/Apicurio/apicurio-registry/tree/main/go-sdk

8.2. Apicurio Registry SDK アプリケーションの作成

Apicurio Registry SDK のいずれかを使用して、Apicurio Registry に保存されているアーティファクトを管理するクライアントアプリケーションを作成できます。

8.2.1. Apicurio Registry Java SDK の使用

前提条件

  • Apicurio Registry が環境にインストールされ、実行されている。
  • Java クライアントアプリケーション用の Maven プロジェクトを作成している。詳細は、Apache Maven を参照。

手順

  1. 以下の依存関係を Maven プロジェクトに追加します。

    <dependency>
        <groupId>io.apicurio</groupId>
        <artifactId>apicurio-registry-java-sdk</artifactId>
        <version>${apicurio-registry.version}</version>
    </dependency>
    Copy to Clipboard Toggle word wrap
  2. 次のように Apicurio Registry クライアントを作成します。

    import io.vertx.core.Vertx;public class ClientExample {
    
        public static void main(String[] args) throws Exception {
            // Create a registry client
            String registryUrl = "https://my-registry.my-domain.com/apis/registry/v3"; 
    1
    
            Vertx vertx = Vertx.vertx(); 
    2
    
            VertXRequestAdapter vertXRequestAdapter = new VertXRequestAdapter(vertx);
            vertXRequestAdapter.setBaseUrl(REGISTRY_URL);
    
            RegistryClient client = new RegistryClient(vertXRequestAdapter); 
    3
    
    
            // Use client here
    
            vertx.close(); 
    4
    
        }
    }
    Copy to Clipboard Toggle word wrap
    1
    サンプルの Apicurio Registry URL https://my-registry.my-domain.com を指定すると、クライアントは自動的に /apis/registry/v3 を追加します。
    2
    新しい Vertx オブジェクト (VertxRequestAdapter で必要) を作成します。
    3
    Apicurio Registry クライアント作成時の他のオプションは、次のセクションの Java クライアント設定を参照してください。
    4
    クライアントでの作業が完了したら、Vertx オブジェクトを閉じてリソースを解放します。

クライアントが作成されると、クライアントの Apicurio Registry REST API で使用可能なすべての操作を使用できます。詳細は、Apicurio Registry REST API ドキュメント を参照してください。

8.3. Apicurio Registry Java SDK の設定

Apicurio Registry Java クライアントには、クライアントファクトリーに基づく次の設定オプションが含まれています。

Expand
表8.1 Apicurio Registry Java クライアント設定オプション
オプション説明引数

プレーンクライアント

実行中の Apicurio Registry と対話するために使用される基本的な REST クライアント。

baseUrl

カスタム設定のあるクライアント

ユーザーが提供した設定を使用する Apicurio Registry クライアント。

baseUrlMap<String Object> configs

カスタム設定および認証のあるクライアント

カスタム設定を含むマップを受け入れる Apicurio Registry クライアント。たとえば、これは、呼び出しにカスタムヘッダーを追加する場合に便利です。リクエストを認証するための認証サーバーも提供する必要があります。

baseUrl, Map<String Object> configs, Auth auth

カスタムヘッダー設定

カスタムヘッダーを設定するには、configs マップキーに apicurio.registry.request.headers 接頭辞を追加する必要があります。たとえば、Basic の値を持つ apicurio.registry.request.headers.Authorizationconfigs マップキー Basic: YWxhZGRpbjpvcGVuc2VzYW1 は、Authorization ヘッダーに同じ値を設定します。

TLS 設定オプション

以下のプロパティーを使用して、Apicurio Registry Java クライアントの Transport Layer Security (TLS) 認証を設定できます。

  • apicurio.registry.request.ssl.truststore.location
  • apicurio.registry.request.ssl.truststore.password
  • apicurio.registry.request.ssl.truststore.type
  • apicurio.registry.request.ssl.keystore.location
  • apicurio.registry.request.ssl.keystore.password
  • apicurio.registry.request.ssl.keystore.type
  • apicurio.registry.request.ssl.key.password

Apicurio Registry によって、Java で書かれた Kafka プロデューサーおよびコンシューマーアプリケーションのクライアントシリアライザー/デシリアライザー (SerDes) が提供されます。Kafka プロデューサーアプリケーションは、シリアライザーを使用して、特定のイベントスキーマに準拠するメッセージをエンコードします。Kafka コンシューマーアプリケーションはデシリアライザーを使用して、特定のスキーマ ID に基づいてメッセージが適切なスキーマを使用してシリアライズされたことを検証します。これにより、スキーマが一貫して使用されるようにし、実行時にデータエラーが発生しないようにします。

この章では、プロデューサーおよびコンシューマークライアントアプリケーションで Kafka クライアント SerDes を使用する方法を説明します。

前提条件

  • 1章Apicurio Registry の概要 を読んでいる。
  • Apicurio Registry をインストールしている。
  • Kafka プロデューサーおよびコンシューマークライアントアプリケーションを作成している。

9.1. Kafka クライアントアプリケーションと Apicurio Registry

Apicurio Registry は、クライアントアプリケーション設定からスキーマ管理を分離します。クライアントコードに URL を指定すると、Java クライアントアプリケーションが Apicurio Registry からスキーマを使用できます。

スキーマを Apicurio Registry に保存して、クライアントアプリケーションから参照されるメッセージをシリアライズおよびデシリアライズして、送受信するメッセージがそれらのスキーマと互換性があることを確認できます。Kafka クライアントアプリケーションは、実行時に Apicurio Registry からスキーマをプッシュまたはプルできます。

スキーマは進化するので、Apicurio Registry でルールを定義できます。たとえば、スキーマの変更が有効で、アプリケーションによって使用される以前のバージョンとの互換性を維持するようにします。Apicurio Registry は、変更済みのスキーマと以前のスキーマバージョンを比較することで、互換性をチェックします。

Apicurio Registry スキーマテクノロジー

Apicurio Registry は、以下のようなスキーマテクノロジーのスキーマレジストリーサポートを提供します。

  • Avro
  • Protobuf
  • JSON Schema

これらのスキーマテクノロジーは、Apicurio Registry によって提供される Kafka クライアントのシリアライザー/デシリアライザー (SerDes) サービスを介してクライアントアプリケーションで使用できます。Apicurio Registry が提供する SerDes クラスの成熟度と使用法はさまざまです。以降のセクションでは、各スキーマタイプの詳細を提供します。

プロデューサースキーマの設定

プロデューサークライアントアプリケーションは、シリアライザーを使用して、特定のブローカートピックに送信するメッセージを正しいデータ形式にします。

プロデューサーがシリアル化に Apicurio Registry を使用できるようにするには:

スキーマを登録したら、Kafka および Apicurio Registry を開始するときに、スキーマにアクセスして、プロデューサーにより Kafka ブローカートピックに送信されるメッセージをフォーマットできます。または、設定に応じて、プロデューサーは最初の使用時にスキーマを自動的に登録できます。

スキーマがすでに存在する場合、Apicurio Registry に定義される互換性ルールに基づいて、レジストリー REST API を使用して新バージョンのスキーマを作成できます。バージョンは、スキーマの進化にともなう互換性チェックに使用します。グループ ID、アーティファクト ID、およびバージョンは、スキーマを識別する一意のタプルを表します。

コンシューマースキーマの設定

コンシューマークライアントアプリケーションは、デシリアライザーを使用することで、そのアプリケーションが消費するメッセージを特定のブローカートピックから正しいデータ形式にします。

コンシューマーが逆シリアル化に Apicurio Registry を使用できるようにするには:

コンテンツ ID を使用したスキーマの取得

デフォルトでは、スキーマは、消費されるメッセージで指定されるコンテンツ ID (アーティファクトバージョンの コンテンツ に固有の ID ですが、バージョン自体に固有ではありません) を使用して、デシリアライザーによって Apicurio Registry から取得されます。スキーマコンテンツ ID は、プロデューサーアプリケーションの設定に応じて、メッセージヘッダーまたはメッセージペイロードに配置できます。デフォルトでは、コンテンツ ID はメッセージ本文に配置されます。

メッセージペイロード内でコンテンツ ID を見つける場合、データの形式は、コンシューマーへの信号として使用されるマジックバイトで始まり、その後にコンテンツ ID、そして通常のメッセージデータが続きます。以下に例を示します。

# ...
[MAGIC_BYTE]
[CONTENT_ID]
[MESSAGE DATA]
Copy to Clipboard Toggle word wrap

これで、Kafka および Apicurio Registry を開始するとき、スキーマにアクセスして、Kafka ブローカートピックから受信するメッセージをフォーマットできます。

グローバル ID を使用したスキーマの取得

または、アーティファクトバージョンの一意の ID であるグローバル ID に基づいて、Apicurio Registry からスキーマを取得するように設定することもできます。contentID の代わりにグローバル ID を使用する場合も、同じオプションが利用できます。グローバル ID は、メッセージヘッダーまたはメッセージ本文 (デフォルト) で送信できます。

メッセージペイロードでグローバル ID を見つけるとき、データの形式は、コンシューマーへの信号として使用されるマジックバイトで始まり、通常通りグローバル ID とメッセージデータが続きます。以下に例を示します。

# ...
[MAGIC_BYTE]
[GLOBAL_ID]
[MESSAGE DATA]
Copy to Clipboard Toggle word wrap

9.2. Apicurio Registry でスキーマを検索するためのストラテジー

Kafka クライアントのシリアライザーは 検索ストラテジー を使用して、メッセージスキーマが Apicurio Registry に登録されるアーティファクト ID およびグローバル ID を決定します。特定のトピックとメッセージについて、ArtifactReferenceResolverStrategy Java インターフェイスのさまざまな実装を使用して、レジストリー内のアーティファクトへの参照を返すことができます。

各ストラテジーのクラスは、io.apicurio.registry.serde.strategy パッケージに含まれています。Avro SerDes の特定のストラテジークラスは、io.apicurio.registry.serde.avro.strategy package に含まれています。デフォルトのストラテジー、TopicIdStrategy は、メッセージを受信する Kafka トピックと同じ名前の Apicurio Registry アーティファクトを検索します。

public ArtifactReference artifactReference(String topic, boolean isKey, T schema) {
        return ArtifactReference.builder()
                .groupId(null)
                .artifactId(String.format("%s-%s", topic, isKey ? "key" : "value"))
                .build();
Copy to Clipboard Toggle word wrap

  • topic パラメーターは、メッセージを受信する Kafka トピックの名前です。
  • isKey パラメーターは、メッセージキーがシリアライズされている場合は true であり、メッセージ値がシリアライズされている場合は false です。
  • schema パラメーターは、シリアライズ/デシリアライズされたメッセージのスキーマです。
  • 返される ArtifactReference には、スキーマが登録されているアーティファクト ID が含まれています。

使用する検索アップストラテジーは、スキーマを保存する方法と場所によって異なります。たとえば、同じ Avro メッセージタイプを持つ Kafka トピックが複数ある場合、レコード ID を使用するストラテジーを使用することがあります。

アーティファクトリーゾルバーストラテジー

アーティファクトリーゾルバーストラテジーは、Kafka トピックおよびメッセージ情報を Apicurio Registry のアーティファクトにマップする方法を提供します。マッピングの共通規則は、Kafka メッセージのキーと値のどちらにシリアライザーを使用するかによって、Kafka トピック名と key または value を結合することです。

ただし、Apicurio Registry によって提供されるストラテジーを使用するか、io.apicurio.registry.serde.strategy.ArtifactReferenceResolverStrategy を実装するカスタム Java クラスを作成することにより、マッピングに代替規則を使用できます。

アーティファクトへの参照を返すストラテジー

Apicurio Registry は、ArtifactReferenceResolverStrategy の実装に基づいてアーティファクトへの参照を返すために、次のストラテジーを提供します。

RecordIdStrategy
スキーマのフルネームを使用する Avro 固有のストラテジー。
TopicRecordIdStrategy
トピック名およびスキーマのフルネームを使用する Avro 固有のストラテジー。
TopicIdStrategy
トピック名と、key または value 接尾辞を使用するデフォルトストラテジー。
SimpleTopicIdStrategy
トピック名のみを使用する単純なストラテジー。
DefaultSchemaResolver インターフェイス

デフォルトのスキーマリゾルバーは、アーティファクトリーゾルバーストラテジーによって提供されるアーティファクト参照の下に登録されたスキーマの特定バージョンを見つけて識別します。すべてのアーティファクトのすべてのバージョンには、グローバルで一意の識別子が 1 つだけあり、それを使用してそのアーティファクトの内容を取得できます。このグローバル ID はすべての Kafka メッセージに含まれていいるため、デシリアライザーは Apicurio Registry からスキーマを適切に取得できます。

デフォルトのスキーマリゾルバーは、既存のアーティファクトバージョンを検索できます。見つからない場合は、使用するストラテジーに応じて登録できます。io.apicurio.registry.resolver.SchemaResolver を実装するカスタム Java クラスを作成することにより、独自のストラテジーを提供することもできます。ただし、DefaultSchemaResolver を使用して、代わりに設定プロパティーを指定することを推奨します。

レジストリー検索オプションの設定

DefaultSchemaResolver を使用する場合、アプリケーションのプロパティーを使用してその動作を設定できます。次の表は、一般的に使用される例を示しています。

Expand
表9.1 Apicurio Registry ルックアップ設定オプション
プロパティー説明デフォルト

apicurio.registry.find-latest

boolean

シリアライザーが対応するグループ ID およびアーティファクト ID のレジストリー内で最新のアーティファクトの検索を試行するかどうかを指定します。

false

apicurio.registry.use-id

String

指定された ID を Kafka に書き込むようシリアライザーに指示し、この ID を使用してスキーマを見つけるようにデシリアライザーに指示します。

なし

apicurio.registry.auto-register

boolean

シリアライザーがレジストリーでアーティファクトを作成しようとするかどうかを指定します。JSON スキーマシリアライザーはこれをサポートしません。

false

apicurio.registry.check-period-ms

String

グローバル ID をキャッシュする期間をミリ秒単位で指定します。設定されていない場合は、グローバル ID は毎回フェッチされます。

None

9.3. Apicurio Registry にスキーマを登録する

スキーマを Apache Avro などの適切な形式で定義したら、スキーマを Apicurio Registry に追加できます。

以下の方法を使用してスキーマを追加できます。

  • Apicurio Registry Web コンソール
  • Apicurio Registry REST API を使用した curl コマンド
  • Apicurio Registry に付属の Maven プラグイン
  • クライアントコードに加えられたスキーマ設定

スキーマを登録するまで、クライアントアプリケーションは Apicurio Registry を使用できません。

Apicurio Registry Web コンソール

Apicurio Registry がインストールされると、ui エンドポイントから Web コンソールに接続できます。

http://MY-REGISTRY-URL/ui

コンソールから、スキーマを追加、表示、および設定できます。また、レジストリーに無効なコンテンツが追加されないようにするルールを作成することもできます。

curl コマンドの例
 curl -X POST -H "Content-type: application/json; artifactType=AVRO" \
   -H "X-Registry-ArtifactId: share-price" \ 
1

   --data '{
     "type":"record",
     "name":"price",
     "namespace":"com.example",
     "fields":[{"name":"symbol","type":"string"},
     {"name":"price","type":"string"}]}'
   https://my-cluster-my-registry-my-project.example.com/apis/registry/v3/groups/my-group/artifacts -s 
2
Copy to Clipboard Toggle word wrap
1
シンプルな Avro スキーマアーティファクト。
2
Apicurio Registry を公開する OpenShift ルート名。
Maven プラグインの例
<plugin>
  <groupId>io.apicurio</groupId>
  <artifactId>apicurio-registry-maven-plugin</artifactId>
  <version>${apicurio.version}</version>
  <executions>
      <execution>
        <phase>generate-sources</phase>
        <goals>
            <goal>register</goal>  
1

        </goals>
        <configuration>
            <registryUrl>http://REGISTRY-URL/apis/registry/v3</registryUrl> 
2

            <artifacts>
                <artifact>
                    <groupId>TestGroup</groupId> 
3

                    <artifactId>FullNameRecord</artifactId>
                    <file>${project.basedir}/src/main/resources/schemas/record.avsc</file>
                    <ifExists>FAIL</ifExists>
                </artifact>
                <artifact>
                    <groupId>TestGroup</groupId>
                    <artifactId>ExampleAPI</artifactId> 
4

                    <artifactType>GRAPHQL</artifactType>
                    <file>${project.basedir}/src/main/resources/apis/example.graphql</file>
                    <ifExists>FIND_OR_CREATE_VERSION</ifExists>
                    <canonicalize>true</canonicalize>
                </artifact>
            </artifacts>
        </configuration>
    </execution>
  </executions>
 </plugin>
Copy to Clipboard Toggle word wrap
1
スキーマアーティファクトをレジストリーにアップロードするための実行目標として register を指定します。
2
../apis/registry/v3 エンドポイントで Apicurio Registry URL を指定します。
3
Apicurio Registry アーティファクトグループ ID を指定します。
4
指定したグループ ID、アーティファクト ID、および場所を使用して複数のアーティファクトをアップロードできます。

9.4. Kafka コンシューマークライアントからのスキーマの使用

この手順では、Apicurio Registry からのスキーマを使用するように Java で書かれた Kafka コンシューマークライアントを設定する方法を説明します。

前提条件

  • Apicurio Registry がインストールされている
  • スキーマは Apicurio Registry に登録されている

手順

  1. Apicurio Registry の URL を使用してクライアントを設定します。以下に例を示します。

    String registryUrl = "https://registry.example.com/apis/registry/v3";
    Properties props = new Properties();
    props.putIfAbsent(SerdeConfig.REGISTRY_URL, registryUrl);
    Copy to Clipboard Toggle word wrap
  2. Apicurio Registry デシリアライザーを使用してクライアントを設定します。以下に例を示します。

    // Configure Kafka settings
    props.putIfAbsent(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, SERVERS);
    props.putIfAbsent(ConsumerConfig.GROUP_ID_CONFIG, "Consumer-" + TOPIC_NAME);
    props.putIfAbsent(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, "true");
    props.putIfAbsent(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG, "1000");
    props.putIfAbsent(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
    // Configure deserializer settings
    props.putIfAbsent(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG,
        AvroKafkaDeserializer.class.getName()); 
    1
    
    props.putIfAbsent(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,
        AvroKafkaDeserializer.class.getName()); 
    2
    Copy to Clipboard Toggle word wrap
    1
    Apicurio Registry が提供するデシリアライザー。
    2
    デシリアライズは Apache Avro JSON 形式です。

9.5. Kafka プロデューサークライアントからのスキーマの使用

この手順では、Apicurio Registry からのスキーマを使用するように Java で書かれた Kafka producer クライアントを設定する方法を説明します。

前提条件

  • Apicurio Registry がインストールされている
  • スキーマは Apicurio Registry に登録されている

手順

  1. Apicurio Registry の URL を使用してクライアントを設定します。以下に例を示します。

    String registryUrl = "https://registry.example.com/apis/registry/v3";
    Properties props = new Properties();
    props.putIfAbsent(SerdeConfig.REGISTRY_URL, registryUrl);
    Copy to Clipboard Toggle word wrap
  2. 設定するシリアライザーを使用してクライアントを設定し、Apicurio Registry でスキーマを検索するストラテジーを設定します。以下に例を示します。

    props.put(CommonClientConfigs.BOOTSTRAP_SERVERS_CONFIG, "my-cluster-kafka-bootstrap:9092");
    props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, AvroKafkaSerializer.class.getName()); 
    1
    
    props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, AvroKafkaSerializer.class.getName()); 
    2
    
    props.put(SerdeConfig.FIND_LATEST_ARTIFACT, Boolean.TRUE); 
    3
    Copy to Clipboard Toggle word wrap
    1
    Apicurio Registry により提供されるメッセージキーのシリアライザー。
    2
    Apicurio Registry によって提供されるメッセージ値のシリアライザー。
    3
    スキーマのグローバル ID を検索する検索ストラテジー。

9.6. Kafka Streams アプリケーションからのスキーマの使用

この手順では、Apicurio Registry からの Apache Avro スキーマを使用するように Java で書かれた Kafka Streams クライアントを設定する方法を説明します。

前提条件

  • Apicurio Registry がインストールされている
  • スキーマは Apicurio Registry に登録されている

手順

  1. Apicurio Registry URL を使用して Java クライアントを作成および設定します。

    String registryUrl = "https://registry.example.com/apis/registry/v3";
    
    RegistryService client = RegistryClient.cached(registryUrl);
    Copy to Clipboard Toggle word wrap
  2. シリアライザーおよびデシリアライザーを設定します。

    Serializer<LogInput> serializer = new AvroKafkaSerializer<LogInput>(); 
    1
    
    
    Deserializer<LogInput> deserializer = new AvroKafkaDeserializer <LogInput>(); 
    2
    
    
    Serde<LogInput> logSerde = Serdes.serdeFrom(
        serializer,
        deserializer
    );
    
    Map<String, Object> config = new HashMap<>();
    config.put(SerdeConfig.REGISTRY_URL, registryUrl);
    config.put(AvroSerdeConfig.USE_SPECIFIC_AVRO_READER, true);
    logSerde.configure(config, false); 
    3
    Copy to Clipboard Toggle word wrap
    1
    Apicurio Registry が提供する Avro シリアライザー。
    2
    Apicurio Registry が提供する Avro デシリアライザー。
    3
    Avro 形式でデシリアライズ用の Apicurio Registry URL および Avro リーダーを設定します。
  3. Kafka Streams クライアントを作成します。

    KStream<String, LogInput> input = builder.stream(
        INPUT_TOPIC,
        Consumed.with(Serdes.String(), logSerde)
    );
    Copy to Clipboard Toggle word wrap

第10章 Java クライアントでの Kafka シリアライザー/デシリアライザーの設定

この章では、プロデューサーおよびコンシューマー Java クライアントアプリケーションで Kafka シリアライザー/デシリアライザー (SerDes) を設定する方法を詳説します。

このセクションの定数例を使用して、特定のクライアントシリアライザー/デシリアライザー (SerDes) サービスおよびスキーマ検索ストラテジーを直接クライアントアプリケーションに設定できます。

以下のセクションでは、一般的に使用される SerDes 定数および設定オプションの例を紹介します。

SerDes サービスの設定
public class SerdeConfig {

   public static final String REGISTRY_URL = "apicurio.registry.url"; 
1

   public static final String ID_HANDLER = "apicurio.registry.id-handler"; 
2
Copy to Clipboard Toggle word wrap
  1. Apicurio Registry の必須 URL。
  2. ID 処理を拡張することで、他の ID 形式をサポートし、その形式に Apicurio Registry SerDes サービスとの互換性を持たせます。たとえば、Confluent の ID 形式とも互換性のあるデフォルトの ID 形式 Integer から Long に変更できます。
SerDes 検索ストラテジーの設定
public class SerdeConfig {

   public static final String ARTIFACT_RESOLVER_STRATEGY = "apicurio.registry.artifact-resolver-strategy"; 
1

   public static final String SCHEMA_RESOLVER = "apicurio.registry.schema-resolver"; 
2

...
Copy to Clipboard Toggle word wrap
1 1
アーティファクトリーゾルバーストラテジーを実装し、Kafka SerDes とアーティファクト ID の間をマッピングする Java クラス。デフォルトはトピック ID ストラテジーです。これはシリアライザークラスによってのみ使用されます。
2 2
スキーマリゾルバーを実装する Java クラス。デフォルトは DefaultSchemaResolver です。これは、シリアライザーおよびデシリアライザークラスによって使用されます。
Kafka コンバーターの設定
public class SerdeBasedConverter<S, T> extends SchemaResolverConfigurer<S, T> implements Converter, Closeable {

   public static final String REGISTRY_CONVERTER_SERIALIZER_PARAM = "apicurio.registry.converter.serializer"; 
1

   public static final String REGISTRY_CONVERTER_DESERIALIZER_PARAM = "apicurio.registry.converter.deserializer"; 
2
Copy to Clipboard Toggle word wrap
  1. Apicurio Registry Kafka コンバーターと使用するために必要なシリアライザー。
  2. Apicurio Registry Kafka コンバーターで使用するために必要なデシリアライザー。
さまざまなスキーマタイプの設定

さまざまなスキーマ技術に SerDes を設定する方法は、以下を参照してください。

10.2. Apicurio Registry シリアライザー/デシリアライザーの設定プロパティー

このセクションでは、Apicurio Registry Kafka シリアライザー/デシリアライザー (SerDes) の Java 設定プロパティーに関する参照情報を提供します。

SchemaResolver インターフェイス

Apicurio Registry SerDes は、レジストリーへのアクセスを抽象化し、サポートされるすべての形式の SerDes クラスに同じ検索ロジックを適用する SchemaResolver インターフェイスをベースとしています。

Expand
表10.1 SchemaResolver インターフェイスの設定プロパティー
Constantプロパティー説明デフォルト

SCHEMA_RESOLVER

apicurio.registry.schema-resolver

シリアライザーおよびデシリアライザーによって使用されます。SchemaResolver を実装する完全修飾 Java クラス名。

String

io.apicurio.registry.resolver.DefaultSchemaResolver

注記

DefaultSchemaResolver が推奨され、ほとんどのユースケースに役立つ機能を提供します。一部の高度なユースケースでは、SchemaResolver のカスタム実装を使用する場合があります。

DefaultSchemaResolver クラス

DefaultSchemaResolver を使用して、次のような機能を設定できます。

  • レジストリー API へのアクセス
  • レジストリーでアーティファクトを検索する方法
  • Kafka との間でアーティファクト情報を読み書きする方法
  • デシリアライザーのフォールバックオプション
レジストリー API アクセスオプションの設定

DefaultSchemaResolver は、コアレジストリー API へのアクセスを設定するために次のプロパティーを提供します。

Expand
表10.2 レジストリー API にアクセスするための設定プロパティー
Constantプロパティー説明デフォルト

REGISTRY_URL

apicurio.registry.url

シリアライザーおよびデシリアライザーによって使用されます。レジストリー API にアクセスするための URL。

String

なし

AUTH_TOKEN_ENDPOINT

apicurio.registry.auth.service.token.endpoint

シリアライザーおよびデシリアライザーによって使用されます。トークンエンドポイントの URL。

String

なし

AUTH_CLIENT_ID

apicurio.registry.auth.client.id

シリアライザーおよびデシリアライザーによって使用されます。認証サービスにアクセスするためのクライアント ID。OAuth クライアントクレデンシャルフローを使用してセキュアなレジストリーにアクセスする際に必須です。

String

なし

AUTH_CLIENT_SECRET

apicurio.registry.auth.client.secret

シリアライザーおよびデシリアライザーによって使用されます。認証サービスにアクセスするためのクライアントシークレット。OAuth クライアントクレデンシャルフローを使用してセキュアなレジストリーにアクセスする際に必須です。

String

なし

AUTH_USERNAME

apicurio.registry.auth.username

シリアライザーおよびデシリアライザーによって使用されます。レジストリーにアクセスするためのユーザー名HTTP Basic 認証を使用してセキュアなレジストリーにアクセスする際に必須です。

String

なし

AUTH_PASSWORD

apicurio.registy.auth.password

シリアライザーおよびデシリアライザーによって使用されます。レジストリーにアクセスするためのパスワードHTTP Basic 認証を使用してセキュアなレジストリーにアクセスする際に必須です。

String

なし

レジストリー検索オプションの設定

DefaultSchemaResolver は、次のプロパティーを使用して、Apicurio Registry でアーティファクトを検索する方法を設定します。

Expand
表10.3 レジストリーアーティファクト検索の設定プロパティー
Constantプロパティー説明デフォルト

ARTIFACT_RESOLVER_STRATEGY

apicurio.registry.artifact-resolver-strategy

シリアライザーによってのみ使用されます。ArtifactReferenceResolverStrategy を実装し、各 Kafka メッセージを ArtifactReference (groupIdartifactId、および version) にマップする完全修飾 Java クラス名。たとえば、デフォルトのストラテジーはトピック名をスキーマ artifactId として使用します。

String

io.apicurio.registry.serde.strategy.TopicIdStrategy

EXPLICIT_ARTIFACT_GROUP_ID

apicurio.registry.artifact.group-id

シリアライザーによってのみ使用されます。アーティファクトのクエリーまたは作成に使用される groupId を設定します。ArtifactResolverStrategy によって返される groupId をオーバーライドします。

String

なし

EXPLICIT_ARTIFACT_ID

apicurio.registry.artifact.artifact-id

シリアライザーによってのみ使用されます。アーティファクトのクエリーまたは作成に使用される artifactId を設定します。ArtifactResolverStrategy によって返される artifactId をオーバーライドします。

String

なし

EXPLICIT_ARTIFACT_VERSION

apicurio.registry.artifact.version

シリアライザーによってのみ使用されます。アーティファクトの問い合わせまたは作成に使用されるアーティファクトバージョンを設定します。ArtifactResolverStrategy によって返されるバージョンをオーバーライドします。

String

なし

FIND_LATEST_ARTIFACT

apicurio.registry.find-latest

シリアライザーによってのみ使用されます。シリアライザーが対応するグループ ID およびアーティファクト ID のレジストリー内で最新のアーティファクトの検索を試行するかどうかを指定します。

boolean

false

AUTO_REGISTER_ARTIFACT

apicurio.registry.auto-register

シリアライザーによってのみ使用されます。シリアライザーがレジストリーでアーティファクトを作成しようとするかどうかを指定します。JSON スキーマシリアライザーはこの機能をサポートしません。

boolean, boolean String

false

DEREFERENCE_SCHEMA

apicurio.registry.dereference-schema

スキーマを逆参照するための serdes を示すために使用されます。これは 2 つの異なる状況で使用され、スキーマが登録されると、serdes に対してサーバーから逆参照されたスキーマを取得するよう指示します。これは、レジストリーに登録する前にスキーマを逆参照するようにシリアライザーに指示するためにも使用されますが、これは Avro でのみサポートされています。

boolean

false

AUTO_REGISTER_ARTIFACT_IF_EXISTS

apicurio.registry.auto-register.if-exists

シリアライザーによってのみ使用されます。アーティファクトがすでに存在するためにアーティファクトの作成で競合が発生した場合のクライアントの動作を設定します。使用可能な値は、FAILUPDATERETURN、または RETURN_OR_UPDATE です。

String

RETURN_OR_UPDATE

CHECK_PERIOD_MS

apicurio.registry.check-period-ms

シリアライザーおよびデシリアライザーによって使用されます。自動エビクションの前にアーティファクトをキャッシュする時間を指定します (ミリ秒)。ゼロに設定すると、アーティファクトが毎回フェッチされます。

java.time.Duration, non-negative Number, or integer String

30000

RETRY_BACKOFF_MS

apicurio.registry.retry-backoff-ms

シリアライザーおよびデシリアライザーによって使用されます。レジストリーからスキーマを取得できない場合は、何度も再試行されることがあります。この設定オプションは、再試行間の遅延 (ミリ秒) を制御します。

java.time.Duration, non-negative Number, or integer String

300

RETRY_COUNT

apicurio.registry.retry-count

シリアライザーおよびデシリアライザーによって使用されます。レジストリーからスキーマを取得できない場合は、何度も再試行されることがあります。この設定オプションは、再試行の回数を制御します。

non-negative Number, or integer String

3

USE_ID

apicurio.registry.use-id

シリアライザーおよびデシリアライザーによって使用されます。指定された IdOption をアーティファクトの識別子として使用するように設定します。オプションは globalIdcontentId です。指定された ID を Kafka に書き込むようシリアライザーに指示し、この ID を使用してスキーマを見つけるようにデシリアライザーに指示します。

String

contentId

Kafka でレジストリーアーティファクトを読み書きするための設定

DefaultSchemaResolver は、次のプロパティーを使用して、アーティファクト情報の Kafka への書き込みおよび Kafka からの読み取り方法を設定します。

Expand
表10.4 Kafka でアーティファクト情報を読み書きするための設定プロパティー
Constantプロパティー説明デフォルト

ENABLE_HEADERS

apicurio.registry.headers.enabled

シリアライザーおよびデシリアライザーによって使用されます。メッセージペイロードではなく、Kafka メッセージヘッダーに対してアーティファクト識別子を読み書きするように設定します。

boolean

false

HEADERS_HANDLER

apicurio.registry.headers.handler

シリアライザーおよびデシリアライザーによって使用されます。HeadersHandler を実装し、Kafka メッセージヘッダーに対してアーティファクト識別子を読み書きする完全修飾 Java クラス名。

String

io.apicurio.registry.serde.headers.DefaultHeadersHandler

ID_HANDLER

apicurio.registry.id-handler

シリアライザーおよびデシリアライザーによって使用されます。IdHandler を実装し、メッセージペイロードに対してアーティファクト識別子を読み書きするクラスの完全修飾 Java クラス名。デフォルトは、メッセージペイロードに contentId が含まれる 4 バイト形式です。

String

io.apicurio.registry.serde.Default4ByteIdHandler

デシリアライザーのフォールバックオプションの設定

DefaultSchemaResolver は、次のプロパティーを使用して、すべてのデシリアライザーのフォールバックプロバイダーを設定します。

Expand
表10.5 デシリアライザーのフォールバックプロバイダーの設定プロパティー
Constantプロパティー説明デフォルト

FALLBACK_ARTIFACT_PROVIDER

apicurio.registry.fallback.provider

デシリアライザーによってのみ使用されます。デシリアライズに使用されるアーティファクトを解決するための FallbackArtifactProvider のカスタム実装を設定します。FallbackArtifactProvider は、検索に失敗した場合にレジストリーから取得するフォールバックアーティファクトを設定します。

String

io.apicurio.registry.serde.fallback.DefaultFallbackArtifactProvider

DefaultFallbackArtifactProvider は、次のプロパティーを使用して、デシリアライザーのフォールバックオプションを設定します。

Expand
表10.6 デシリアライザーのフォールバックオプションの設定プロパティー
Constantプロパティー説明デフォルト

FALLBACK_ARTIFACT_ID

apicurio.registry.fallback.artifact-id

デシリアライザーによってのみ使用されます。デシリアライズに使用されるアーティファクトを解決するためのフォールバックとして使用される artifactId を設定します。

String

なし

FALLBACK_ARTIFACT_GROUP_ID

apicurio.registry.fallback.group-id

デシリアライザーによってのみ使用されます。デシリアライズに使用されるグループのフォールバックとして使用される groupId を設定します。

String

なし

FALLBACK_ARTIFACT_VERSION

apicurio.registry.fallback.version

デシリアライザーによってのみ使用されます。デシリアライズに使用されるアーティファクトを解決するために使用されるバージョンを設定します。

String

なし

関連情報

  • 詳細は、SerdeConfig Java class を参照してください。
  • アプリケーションプロパティーを Java システムプロパティーとして設定することも、Quarkus application.properties ファイルに含めることもできます。詳細は、Quarkus のドキュメント を参照してください。

10.3. さまざまなクライアントシリアライザー/デシリアライザータイプの設定方法

Kafka クライアントアプリケーションでスキーマを使用する場合は、ユースケースに応じて、使用する特定のスキーマタイプを選択する必要があります。Apicurio Registry は、Apache Avro、JSON スキーマ、および Google Protobuf 用の SerDe Java クラスを提供します。以下のセクションでは、各タイプを使用するように Kafka アプリケーションを設定する方法を説明します。

また、Kafka を使用してカスタムシリアライザーおよびデシリアライザークラスを実装し、Apicurio Registry REST Java クライアントを使用して Apicurio Registry 機能を活用することもできます。

シリアライザー/デシリアライザーの Kafka アプリケーション設定

Kafka アプリケーションで Apicurio Registry によって提供される SerDe クラスを使用するには、正しい設定プロパティーを設定する必要があります。以下の簡単な Avro の例は、Kafka プロデューサーアプリケーションでシリアライザーを設定する方法と、Kafka コンシューマーアプリケーションでデシリアライザーを設定する方法を示しています。

Kafka プロデューサーのシリアライザー設定の例

// Create the Kafka producer
private static Producer<Object, Object> createKafkaProducer() {
    Properties props = new Properties();

    // Configure standard Kafka settings
    props.putIfAbsent(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, SERVERS);
    props.putIfAbsent(ProducerConfig.CLIENT_ID_CONFIG, "Producer-" + TOPIC_NAME);
    props.putIfAbsent(ProducerConfig.ACKS_CONFIG, "all");

    // Use Apicurio Registry-provided Kafka serializer for Avro
    props.putIfAbsent(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
    props.putIfAbsent(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, AvroKafkaSerializer.class.getName());

    // Configure the Apicurio Registry location
    props.putIfAbsent(SerdeConfig.REGISTRY_URL, REGISTRY_URL);

    // Register the schema artifact if not found in the registry.
    props.putIfAbsent(SerdeConfig.AUTO_REGISTER_ARTIFACT, Boolean.TRUE);

    // Create the Kafka producer
    Producer<Object, Object> producer = new KafkaProducer<>(props);
    return producer;
}
Copy to Clipboard Toggle word wrap

Kafka コンシューマーのデシリアライザー設定の例

// Create the Kafka consumer
private static KafkaConsumer<Long, GenericRecord> createKafkaConsumer() {
    Properties props = new Properties();

    // Configure standard Kafka settings
    props.putIfAbsent(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, SERVERS);
    props.putIfAbsent(ConsumerConfig.GROUP_ID_CONFIG, "Consumer-" + TOPIC_NAME);
    props.putIfAbsent(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, "true");
    props.putIfAbsent(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG, "1000");
    props.putIfAbsent(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");

    // Use Apicurio Registry-provided Kafka deserializer for Avro
    props.putIfAbsent(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
    props.putIfAbsent(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, AvroKafkaDeserializer.class.getName());

    // Configure the Apicurio Registry location
    props.putIfAbsent(SerdeConfig.REGISTRY_URL, REGISTRY_URL);

    // No other configuration needed because the schema globalId the deserializer uses is sent
    // in the payload. The deserializer extracts the globalId and uses it to look up the schema
    // from the registry.

    // Create the Kafka consumer
    KafkaConsumer<Long, GenericRecord> consumer = new KafkaConsumer<>(props);
    return consumer;
}
Copy to Clipboard Toggle word wrap

10.3.1. Apicurio Registry を使用して Avro SerDes を設定する

このトピックでは、Apache Avro の Kafka クライアントシリアライザーおよびデシリアライザー (SerDes) クラスを使用する方法を説明します。

Apicurio Registry は、Avro 用に次の Kafka クライアント SerDes クラスを提供します。

  • io.apicurio.registry.serde.avro.AvroKafkaSerializer
  • io.apicurio.registry.serde.avro.AvroKafkaDeserializer

Avro シリアライザーの設定

以下のように Avro シリアライザークラスを設定することができます。

  • Apicurio Registry URL
  • アーティファクトリーゾルバーストラテジー
  • ID の場所
  • ID エンコーディング
  • Avro datum プロバイダー
  • Avro エンコーディング

ID の場所

シリアライザーは、スキーマの一意の ID を Kafka メッセージの一部として渡し、コンシューマーがデシリアライズに正しいスキーマを使用できるようにします。ID は、メッセージのペイロードまたはメッセージヘッダーに存在できます。デフォルトの場所はメッセージペイロードです。メッセージヘッダーで ID を送信するには、以下の設定プロパティーを設定します。

props.putIfAbsent(SerdeConfig.ENABLE_HEADERS, "true")
Copy to Clipboard Toggle word wrap

プロパティー名は apicurio.registry.headers.enabled です。

ID エンコーディング

Kafka メッセージボディーに渡すときにスキーマ ID をエンコードする方法をカスタマイズできます。apicurio.registry.id-handler 設定プロパティーを、io.apicurio.registry.serde.IdHandler インターフェイスを実装するクラスに設定します。Apicurio Registry は、次の実装を提供します。

  • io.apicurio.registry.serde.Default4ByteIdHandler: ID を 4 バイト長として保存します。
  • io.apicurio.registry.serde.Legacy8ByteIdHandler: ID を 8 バイト整数として保存します。

Apicurio Registry はスキーマ ID を long として表しますが、従来の理由、または他のレジストリーまたは SerDe クラスとの互換性のため、ID の送信時に 4 バイトの使用が推奨される場合があります。

Avro datum プロバイダー

Avro は、データを読み書きするためのさまざまなデータライターとリーダーを提供します。Apicurio Registry は、次の 3 つの異なるタイプをサポートしています。

  • Generic
  • Specific
  • Reflect

Apicurio Registry AvroDatumProvider は、使用されるタイプの抽象概念であり、DefaultAvroDatumProvider がデフォルトで使用されます。

以下の設定オプションを設定できます。

  • apicurio.registry.avro-datum-provider: AvroDatumProvider 実装の完全修飾 Java クラス名を指定します (例えば、io.apicurio.registry.serde.avro.ReflectAvroDatumProvider)。
  • apicurio.registry.use-specific-avro-reader: DefaultAvroDatumProvider を使用するときに特定のタイプを使用するには、true に設定します

Avro エンコーディング

Avro を使用してデータをシリアライズする場合は、Avro バイナリーエンコーディング形式を使用して、データを可能な限り効率的な形式でエンコードすることができます。Avro は JSON としてデータのエンコードもサポートします。これにより、ロギングやデバッグなどの各メッセージのペイロードの検証が容易になります。

apicurio.registry.avro.encoding プロパティーを JSON または BINARY の値で設定することにより、Avro エンコーディングを設定できます。デフォルトは BINARY です。

Avro デシリアライザーの設定

Avro デシリアライザーの設定を、シリアライザーの設定と一致するように、Avro デシリアライザークラスを設定する必要があります。

  • Apicurio Registry URL
  • ID エンコーディング
  • Avro datum プロバイダー
  • Avro エンコーディング

これらの設定オプションは、シリアライザーセクションを参照してください。プロパティー名と値は同じです。

注記

デシリアライザーの設定時には、以下のオプションは必要ありません。

  • アーティファクトリーゾルバーストラテジー
  • ID の場所

デシリアライザークラスは、メッセージからこれらのオプションの値を判断できます。シリアライザーはメッセージの一部として ID を送信するため、ストラテジーは必要ありません。

ID の位置は、メッセージペイロードの先頭にあるマジックバイトを確認することで決定されます。そのバイトが見つかると、設定されたハンドラーを使用してメッセージペイロードから ID が読み取られます。マジックバイトが見つからない場合、ID はメッセージヘッダーから読み込まれます。

Avro SerDes とアーティファクトの参照

レコードがネスト化された Avro メッセージとスキーマを使用する場合に、ネストされたレコードごとに新しいアーティファクトが登録されます。たとえば、次の TradeKey スキーマには、ネストされた Exchange スキーマが含まれています。

ネストされた Exchange スキーマを持つ TradeKey スキーマ

{
  "namespace": "com.kubetrade.schema.trade",
  "type": "record",
  "name": "TradeKey",
  "fields": [
    {
      "name": "exchange",
      "type": "com.kubetrade.schema.common.Exchange"
    },
    {
      "name": "key",
      "type": "string"
    }
  ]
}
Copy to Clipboard Toggle word wrap

交換スキーマ

{
  "namespace": "com.kubetrade.schema.common",
  "type": "enum",
  "name": "Exchange",
  "symbols" : ["GEMINI"]
}
Copy to Clipboard Toggle word wrap

これらのスキーマを Avro SerDes で使用すると、Apicurio Registry に、TradeKey スキーマ用と、Exchange スキーマ用の 2 つのアーティファクトが作成されます。TradeKey スキーマを使用するメッセージがシリアライズまたはデシリアライズされるたびに、両方のスキーマが取得されるため、定義を異なるファイルに分割できます。

10.3.2. Apicurio Registry を使用して JSON スキーマ SerDes を設定する

このトピックでは、JSON スキーマの Kafka クライアントシリアライザーおよびデシリアライザー (SerDes) クラスを使用する方法を説明します。

Apicurio Registry は、JSON スキーマ用に次の Kafka クライアント SerDes クラスを提供します。

  • io.apicurio.registry.serde.jsonschema.JsonSchemaKafkaSerializer
  • io.apicurio.registry.serde.jsonschema.JsonSchemaKafkaDeserializer

Apache Avro とは異なり、JSON スキーマはシリアライズテクノロジーではなく、検証テクノロジーです。その結果、JSON スキーマの設定オプションは大きく異なります。たとえば、データは常に JSON としてエンコードされるため、エンコーディングオプションはありません。

JSON スキーマシリアライザーの設定

JSON スキーマシリアライザークラスを以下のように設定できます。

  • Apicurio Registry URL
  • アーティファクトリーゾルバーストラテジー
  • スキーマ検証

唯一の標準以外の設定プロパティーは、デフォルトで有効になっている JSON スキーマバリデーションです。これを無効にするには、apicurio.registry.serde.validation-enabled"false" に設定します。以下に例を示します。

props.putIfAbsent(SerdeConfig.VALIDATION_ENABLED, Boolean.FALSE)
Copy to Clipboard Toggle word wrap

JSON スキーマデシリアライザーの設定

JSON スキーマデシリアライザークラスを以下のように設定できます。

  • Apicurio Registry URL
  • スキーマ検証
  • データをデシリアライズするためのクラス

スキーマをロードできるように、Apicurio Registry の場所を指定する必要があります。他の設定はオプションです。

注記

デシリアライザーの検証は、シリアライザーが Kafka メッセージでグローバル ID を渡す場合にのみ機能します。これは、シリアライザーで検証が有効になっている場合にのみ発生します。

JSON スキーマの SerDes とアーティファクトの参照

JSON スキーマ SerDes はメッセージペイロードからスキーマを検出できないため、事前にスキーマアーティファクトを登録する必要があり、これはアーティファクト参照にも適用されます。

スキーマの内容に応じて、$ref の値は URL に置き換えます。SerDes はこの URL を使用して参照のスキーマを解決しようとし、主要なスキーマに対するデータの検証、ネスト化されたスキーマに対するネスト化された値の検証など、検証は通常どおりに行われます。Apicurio Registry でアーティファクトを参照するためのサポートも実装されています。

たとえば、次の citizen.json スキーマは city.json スキーマを参照ししています。

city.json スキーマを参照する citizen.json スキーマ

{
 "$id": "https://example.com/citizen.schema.json",
 "$schema": "http://json-schema.org/draft-07/schema#",
 "title": "Citizen",
 "type": "object",
 "properties": {
   "firstName": {
     "type": "string",
     "description": "The citizen's first name."
   },
   "lastName": {
     "type": "string",
     "description": "The citizen's last name."
   },
   "age": {
     "description": "Age in years which must be equal to or greater than zero.",
     "type": "integer",
     "minimum": 0
   },
   "city": {
     "$ref": "city.json"
   }
 }
}
Copy to Clipboard Toggle word wrap

city.json スキーマ

{
 "$id": "https://example.com/city.schema.json",
 "$schema": "http://json-schema.org/draft-07/schema#",
 "title": "City",
 "type": "object",
 "properties": {
   "name": {
     "type": "string",
     "description": "The city's name."
   },
   "zipCode": {
     "type": "integer",
     "description": "The zip code.",
     "minimum": 0
   }
 }
}
Copy to Clipboard Toggle word wrap

この例では、citizen に city が含まれます。Apicurio Registry では、city アーティファクトへの参照を持つ市民アーティファクトが、city.json という名前を使用して作成されます。SerDes では、citizen スキーマをフェッチすると、citizen スキーマから参照されるため、city スキーマもフェッチされます。データをシリアライズ/デシリアライズする場合、ネストされたスキーマを解決するために参照名が使用され、citizen スキーマとネストされた city スキーマに対する検証が可能になります。

10.3.3. Apicurio Registry を使用して Protobuf SerDes を設定する

このトピックでは、Google Protobuf の Kafka クライアントシリアライザーおよびデシリアライザー (SerDes) クラスを使用する方法を説明します。

Apicurio Registry は、Protobuf 用に次の Kafka クライアント SerDes クラスを提供します。

  • io.apicurio.registry.serde.protobuf.ProtobufKafkaSerializer
  • io.apicurio.registry.serde.protobuf.ProtobufKafkaDeserializer

Protobuf シリアライザーの設定

Protobuf シリアライザークラスを以下のように設定できます。

  • Apicurio Registry URL
  • アーティファクトリーゾルバーストラテジー
  • ID の場所
  • ID エンコーディング
  • スキーマ検証

これらの設定オプションの詳細は、以下のセクションを参照してください。

Protobuf デシリアライザーの設定

シリアライザーの以下の設定と一致するように、Protobuf デシリアライザークラスを設定する必要があります。

  • Apicurio Registry URL
  • ID エンコーディング

設定プロパティー名と値はシリアライザーの場合と同じです。

注記

デシリアライザーの設定時には、以下のオプションは必要ありません。

  • アーティファクトリーゾルバーストラテジー
  • ID の場所

デシリアライザークラスは、メッセージからこれらのオプションの値を判断できます。シリアライザーはメッセージの一部として ID を送信するため、ストラテジーは必要ありません。

ID の位置は、メッセージペイロードの先頭にあるマジックバイトを確認することで決定されます。そのバイトが見つかると、設定されたハンドラーを使用してメッセージペイロードから ID が読み取られます。マジックバイトが見つからない場合、ID はメッセージヘッダーから読み込まれます。

注記

Protobuf デシリアライザーは、正確な Protobuf Message 実装へデシリアライズしません。DynamicMessage インスタンスへデシリアライズします。設定しない場合は、適切な API はありません。

Protobuf SerDes とアーティファクト参照

import ステートメントを含む複雑な Protobuf メッセージが使用される場合に、インポートされた Protobuf メッセージは個別のアーティファクトとして Apicurio Registry に保存されます。次に、Apicurio Registry がメインスキーマを取得して Protobuf メッセージをチェックすると、完全なメッセージスキーマをチェックしてシリアル化できるように参照されているスキーマも取得されます。

たとえば、次の table_info.proto スキーマファイルには、インポートされた mode.proto スキーマファイルが含まれています。

インポートされた .mode.proto ファイルを含む table_info.proto ファイル

syntax = "proto3";
package sample;
option java_package = "io.api.sample";
option java_multiple_files = true;

import "sample/mode.proto";

message TableInfo {

 int32 winIndex = 1;
 Mode mode = 2;
 int32 min = 3;
 int32 max = 4;
 string id = 5;
 string dataAdapter = 6;
 string schema = 7;
 string selector = 8;
 string subscription_id = 9;
}
Copy to Clipboard Toggle word wrap

mode.proto ファイル

syntax = "proto3";
package sample;
option java_package = "io.api.sample";
option java_multiple_files = true;

enum Mode {

MODE_UNKNOWN = 0;
RAW = 1;
MERGE = 2;
DISTINCT = 3;
COMMAND = 4;
}
Copy to Clipboard Toggle word wrap

この例では、TableInfo 用と Mode 用の 2 つの Protobuf アーティファクトが Apicurio Registry に格納されます。ただし、ModeTableInfo の一部であるため、SerDes 内のメッセージをチェックするために TableInfo がフェッチされるたびに、ModeTableInfo で参照されるアーティファクトとして返されます。

第11章 Apicurio Registry アーティファクトの参照

この章では、Apicurio Registry に保存されるサポート対象のアーティファクトタイプ、状態、およびメタデータに関する参照情報を提供します。

11.1. Apicurio Registry アーティファクトタイプ

Apicurio Registry では、さまざまなスキーマおよび API アーティファクトタイプを保存して管理できます。

Expand
表11.1 Apicurio Registry アーティファクトタイプ
説明サポート対象バージョン

ASYNCAPI

AsyncAPI 仕様

2.0.02.0.63.0.0

AVRO

Apache Avro スキーマ

1.01.12

GRAPHQL

GraphQL スキーマ

*

JSON

JSON Schema

draft-04draft-072019-092020-12

KCONNECT

Apache Kafka Connect スキーマ

2.0.0

OPENAPI

OpenAPI 仕様

2.0.03.0.03.0.33.1.0

PROTOBUF

Google プロトコルバッファースキーマ

proto2proto3

WSDL

Web Services Definition Language

http://schemas.xmlsoap.org/wsdl/

XML

拡張マークアップ言語

 

XSD

XML Schema Definition

http://www.w3.org/2001/XMLSchema

11.2. Apicurio Registry アーティファクトのバージョン状態

Apicurio Registry 内の有効なアーティファクトバージョンの状態は、ENABLEDDISABLED、および DEPRECATED です。

Expand
表11.2 Apicurio Registry アーティファクトのバージョン状態
状態説明

ENABLED

基本状態、全ての操作が可能です。

DISABLED

アーティファクトバージョンメタデータは、Apicurio Registry Web コンソールを使用して表示および検索できますが、そのコンテンツをクライアントが取得することはできません。

DEPRECATED

アーティファクトバージョンは完全に使用可能ですが、アーティファクトバージョンコンテンツが取得されるたびに、REST API 応答にヘッダーが追加されます。

11.3. Apicurio Registry グループメタデータ

Apicurio Registry にグループが作成されると、メタデータプロパティーのセットが作成され、保存されます。このメタデータには、読み取り専用のシステム生成プロパティーまたはユーザー生成プロパティーと、グループの作成後に更新できる編集可能なプロパティーが含まれます。

Expand
表11.3 Apicurio Registry システムによって生成されたメタデータ
プロパティー説明

owner

string

グループを作成したユーザーの名前。

createdOn

date

グループが作成された日時 (例: 2023-10-11T14:15:28Z)。

modifiedBy

string

グループを変更したユーザーの名前。

modifiedOn

date

グループが変更された日時 (例: 2023-10-11T14:15:28Z)。

Expand
表11.4 Apicurio Registry のユーザー提供またはシステム生成のメタデータ
プロパティー説明

groupId

string

Apicurio Registry 内のアーティファクトグループの一意の識別子 (例: development または production)。

Expand
表11.5 Apicurio Registry の編集可能なメタデータ
プロパティー説明

description

string

グループの意味のある説明 (オプション) (例: This is a simple group for testing)。

labels

map

グループに関連付けられたユーザー定義の名前と値のペアのオプションのリスト。名前と値は文字列である必要があります (例: my-key および my-value)。

グループのメタデータの更新

  • Apicurio Registry REST API または Web コンソールを使用して、編集可能なメタデータプロパティーのセットを更新できます。
  • state プロパティーを更新できるのは、Apicurio Registry REST API を使用する場合のみです。

11.4. Apicurio Registry アーティファクトメタデータ

アーティファクトが Apicurio Registry に追加されると、メタデータプロパティーのセットが作成され、保存されます。このメタデータは、読み取り専用のシステム生成またはユーザー生成のプロパティーと、アーティファクトの作成後に更新できる編集可能なプロパティーで構成されます。

Expand
表11.6 Apicurio Registry システムによって生成されたメタデータ
プロパティー説明

createdOn

date

アーティファクトが作成された日時 (例: 2023-10-11T14:15:28Z)。

globalId

integer

Apicurio Registry 内のアーティファクトバージョンのグローバルに一意な識別子。たとえば、Apicurio Registry で作成された最初のアーティファクトバージョンには、グローバル ID 1 が割り当てられます。

modifiedBy

string

アーティファクトを変更したユーザーの名前。

modifiedOn

date

アーティファクトが変更された日時 (例: 2023-10-11T14:15:28Z)。

Expand
表11.7 Apicurio Registry のユーザー提供またはシステム生成のメタデータ
プロパティー説明

groupId

string

Apicurio Registry 内のアーティファクトグループの一意の識別子 (development または production など)。Apicurio Registry Web コンソールを使用してアーティファクトを作成する時にグループ ID を指定しない場合は、default に設定されます。Apicurio Registry REST API、Java クライアント、または Maven プラグインを使用する場合は、グループ ID を指定する必要があります。

artifactId

string

Apicurio Registry 内のアーティファクトの一意の識別子。アーティファクト ID を指定することも、Apicurio Registry によって生成された UUID (8d168cad-1865-4e6c-bb7e-04e8be005bea など) を使用することもできます。アーティファクトの異なるバージョンは同じアーティファクト ID を使用しますが、グローバル ID は異なります。

artifactType

ArtifactType

サポートされているアーティファクトのタイプ (AVROOPENAPIPROTOBUF など)。

Expand
表11.8 Apicurio Registry の編集可能なメタデータ
プロパティー説明

name

string

人間が判読できるアーティファクトのオプションの名前 (例: My first Avro schema)。

description

string

アーティファクトの意味のあるオプションの説明 (例: This is a simple OpenAPI for testing)。

labels

map

アーティファクトに関連付けられたユーザー定義の名前と値のペアのオプションのリスト。名前と値は文字列である必要があります (例: my-key および my-value)。

owner

string

アーティファクトを所有するユーザーの名前。

アーティファクトメタデータの更新

  • Apicurio Registry REST API または Web コンソールを使用して、編集可能なメタデータプロパティーのセットを更新できます。

11.5. Apicurio Registry アーティファクトバージョンメタデータ

アーティファクトバージョンが Apicurio Registry アーティファクトに追加されると、メタデータプロパティーのセットが作成され、アーティファクトバージョンコンテンツとともに保存されます。このメタデータには、読み取り専用のシステム生成プロパティーまたはユーザー生成プロパティーと、アーティファクトバージョンの作成後に更新できる編集可能なプロパティーが含まれます。

Expand
表11.9 Apicurio Registry システムによって生成されたメタデータ
プロパティー説明

owner

string

アーティファクトバージョンを作成したユーザーの名前。

createdOn

date

アーティファクトバージョンが作成された日時 (例: 2023-10-11T14:15:28Z)。

modifiedBy

string

アーティファクトバージョンを変更したユーザー。

modifiedOn

date

アーティファクトバージョンが変更された日時 (例: 2023-10-11T14:15:28Z)。

contentId

integer

Apicurio Registry 内のアーティファクトバージョンコンテンツの一意の識別子。アーティファクトバージョンに同一のコンテンツがある場合、同じコンテンツ ID を複数のアーティファクトバージョンで共有できます。たとえば、コンテンツ ID 4 は、複数のアーティファクトにまたがって、同じコンテンツを持つ複数のアーティファクトバージョンで使用できます。

globalId

integer

Apicurio Registry 内のアーティファクトバージョンのグローバルに一意な識別子。たとえば、Apicurio Registry で作成された最初のアーティファクトバージョンには、グローバル ID 1 が割り当てられます。

Expand
表11.10 Apicurio Registry のユーザー提供またはシステム生成のメタデータ
プロパティー説明

groupId

string

Apicurio Registry 内のアーティファクトグループの一意の識別子 (development または production など)。

artifactId

string

Apicurio Registry 内のアーティファクトの一意の識別子。

version

integer

アーティファクトバージョンのバージョン文字列。指定しない場合は、システムは新しいシーケンシャルバージョンを生成します。Apicurio Registry REST API、SDK、または Maven プラグインを使用する場合は、バージョンを指定できます (例: 2.1.6)。

Expand
表11.11 Apicurio Registry の編集可能なメタデータ
プロパティー説明

name

string

オプションのアーティファクトバージョンの人間が判読できる名前 (例: Version One)。

description

string

アーティファクトバージョンの意味のある説明 (オプション) (例: This is the first version for testing)。

labels

map

アーティファクトバージョンに関連付けられたユーザー定義の名前と値のペアのオプションのリスト。名前と値は文字列である必要があります (例: my-key および my-value)。

state

ArtifactState

アーティファクトバージョンの状態: ENABLEDDISABLED、または DEPRECATED。デフォルトでは ENABLED に設定されています。

アーティファクトバージョンメタデータの更新

  • Apicurio Registry REST API または Web コンソールを使用して、編集可能なメタデータプロパティーのセットを更新できます。
  • state プロパティーを更新できるのは、Apicurio Registry REST API を使用する場合のみです。

第12章 Apicurio Registry コンテンツルールの参照

この章では、サポートされているコンテンツルールタイプ、アーティファクトタイプのサポートレベル、およびアーティファクト固有およびグローバルルールの優先順位に関する参照情報を提供します。

12.1. Apicurio Registry コンテンツルールタイプ

VALIDITYCOMPATIBILITY、および INTEGRITY ルールタイプを指定して、Apicurio Registry でのコンテンツの変化を制御できます。これらのルールタイプは、グローバルルールとアーティファクト固有ルールの両方に適用されます。

Expand
表12.1 Apicurio Registry コンテンツルールタイプ
説明

VALIDITY

コンテンツを Apicurio Registry に追加する前に検証してください。このルールに使用できる設定値は以下のとおりです。

  • FULL: 検証はシンタックスとセマンティックの両方で行われます。
  • SYNTAX_ONLY: 検証は構文のみです。
  • NONE: すべての検証チェックが無効になります。

COMPATIBILITY

アーティファクトを更新するときに互換性レベルを適用します (たとえば、下位互換性を得るには BACKWARD を選択します)。新しいアーティファクトが、以前に追加されたアーティファクトのバージョンまたはクライアントと互換性があることを確認します。このルールに使用できる設定値は以下のとおりです。

  • FULL: 新しいアーティファクトは、最後に追加されたアーティファクトと上位および下位互換性があります。
  • FULL_TRANSITIVE: 新しいアーティファクトは、以前に追加されたすべてのアーティファクトと上位互換性および下位互換性があります。
  • BACKWARD: 新しいアーティファクトを使用するクライアントは、最後に追加されたアーティファクトを使用して書き込まれたデータを読み取りできます。
  • BACKWARD_TRANSITIVE: 新しいアーティファクトを使用しているクライアントは、以前に追加されたすべてのアーティファクトを使用して書き込まれたデータを読み取ることができます。
  • FORWARD: 最後に追加されたアーティファクトを使用するクライアントは、新しいアーティファクトを使用して書き込まれたデータを読み取りできます。
  • FORWARD_TRANSITIVE: 以前に追加されたすべてのアーティファクトを使用しているクライアントは、新しいアーティファクトを使用して書き込まれたデータを読み取ることができます。
  • NONE: 下位互換性および上位互換性チェックはすべて無効になります。

INTEGRITY

アーティファクトを作成または更新するときに、アーティファクト参照の整合性を適用します。このルールを有効にして設定し、提供されたアーティファクト参照が正しいことを確認します。このルールに使用できる設定値は以下のとおりです。

  • FULL: すべてのアーティファクト参照整合性のチェックが有効化されます。
  • NO_DUPLICATES: 重複するアーティファクト参照があるかどうかを検出します。
  • REFS_EXIST: 存在しないアーティファクトへの参照があるかどうかを検出します。
  • ALL_REFS_MAPPED: すべてのアーティファクト参照がマップされていることを確認します。
  • NONE: すべてのアーティファクト参照整合性のチェックが無効化されます。

12.2. Apicurio Registry コンテンツルールの成熟度

すべてのコンテンツルールは、Apicurio Registry でサポートされるすべてのアーティファクトタイプに対して完全に実装されるわけではありません。以下の表は、各ルールおよびアーティファクトタイプの現在の成熟度レベルを示しています。

Expand
表12.2 Apicurio Registry コンテンツルールの成熟度マトリックス
アーティファクトタイプ検証ルール互換性ルール整合性ルール

Avro

完全

完全

完全

Protobuf

完全

完全

完全

JSON Schema

完全

完全

マッピング検出はサポートされていません

OpenAPI

完全

完全

完全

AsyncAPI

構文のみ

なし

完全

GraphQL

構文のみ

なし

マッピング検出はサポートされていません

Kafka Connect

構文のみ

なし

マッピング検出はサポートされていません

WSDL

完全

なし

マッピング検出はサポートされていません

XML

完全

なし

マッピング検出はサポートされていません

XSD

完全

なし

マッピング検出はサポートされていません

12.3. Apicurio Registry コンテンツルールの優先順位

アーティファクトを追加または更新すると、Apicurio Registry はルールを適用して、アーティファクトコンテンツの有効性、互換性、または整合性をチェックします。次の表に示すように、設定されたアーティファクト固有ルールは、同等の設定済みグローバルルールをオーバーライドします。

Expand
表12.3 Apicurio Registry コンテンツルールの優先順位
アーティファクト固有ルールグローバルルールこのアーティファクトに適用されるルール他のアーティファクトで利用できるグローバルルール

Enabled

Enabled

アーティファクト固有

はい

無効

Enabled

Global

はい

無効

無効

なし

いいえ

有効、None に設定

Enabled

なし

はい

無効

有効、None に設定

なし

いいえ

第13章 Apicurio Registry 設定リファレンス

この章では、Apicurio Registry で利用可能な設定オプションに関する参考情報を提供します。

関連情報

13.1. Apicurio Registry 設定オプション

次の Apicurio Registry 設定オプションは、コンポーネントカテゴリーごとに利用できます。

13.1.1. api

Expand
表13.1 API 設定オプション
名前デフォルト利用可能:説明

apicurio.api.errors.include-stack-in-response

boolean

false

2.1.4.Final

エラー応答にスタックトレースを含める

apicurio.apis.v3.base-href

string

_

2.5.0.Final

API ベースの href (URI)

apicurio.disable.apis

optional<list<string>>

 

2.0.0.Final

API の無効化

13.1.2. auth

Expand
表13.2 認証設定オプション
名前デフォルト利用可能:説明

apicurio.auth.admin-override.claim

string

org-admin

2.1.0.Final

認証管理者オーバーライドクレーム

apicurio.auth.admin-override.claim-value

string

true

2.1.0.Final

認証管理者オーバーライドクレーム値

apicurio.auth.admin-override.enabled

boolean

false

2.1.0.Final

有効化されている認証管理者オーバーライド

apicurio.auth.admin-override.from

string

token

2.1.0.Final

認証管理者オーバーライド:

apicurio.auth.admin-override.role

string

sr-admin

2.1.0.Final

認証管理者オーバーライドロール

apicurio.auth.admin-override.type

string

role

2.1.0.Final

認証管理者オーバーライドタイプ

apicurio.auth.admin-override.user

string

admin

3.0.0

認証管理者オーバーライドユーザー名

apicurio.auth.anonymous-read-access.enabled

boolean [dynamic]

false

2.1.0.Final

匿名の読み取りアクセス

apicurio.auth.authenticated-read-access.enabled

boolean [dynamic]

false

2.1.4.Final

認証された読み取りアクセス

apicurio.auth.owner-only-authorization

boolean [dynamic]

false

2.0.0.Final

アーティファクト所有者のみの承認

apicurio.auth.owner-only-authorization.limit-group-access

boolean [dynamic]

false

2.1.0.Final

アーティファクトグループ所有者のみの承認

apicurio.auth.role-based-authorization

boolean

false

2.1.0.Final

ロールベース認可の有効化

apicurio.auth.role-source

string

token

2.1.0.Final

認証ロールソース

apicurio.auth.role-source.header.name

string

 

2.4.3.Final

ヘッダー認可名

apicurio.auth.roles.admin

string

sr-admin

2.0.0.Final

認証ロール管理者

apicurio.auth.roles.developer

string

sr-developer

2.1.0.Final

認証ロール開発者

apicurio.auth.roles.readonly

string

sr-readonly

2.1.0.Final

認証ロール読み取り専用

apicurio.authn.audit.log.prefix

string

audit

2.2.6

アプリケーション監査ロギングに使用される接頭辞。

apicurio.authn.basic-client-credentials.cache-expiration

integer

10

2.2.6.Final

デフォルトのクライアント認証情報トークンの有効期限 (分)。

apicurio.authn.basic-client-credentials.cache-expiration-offset

integer

10

2.5.9.Final

JWT 有効期限からのクライアント認証情報トークンの有効期限オフセット (秒)。

apicurio.authn.basic-client-credentials.enabled

boolean [dynamic]

false

2.1.0.Final

Basic 認証クライアント認証情報の有効化。

apicurio.authn.basic.scope

optional<string>

 

2.5.0.Final

クライアント認証情報のスコープ。

quarkus.http.auth.basic

boolean

false

3.0.0

Basic 認証を有効にします。

quarkus.oidc.client-id

string

 

2.0.0.Final

サーバーが認証に使用するクライアント ID。

quarkus.oidc.client-secret

optional<string>

 

2.1.0.Final

サーバーが認証に使用するクライアントシークレット。

quarkus.oidc.tenant-enabled

boolean

false

2.0.0.Final

認証を有効にします。

quarkus.oidc.token-path

string

 

2.1.0.Final

認証サーバートークンエンドポイント。

13.1.3. cache

Expand
表13.3 キャッシュ設定オプション
名前デフォルト利用可能:説明

apicurio.config.cache.enabled

boolean

true

2.2.2.Final

有効化されているレジストリーキャッシュ

13.1.4. ccompat

Expand
表13.4 ccompat 設定オプション
名前デフォルト利用可能:説明

apicurio.ccompat.group-concat.enabled

boolean

false

2.6.2.Final

件名の連結によるグループサポートを有効にする (互換性 API)

apicurio.ccompat.group-concat.separator

string

:

2.6.2.Final

グループ連結が有効な場合に使用する区切り文字 (互換性 API)

apicurio.ccompat.legacy-id-mode.enabled

boolean [dynamic]

false

2.0.2.Final

レガシー ID モード (互換 API)

apicurio.ccompat.max-subjects

integer [dynamic]

1000

2.4.2.Final

返されるサブジェクトの最大数 (互換性 API)

apicurio.ccompat.use-canonical-hash

boolean [dynamic]

false

2.3.0.Final

正規ハッシュモード (互換性 API)

13.1.5. download

Expand
表13.5 設定オプションのダウンロード
名前デフォルト利用可能:説明

apicurio.download.href.ttl.seconds

long [dynamic]

30

2.1.2.Final

ダウンロードリンクの有効期限

13.1.6. gitops

Expand
表13.6 gitops 設定オプション
名前デフォルト利用可能:説明

apicurio.gitops.id

string

 

3.0.0

このレジストリーインスタンスの識別子。この識別子を参照するデータのみが読み込まれます。

apicurio.gitops.repo.origin.branch

string

main

3.0.0

ロードするデータを含む、リモート Git リポジトリー内のブランチの名前。

apicurio.gitops.repo.origin.uri

string

 

3.0.0

読み込むデータを含む、リモート git リポジトリーの URI。

apicurio.gitops.workdir

string

/tmp/apicurio-registry-gitops

3.0.0

ローカル Git リポジトリーの保存に使用される GitOps 作業ディレクトリーへのパス。

13.1.7. health

Expand
表13.7 ヘルス設定オプション
名前デフォルト利用可能:説明

apicurio.liveness.errors.ignored

optional<list<string>>

 

1.2.3.Final

無視された liveness エラー

apicurio.metrics.persistence-exception-liveness-check.counter-reset-window-duration.seconds

integer

60

1.0.2.Final

永続性 liveness チェックのカウンターリセットウィンドウの期間

apicurio.metrics.persistence-exception-liveness-check.error-threshold

integer

1

1.0.2.Final

永続性の liveness チェックのエラーしきい値

apicurio.metrics.persistence-exception-liveness-check.logging.disabled

boolean

false

2.0.0.Final

永続性の liveness チェックのロギングの無効化

apicurio.metrics.persistence-exception-liveness-check.status-reset-window-duration.seconds

integer

300

1.0.2.Final

永続 liveness チェックのステータスリセットウィンドウの期間

apicurio.metrics.persistence-timeout-readiness-check.error-threshold

integer

5

1.0.2.Final

永続性 readiness チェックのエラーしきい値

apicurio.metrics.persistence-timeout-readiness-check.timeout.seconds

integer

15

1.0.2.Final

永続性 readiness チェックのタイムアウト

apicurio.metrics.persitence-timeout-readiness-check.status-reset-window-duration.seconds

integer

300

1.0.2.Final

永続性 readiness チェックのステータスリセットウィンドウの期間

apicurio.metrics.resonse-error-liveness-check.counter-reset-window-duration.seconds

integer

60

1.0.2.Final

応答 liveness チェックのカウンターリセットウィンドウの期間

apicurio.metrics.response-error-liveness-check.counter-reset-window-duration.seconds

integer

60

1.0.2.Final

永続性の readiness チェックのカウンターリセットウィンドウの期間

apicurio.metrics.response-error-liveness-check.disabled

boolean

false

2.0.0.Final

応答 liveness チェックのロギングの無効化

apicurio.metrics.response-error-liveness-check.error-threshold

integer

1

1.0.2.Final

応答 liveness チェックのエラーしきい値

apicurio.metrics.response-error-liveness-check.status-reset-window-duration.seconds

integer

300

1.0.2.Final

応答 liveness チェックのステータスリセットウィンドウの期間

apicurio.metrics.response-timeout-readiness-check.counter-reset-window-duration.seconds

instance<integer>

60

1.0.2.Final

応答 readiness チェックのカウンターリセットウィンドウの期間

apicurio.metrics.response-timeout-readiness-check.error-threshold

instance<integer>

1

1.0.2.Final

応答 readiness チェックのエラーしきい値

apicurio.metrics.response-timeout-readiness-check.timeout.seconds

instance<integer>

10

1.0.2.Final

応答 readiness チェックのタイムアウト

apicurio.metrics.response-timeout-rediness-check.status-reset-window-duration.seconds

instance<integer>

300

1.0.2.Final

応答 readiness チェックのステータスリセットウィンドウの期間

apicurio.storage.metrics.cache.check-period.ms

long

30000

2.1.0.Final

ストレージメトリクスキャッシュチェック期間

13.1.8. import

Expand
表13.8 設定オプションのインポート
名前デフォルト利用可能:説明

apicurio.import.preserveContentId

boolean

true

3.0.0

true に設定すると、インポートファイルのコンテンツ ID が使用されます (それ以外の場合は新しい ID が生成されます)。デフォルトは 'true' です。

apicurio.import.preserveGlobalId

boolean

true

3.0.0

true に設定すると、インポートファイルのグローバル ID が使用されます (それ以外の場合は新しい ID が生成されます)。デフォルトは 'true' です。

apicurio.import.requireEmptyRegistry

boolean

true

3.0.0

true に設定すると、レジストリーが空の場合にのみデータのインポートが機能します。デフォルトは 'true' です。

apicurio.import.url

optional<url>

 

2.1.0.Final

インポート URL

apicurio.import.work-dir

string

 

3.0.0

データをインポートするときに使用する一時作業ディレクトリー。

13.1.9. limits

Expand
表13.9 制限設定オプション
名前デフォルト利用可能:説明

apicurio.limits.config.max-artifact-labels

long

-1

2.2.3.Final

最大アーティファクトラベル

apicurio.limits.config.max-artifact-properties

long

-1

2.1.0.Final

最大アーティファクトプロパティー

apicurio.limits.config.max-artifacts

long

-1

2.1.0.Final

最大アーティファクト

apicurio.limits.config.max-description-length

long

-1

2.1.0.Final

最大アーティファクトの説明の長さ

apicurio.limits.config.max-label-size.bytes

long

-1

2.1.0.Final

最大アーティファクトラベルサイズ

apicurio.limits.config.max-name-length

long

-1

2.1.0.Final

最大アーティファクト名の長さ

apicurio.limits.config.max-property-key-size.bytes

long

-1

2.1.0.Final

最大アーティファクトプロパティーのキーサイズ

apicurio.limits.config.max-property-value-size.bytes

long

-1

2.1.0.Final

最大アーティファクトプロパティー値のサイズ

apicurio.limits.config.max-requests-per-second

long

-1

2.2.3.Final

1 秒あたりの最大アーティファクトリクエスト

apicurio.limits.config.max-schema-size.bytes

long

-1

2.2.3.Final

最大スキーマサイズ (バイト)

apicurio.limits.config.max-total-schemas

long

-1

2.1.0.Final

最大合計スキーマ

apicurio.limits.config.max-versions-per-artifact

long

-1

2.1.0.Final

アーティファクトごとの最大バージョン

apicurio.storage.metrics.cache.max-size

long

1000

2.4.1.Final

ストレージメトリクスキャッシュの最大サイズ

13.1.10. リダイレクト

Expand
表13.10 リダイレクト設定オプション
名前デフォルト利用可能:説明

apicurio.redirects

map<string, string>

 

2.1.2.Final

レジストリーのリダイレクト

apicurio.redirects.enabled

boolean

 

2.1.2.Final

リダイレクトの有効化

apicurio.url.override.host

optional<string>

 

2.5.0.Final

外部からアクセス可能な URL の生成に使用されるホスト名をオーバーライドします。ホストとポートのオーバーライドは、HTTPS パススルー Ingress または Route を使用してレジストリーをデプロイするときに役立ちます。このような場合、リクエストはプロキシーされるため、リダイレクトに再利用されるリクエスト URL (およびポート) は、クライアントが使用する実際の外部 URL には属しません。ターゲット URL に到達できないため、リダイレクトは失敗します。

apicurio.url.override.port

optional<integer>

 

2.5.0.Final

外部からアクセス可能な URL の生成に使用されるポートを上書きします。

13.1.11. rest

Expand
表13.11 rest 設定オプション
名前デフォルト利用可能:説明

apicurio.rest.artifact.download.max-size.bytes

int

1000000

2.2.6

URL からダウンロードできるアーティファクトの最大サイズ

apicurio.rest.artifact.download.ssl-validation.disabled

boolean

false

2.2.6

URL からアーティファクトをダウンロードする際に SSL 検証をスキップする

apicurio.rest.deletion.artifact-version.enabled

boolean [dynamic]

false

2.4.2

アーティファクトバージョンの削除を有効化する

apicurio.rest.deletion.artifact.enabled

boolean [dynamic]

false

3.0.0

アーティファクトの削除を有効にする

apicurio.rest.deletion.group.enabled

boolean [dynamic]

false

3.0.0

グループの削除を有効にする

apicurio.rest.mutability.artifact-version-content.enabled

boolean [dynamic]

false

3.0.2

アーティファクトのバージョン変更を有効にする

apicurio.rest.search-results.labels.max-size.bytes

int

512

3.0.3

検索結果内の項目ごとのラベルの最大サイズ (バイト単位)

13.1.12. semver

Expand
表13.12 semver 設定オプション
名前デフォルト利用可能:説明

apicurio.semver.branching.coerce

boolean [dynamic]

false

3.0.0

true の場合、無効なバージョンは、可能であればセマンティックバージョニング 2 形式 (https://semver.org) に強制変換されます。

apicurio.semver.branching.enabled

boolean [dynamic]

false

3.0.0

メジャー ('A.x') およびマイナー ('A.B.x') アーティファクトバージョンのブランチを自動的に作成または更新します。

apicurio.semver.validation.enabled

boolean [dynamic]

false

3.0.0

すべてのアーティファクトバージョンがセマンティックバージョニング 2 形式 (https://semver.org) に準拠していることを検証します。

13.1.13. storage

Expand
表13.13 ストレージ設定オプション
名前デフォルト利用可能:説明

apicurio.datasource.blue.db-kind

string

h2

3.0.0

Gitops blue データソース DB の種類

apicurio.datasource.blue.jdbc.initial-size

string

20

3.0.0

Gitops blue データソースプールの初期サイズ

apicurio.datasource.blue.jdbc.max-size

string

100

3.0.0

gitops blue データソースプールの最大サイズ

apicurio.datasource.blue.jdbc.min-size

string

20

3.0.0

gitops blue データソースプールの最小サイズ

apicurio.datasource.blue.jdbc.url

string

jdbc:h2:mem:registry_db

3.0.0

gitops blue データソース JDBC URL

apicurio.datasource.blue.password

string

sa

3.0.0

gitops blue データソースのパスワード

apicurio.datasource.blue.username

string

sa

3.0.0

gitops blue データソースのユーザー名

apicurio.datasource.green.db-kind

string

h2

3.0.0

GITOPS green データベースの db の種類

apicurio.datasource.green.jdbc.initial-size

string

20

3.0.0

gitops green データソースプールの初期サイズ

apicurio.datasource.green.jdbc.max-size

string

100

3.0.0

gitops green データソースプールの最大サイズ

apicurio.datasource.green.jdbc.min-size

string

20

3.0.0

gitops green データソースプールの最小サイズ

apicurio.datasource.green.jdbc.url

string

jdbc:h2:mem:registry_db

3.0.0

gitops green データソース JDBC URL

apicurio.datasource.green.password

string

sa

3.0.0

gitops green データソースパスワード

apicurio.datasource.green.username

string

sa

3.0.0

gitops green データソースユーザー名

apicurio.events.kafka.topic

string

registry-events

 

ストレージイベントトピック

apicurio.kafkasql.bootstrap.servers

string

  

Kafka sql ストレージブートストラップサーバー

apicurio.kafkasql.consumer.group-prefix

string

apicurio-

 

コンシューマーグループ名の Kafka sql ストレージ接頭辞

apicurio.kafkasql.consumer.poll.timeout

integer

5000

 

Kafka sql ストレージコンシューマーのポーリングタイムアウト

apicurio.kafkasql.coordinator.response-timeout

integer

30000

 

Kafka sql ストレージのコーディネーターの応答タイムアウト

apicurio.kafkasql.security.protocol

optional<string>

  

Kafka sql ストレージのセキュリティープロトコル

apicurio.kafkasql.security.sasl.client-id

string

  

Kafka sql ストレージの sasl クライアント識別子

apicurio.kafkasql.security.sasl.client-secret

string

  

Kafka sql ストレージの sasl クライアントシークレット

apicurio.kafkasql.security.sasl.enabled

boolean

false

 

Kafka sql ストレージの sasl が有効かどうか

apicurio.kafkasql.security.sasl.login.callback.handler.class

string

  

Kafka sql ストレージの sasl ログインコールバックハンドラー

apicurio.kafkasql.security.sasl.mechanism

string

  

Kafka sql ストレージの sasl メカニズム

apicurio.kafkasql.security.sasl.token.endpoint

string

  

Kafka sql ストレージの sasl トークンエンドポイント

apicurio.kafkasql.security.ssl.truststore.location

optional<string>

  

Kafka sql ストレージの ssl トラストストアの場所

apicurio.kafkasql.security.ssl.truststore.type

optional<string>

  

Kafka sql ストレージの ssl トラストストアタイプ

apicurio.kafkasql.snapshot.every.seconds

string

86400s

3.0.0

Kafka sql ジャーナルトピックのスナップショット

apicurio.kafkasql.snapshots.topic

string

kafkasql-snapshots

3.0.0

Kafka sql ストレージトピック名

apicurio.kafkasql.ssl.key.password

optional<string>

  

Kafka sql ストレージ ssl キーパスワード

apicurio.kafkasql.ssl.keystore.location

optional<string>

  

Kafka sql ストレージの ssl キーストアの場所

apicurio.kafkasql.ssl.keystore.password

optional<string>

  

Kafka sql ストレージの ssl キーストアパスワード

apicurio.kafkasql.ssl.keystore.type

optional<string>

  

Kafka sql ストレージの ssl キーストアタイプ

apicurio.kafkasql.ssl.truststore.password

optional<string>

  

Kafka sql ストレージの ssl トラストストアパスワード

apicurio.kafkasql.topic

string

kafkasql-journal

 

Kafka sql ストレージトピック名

apicurio.kafkasql.topic.auto-create

boolean

true

 

Kafka sql ストレージのトピックの自動作成

apicurio.sql.db-schema

string

*

3.0.6

データベーススキーマ名 (複数のスキーマで、同じデータベースに対して 2 つのレジストリーインスタンスを実行する場合にのみ必要)

apicurio.sql.init

boolean

true

2.0.0.Final

SQL init

apicurio.storage.kind

string

 

3.0.0

アプリケーションストレージバリアント (sql、kafkasql、gitops など)

apicurio.storage.read-only.enabled

boolean [dynamic]

false

2.5.0.Final

レジストリーストレージの読み取り専用モードを有効にします。

apicurio.storage.snapshot.location

string

./

3.0.0

Kafka sql スナップショットストアの場所

apicurio.storage.sql.kind

string

h2

3.0.0

アプリケーションデータソースのデータベースタイプ

artifacts.skip.disabled.latest

boolean

true

2.4.2

最新のアーティファクトバージョンを取得する際の DISABLED 状態のアーティファクトバージョンをスキップする

13.1.14. system

Expand
表13.14 システム設定オプション
名前デフォルト利用可能:説明

apicurio.app.date

string

 

3.0.4

 

apicurio.app.description

string

 

3.0.4

 

apicurio.app.name

string

 

3.0.4

 

apicurio.app.version

string

 

3.0.4

 

13.1.15. ui

Expand
表13.15 ui 設定オプション
名前デフォルト利用可能:説明

apicurio.ui.auth.oidc.client-id

string

apicurio-registry-ui

3.0.0

OIDC clientId

apicurio.ui.auth.oidc.logout-url

string

f5

3.0.0

OIDC ログアウト URL

apicurio.ui.auth.oidc.redirect-uri

string

/

3.0.0

OIDC redirectUri

apicurio.ui.auth.oidc.scope

string

openid profile email

3.0.8

UI 認証 OIDC スコープ値

apicurio.ui.contextPath

string

/

3.0.0

UI のコンテキストパス

apicurio.ui.docsUrl

string

/docs/

3.0.0

Documentation コンポーネントの URL

apicurio.ui.features.breadcrumbs

string

true

3.0.0

UI でブレッドクラムを表示できるかどうか

apicurio.ui.features.read-only.enabled

string

false

3.0.0

UI を読み取り専用モードに設定できるかどうか

apicurio.ui.features.settings

string

true

3.0.0

UI に設定タブを表示できるかどうか

apicurio.ui.navPrefixPath

string

/

3.0.0

すべての UI パスのナビゲーション接頭辞

13.1.16. unknown

Expand
表13.16 不明な設定オプション
名前デフォルト利用可能:説明

apicurio.apis.date-format

unknown

yyyy-MM-dd’T’HH:mm:ss’Z'

  

apicurio.apis.date-format-timezone

unknown

UTC

  

apicurio.app.id

unknown

apicurio-registry

  

apicurio.auth.anonymous-read-access.enabled.dynamic.allow

unknown

${apicurio.config.dynamic.allow-all}

  

apicurio.auth.owner-only-authorization.dynamic.allow

unknown

${apicurio.config.dynamic.allow-all}

  

apicurio.auth.owner-only-authorization.limit-group-access.dynamic.allow

unknown

${apicurio.config.dynamic.allow-all}

  

apicurio.authn.basic-client-credentials.enabled.dynamic.allow

unknown

${apicurio.config.dynamic.allow-all}

  

apicurio.ccompat.legacy-id-mode.enabled.dynamic.allow

unknown

${apicurio.config.dynamic.allow-all}

  

apicurio.ccompat.max-subjects.dynamic.allow

unknown

${apicurio.config.dynamic.allow-all}

  

apicurio.ccompat.use-canonical-hash.dynamic.allow

unknown

${apicurio.config.dynamic.allow-all}

  

apicurio.config.dynamic.allow-all

unknown

true

  

apicurio.config.refresh.every

unknown

1m

  

apicurio.datasource.jdbc.initial-size

unknown

20

  

apicurio.datasource.jdbc.max-size

unknown

100

  

apicurio.datasource.jdbc.min-size

unknown

20

  

apicurio.datasource.password

unknown

sa

  

apicurio.datasource.url

unknown

jdbc:h2:mem:db_${quarkus.uuid}

  

apicurio.datasource.username

unknown

sa

  

apicurio.download.href.ttl.seconds.dynamic.allow

unknown

${apicurio.config.dynamic.allow-all}

  

apicurio.downloads.reaper.every

unknown

60s

  

apicurio.gitops.refresh.every

unknown

30s

  

apicurio.kafkasql.consumer.group.id

unknown

${registry.id}-${quarkus.uuid}

  

apicurio.kafkasql.producer.client.id

unknown

${registry.id}-producer

  

apicurio.limits.config.cache.check-period

unknown

30000

  

apicurio.logconfigjob.delayed

unknown

1s

  

apicurio.logconfigjob.every

unknown

5s

  

apicurio.redirects.root

unknown

/,/apis

  

apicurio.rest.artifact.deletion.enabled

unknown

false

  

apicurio.rest.deletion.artifact-version.enabled.dynamic.allow

unknown

${apicurio.config.dynamic.allow-all}

  

apicurio.rest.deletion.artifact.enabled.dynamic.allow

unknown

${apicurio.config.dynamic.allow-all}

  

apicurio.rest.deletion.group.enabled.dynamic.allow

unknown

${apicurio.config.dynamic.allow-all}

  

apicurio.rest.mutability.artifact-version-content.enabled.dynamic.allow

unknown

${apicurio.config.dynamic.allow-all}

  

apicurio.semver.branching.coerce.dynamic.allow

unknown

${apicurio.config.dynamic.allow-all}

  

apicurio.semver.branching.enabled.dynamic.allow

unknown

${apicurio.config.dynamic.allow-all}

  

apicurio.semver.validation.enabled.dynamic.allow

unknown

${apicurio.config.dynamic.allow-all}

  

apicurio.storage.read-only.enabled.dynamic.allow

unknown

${apicurio.config.dynamic.allow-all}

  

apicurio.ui.features.read-only.enabled.dynamic.allow

unknown

${apicurio.config.dynamic.allow-all}

  

13.2. Apicurio レジストリーバージョン 2 からバージョン 3 への設定の変更

Apicurio Registry v3 では、設定オプションが簡素化され、さらに重複が削除され、一貫性が向上しました。ほとんどのオプションでは、接頭辞の名前を registry から apicurio に変更するだけです。たとえば、registry.kafkasql.bootstrap.serversapicurio.kafkasql.bootstrap.servers に変更します。

注記

各設定プロパティーは、対応する環境変数 (例: APICURIO_KAFKASQL_BOOTSTRAP_SERVERS) を使用して値をオーバーライドできます。

13.2.1. api

Expand
表13.17 API 設定オプション
名前新規オプション

registry.api.errors.include-stack-in-response

apicurio.api.errors.include-stack-in-response

registry.disable.apis

apicurio.disable.apis

13.2.2. auth

Expand
表13.18 認証設定オプション
名前新規オプション

registry.auth.admin-override.claim

apicurio.auth.admin-override.claim

registry.auth.admin-override.claim-value

apicurio.auth.admin-override.claim-value

registry.auth.admin-override.enabled

apicurio.auth.admin-override.enabled

registry.auth.admin-override.from

apicurio.auth.admin-override.from

registry.auth.admin-override.role

apicurio.auth.admin-override.role

registry.auth.admin-override.type

apicurio.auth.admin-override.type

registry.auth.anonymous-read-access.enabled

apicurio.auth.anonymous-read-access.enabled

registry.auth.audit.log.prefix

apicurio.authn.audit.log.prefix

registry.auth.authenticated-read-access.enabled

apicurio.auth.authenticated-read-access.enabled

registry.auth.basic-auth-client-credentials.cache-expiration

apicurio.authn.basic-client-credentials.cache-expiration

registry.auth.basic-auth-client-credentials.cache-expiration-offset

apicurio.authn.basic-client-credentials.cache-expiration-offset

registry.auth.basic-auth-client-credentials.enabled

apicurio.authn.basic-client-credentials.enabled

registry.auth.basic-auth.scope

apicurio.authn.basic.scope

registry.auth.client-id

quarkus.oidc.client-id

registry.auth.client-secret

quarkus.oidc.client-secret

registry.auth.enabled

quarkus.oidc.tenant-enabled

registry.auth.owner-only-authorization

apicurio.auth.owner-only-authorization

registry.auth.owner-only-authorization.limit-group-access

apicurio.auth.owner-only-authorization.limit-group-access

registry.auth.role-based-authorization

apicurio.auth.role-based-authorization

registry.auth.role-source

apicurio.auth.role-source

registry.auth.role-source.header.name

apicurio.auth.role-source.header.name

registry.auth.roles.admin

apicurio.auth.roles.admin

registry.auth.roles.developer

apicurio.auth.roles.developer

registry.auth.roles.readonly

apicurio.auth.roles.readonly

registry.auth.tenant-owner-is-admin.enabled

削除

registry.auth.token.endpoint

quarkus.oidc.token-path

13.2.3. cache

Expand
表13.19 キャッシュ設定オプション
名前新規オプション

registry.config.cache.enabled

apicurio.config.cache.enabled

13.2.4. ccompat

Expand
表13.20 ccompat 設定オプション
名前新規オプション

registry.ccompat.legacy-id-mode.enabled

apicurio.ccompat.legacy-id-mode.enabled

registry.ccompat.max-subjects

apicurio.ccompat.max-subjects

registry.ccompat.use-canonical-hash

apicurio.ccompat.use-canonical-hash

13.2.5. download

Expand
表13.21 設定オプションのダウンロード
名前新規オプション

registry.download.href.ttl

apicurio.download.href.ttl.seconds

13.2.6. events

Expand
表13.22 イベント設定オプション
名前新規オプション

registry.events.ksink

削除

13.2.7. health

Expand
表13.23 ヘルス設定オプション
名前新規オプション

registry.liveness.errors.ignored

apicurio.liveness.errors.ignored

registry.metrics.PersistenceExceptionLivenessCheck.counterResetWindowDurationSec

apicurio.metrics.response-timeout-readiness-check.counter-reset-window-duration.seconds

registry.metrics.PersistenceExceptionLivenessCheck.disableLogging

apicurio.metrics.persistence-exception-liveness-check.logging.disabled

registry.metrics.PersistenceExceptionLivenessCheck.errorThreshold

apicurio.metrics.persistence-exception-liveness-check.error-threshold

registry.metrics.PersistenceExceptionLivenessCheck.statusResetWindowDurationSec

apicurio.metrics.persistence-exception-liveness-check.status-reset-window-duration.seconds

registry.metrics.PersistenceTimeoutReadinessCheck.counterResetWindowDurationSec

apicurio.metrics.response-error-liveness-check.counter-reset-window-duration.seconds

registry.metrics.PersistenceTimeoutReadinessCheck.errorThreshold

apicurio.metrics.persistence-timeout-readiness-check.error-threshold

registry.metrics.PersistenceTimeoutReadinessCheck.statusResetWindowDurationSec

apicurio.metrics.persitence-timeout-readiness-check.status-reset-window-duration.seconds

registry.metrics.PersistenceTimeoutReadinessCheck.timeoutSec

apicurio.metrics.persistence-timeout-readiness-check.timeout.seconds

registry.metrics.ResponseErrorLivenessCheck.counterResetWindowDurationSec

apicurio.metrics.resonse-error-liveness-check.counter-reset-window-duration.seconds

registry.metrics.ResponseErrorLivenessCheck.disableLogging

apicurio.metrics.response-error-liveness-check.disabled

registry.metrics.ResponseErrorLivenessCheck.errorThreshold

apicurio.metrics.response-error-liveness-check.error-threshold

registry.metrics.ResponseErrorLivenessCheck.statusResetWindowDurationSec

apicurio.metrics.response-error-liveness-check.status-reset-window-duration.seconds

registry.metrics.ResponseTimeoutReadinessCheck.counterResetWindowDurationSec

apicurio.metrics.response-timeout-readiness-check.counter-reset-window-duration.seconds

registry.metrics.ResponseTimeoutReadinessCheck.errorThreshold

apicurio.metrics.response-timeout-readiness-check.error-threshold

registry.metrics.ResponseTimeoutReadinessCheck.statusResetWindowDurationSec

apicurio.metrics.response-timeout-rediness-check.status-reset-window-duration.seconds

registry.metrics.ResponseTimeoutReadinessCheck.timeoutSec

apicurio.metrics.response-timeout-readiness-check.timeout.seconds

registry.storage.metrics.cache.check-period

apicurio.storage.metrics.cache.check-period.ms

13.2.8. import

Expand
表13.24 設定オプションのインポート
名前新規オプション

registry.import.url

apicurio.import.url

13.2.9. kafka

Expand
表13.25 kafka 設定オプション
名前新規オプション

registry.events.kafka.topic

apicurio.events.kafka.topic

registry.events.kafka.topic-partition

削除

13.2.10. limits

Expand
表13.26 制限設定オプション
名前新規オプション

registry.limits.config.max-artifact-labels

apicurio.limits.config.max-artifact-labels

registry.limits.config.max-artifact-properties

apicurio.limits.config.max-artifact-properties

registry.limits.config.max-artifacts

apicurio.limits.config.max-artifact

registry.limits.config.max-description-length

apicurio.limits.config.max-description-length

registry.limits.config.max-label-size

apicurio.limits.config.max-label-size

registry.limits.config.max-name-length

apicurio.limits.config.max-name-length

registry.limits.config.max-property-key-size

apicurio.limits.config.max-property-key-size

registry.limits.config.max-property-value-size

apicurio.limits.config.max-property-value-size

registry.limits.config.max-requests-per-second

apicurio.limits.config.max-requests-per-second

registry.limits.config.max-schema-size-bytes

apicurio.limits.config.max-schema-size-bytes

registry.limits.config.max-total-schemas

apicurio.limits.config.max-total-schemas

registry.limits.config.max-versions-per-artifact

apicurio.limits.config.max-versions-per-artifact

registry.storage.metrics.cache.max-size

apicurio.storage.metrics.cache.max-size

13.2.11. リダイレクト

Expand
表13.27 リダイレクト設定オプション
名前新規オプション

registry.enable-redirects

apicurio.redirects.enabled

registry.redirects

apicurio.redirects

registry.url.override.host

apicurio.url.override.host

registry.url.override.port

apicurio.url.override.port

13.2.12. rest

Expand
表13.28 rest 設定オプション
名前新規オプション

registry.rest.artifact.deletion.enabled

apicurio.rest.artifact.deletion.enabled

registry.rest.artifact.download.maxSize

apicurio.rest.artifact.download.max-size.bytes

registry.rest.artifact.download.skipSSLValidation

apicurio.rest.artifact.download.ssl-validation.disabled

13.2.13. store

Expand
表13.29 ストア設定オプション
名前新規オプション

artifacts.skip.disabled.latest

artifacts.skip.disabled.latest

registry.sql.init

apicurio.sql.init

13.2.14. ui

Expand
表13.30 ui 設定オプション
名前新規オプション

registry.ui.config.auth.oidc.client-id

apicurio.ui.auth.oidc.client-id

registry.ui.config.auth.oidc.redirect-url

apicurio.ui.auth.oidc.redirect-uri

registry.ui.config.auth.oidc.url

quarkus.oidc.auth-server-url

registry.ui.config.uiContextPath

apicurio.ui.contextPath

registry.ui.features.readOnly

apicurio.ui.features.read-only.enabled

registry.ui.features.settings

apicurio.ui.features.settings

付録A サブスクリプションの使用

Apicurio Registry は、ソフトウェアサブスクリプションから提供されます。サブスクリプションを管理するには、Red Hat カスタマーポータルでアカウントにアクセスします。

アカウントへのアクセス

  1. access.redhat.com に移動します。
  2. アカウントがない場合は作成します。
  3. アカウントにログインします。

サブスクリプションのアクティベート

  1. access.redhat.com に移動します。
  2. My Subscriptions に移動します。
  3. Activate a subscription に移動し、16 桁のアクティベーション番号を入力します。

ZIP および TAR ファイルのダウンロード

ZIP または TAR ファイルにアクセスするには、カスタマーポータルを使用して、ダウンロードする関連ファイルを検索します。RPM パッケージを使用している場合、この手順は必要ありません。

  1. ブラウザーを開き、access.redhat.com/downloads で Red Hat カスタマーポータルの Product Downloads ページにログインします。
  2. Integration and Automation カテゴリーで Red Hat Integration エントリーを見つけます。
  3. 目的の Apicurio Registry 製品を選択します。Software Downloads ページが開きます。
  4. コンポーネントの Download リンクをクリックします。

改訂日時: 2025-10-24

法律上の通知

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat