データセットの生成

このドキュメントでは、ロードテスト用のデータセットを生成するためにデータセットプロバイダーとその API を使用する方法について説明します。

このプロバイダーのエンドポイントは保護されていないため、本番環境には絶対にインストールしないでください。

前提条件

Quarkus または minikube インストールを使用する場合、すべての URL は /realms/master で始まります。Wildfly ディストリビューションの場合、URL は /auth/realms/master で始まります。

データセットプロバイダーの使用

スクリプトでの使用

このスクリプトには、レルム、ユーザー、およびクライアントに関する次のセクションで説明されている操作のサブセットが含まれています。

このスクリプトは、データセットプロバイダーが minikube へのインストール セットアップで説明されているようにインストールされ、次の場所で利用可能であることを前提としています。
https://keycloak-keycloak.$(minikube ip).nip.io/realms/master/dataset/.

ヘルプの説明を受け取るには、次のコマンドを実行します。

./dataset-import.sh -a help

これらのオプションが表示されます。

Dataset import to the local minikube Keycloak application - usage:
1) create realm/s with clients, users and password hash algorithm & iterations - run -a (action) with or without other arguments: -a create-realms -r 10 -g argon2 -i 5 -c 100 -u 100 -l 'https://keycloak.url.com'
2) create clients in specific realm: -a create-clients -c 100 -n realm-0 -l 'https://keycloak.url.com'
3) create users in specific realm: -a create-users -u 100 -n realm-0 -l 'https://keycloak.url.com'
4) create events in specific realm: -a create-events -e 100 -n realm-0 -l 'https://keycloak.url.com'
5) create offline sessions in specific realm: -a create-offline-sessions -o 100 -n realm-0 -l 'https://keycloak.url.com'
6) delete specific realm/s with prefix -a delete-realms -p realm -l 'https://keycloak.url.com'
7) dataset provider status -a status 'https://keycloak.url.com'
8) dataset provider status check of last completed job -a status-completed -t 10 -l 'https://keycloak.url.com'
9) dataset provider clear status of last completed job -a clear-status-completed -l 'https://keycloak.url.com'
10) dataset import script usage -a help

10 個の新しいレルムを作成する例

./dataset-import.sh -a create-realms -r 10

または、ユーザーは provision/minikube モジュール内から Taskfile を実行して、Kubernetes スタイルのデプロイメントの自動化をシームレスに実行するために dataset-import タスクを実行することもできます。

dataset-import タスクは、ユーザーの便宜を図るために、上記で定義されたコマンドライン引数を再利用します。タスク名とスクリプトに渡されるコマンドラインオプションを区切る 2 つのダッシュ (--) に注意してください。

task dataset-import -- -a create-realms -r 10

ツールの詳細については、ツール task を使用した自動化 を参照してください。

データセットプロバイダー API

多数のレルムを作成

この HTTP REST リクエストを呼び出す必要があります。このリクエストは、10 個のレルムを作成するのに役立ちます。各レルムには、指定された量のロール、クライアント、グループ、およびユーザーが含まれます。

.../realms/master/dataset/create-realms?count=10

多数のクライアントを作成

これは、レルム realm-5 に 100 個の新しいクライアントを作成するリクエストです。各クライアントには、サービスアカウントが有効になっており、「client_id」-secret のようなシークレットがあります (クライアント client-156 の場合、たとえば client-156-secret)。

.../realms/master/dataset/create-clients?count=200&realm-name=realm-5

アクセスタイプ (bearer-onlyconfidential、または public) と、クライアントをサービスアカウントクライアントにするかどうかを、これら 2 つのパラメーターで構成することもできます。

...&client-access-type=bearer-only&service-account-client=false

多数のユーザーを作成

これは、realm-5 に 500 人の新しいユーザーを作成するリクエストです。各ユーザーには、create-realms エンドポイントによって既に作成された、指定された量のロール、クライアントロール、およびグループが含まれます。各ユーザーのパスワードは、「Username」-password のようになります。たとえば、user-156 のパスワードは user-156-password のようになります。

.../realms/master/dataset/create-users?count=1000&realm-name=realm-5

多数のグループを作成

グループは、レルムの作成の一部として作成されます。作成されるグループの数と構造は、次のパラメーターを使用して管理できます。

groups-per-realm

レルムあたりのグループの総数。デフォルト値は 20 です。

groups-with-hierarchy

true または false、デフォルト値は false です。デフォルト値では、トップレベルグループのみが作成されます。groups-with-hierarchy を true に設定すると、グループのツリー構造が作成されます。ツリーの深さはパラメーター groups-hierarchy-depth によって定義され、groups-count-each-level は、作成された各グループが持つサブグループの数を定義します。

groups-hierarchy-depth

グループツリー構造の深さ。デフォルト値は 3 です。デフォルト値では、トップレベルグループには groups-count-each-level 個のサブグループがあり、各サブグループには groups-count-each-level 個のサブグループがあります。このパラメーターは、groups-with-hierarchytrue の場合にのみアクティブになります。

groups-count-each-level

作成された各グループが持つサブグループの数。このパラメーターは、groups-with-hierarchytrue の場合にのみアクティブになります。

デフォルト値では、トップレベルグループのみが作成されます。groups-with-hierarchytrue に設定すると、groups-per-realm パラメーターは無視され、グループツリー構造は他のパラメーターによって定義されるように作成されます。groups-count-each-levelgroups-hierarchy-depth が作成されるグループの総数になります。階層型グループの実装は、groups-per-transaction を尊重します。採用されたサブグループの命名規則では、ドット (.) がグループ名で使用されており、以前のトランザクションで作成された場合でも、親グループを見つけることができます。

パラメーターの例
.../realms/master/dataset/create-realms?count=1&groups-with-hierarchy=true&groups-hierarchy-depth=3&groups-count-each-level=50

既存のレルムにグループを作成するには、create-groups エンドポイントを呼び出し、realm-name パラメーターを設定することもできます。

パラメーターの例
.../realms/master/dataset/create-groups?realm-name=realm-0&count=10&groups-with-hierarchy=true&groups-hierarchy-depth=3&groups-count-each-level=5

多数のイベントを作成

これは、プレフィックス realm- を持つ利用可能なレルムに 1000 万件の新しいイベントを作成するリクエストです。たとえば、realm-0realm-1、…​ realm-99 のような 100 個のレルムがある場合、それらの中にランダムに 1000 万件のイベントが作成されます。

.../realms/master/dataset/create-events?count=10000000

多数のオフラインセッションを作成

これは、プレフィックス realm- を持つ利用可能なレルムに 1000 万件の新しいオフラインセッションを作成するリクエストです。たとえば、realm-0realm-1、… realm-99 のような 100 個のレルムがある場合、それらの中にランダムに 1000 万件のイベントが作成されます。

.../realms/master/dataset/create-offline-sessions?count=10000000

多数のレルムを削除

デフォルトのレルムプレフィックス realm を持つすべてのレルムを削除するには

.../realms/master/dataset/remove-realms?remove-all=true

realm-prefix を使用して、デフォルトのレルムプレフィックスを変更できます。パラメーターを使用して、たとえば foorealm5 から foorealm15 までのすべてのレルムを削除できます。

.../realms/master/dataset/remove-realms?realm-prefix=foorealm&first-to-remove=5&last-to-remove=15

デフォルトパラメーターの変更

パラメーターを変更するには、DataSetConfig class を参照して、利用可能なパラメーターとデフォルト値、および特定のパラメーターが適用されるエンドポイントを確認してください。たとえば、プレフィックス foo を使用し、パスワードポリシーに使用されるハッシュ反復回数がわずか 1000 回 (デフォルトのハッシュアルゴリズムを使用) のレルムを作成するには、これらのパラメーターを使用できます。

.../realms/master/dataset/create-realms?count=10&realm-prefix=foo&password-hash-iterations=1000

別の例としては、以下のパラメーターを使用して、ハッシュ反復回数と組み合わせて特定のハッシュアルゴリズムを指定することが考えられます。

.../realms/master/dataset/create-realms?count=10&realm-prefix=foo&password-hash-algorithm=argon2&password-hash-iterations=1000

構成は HTTP エンドポイントがトリガーされるとサーバーログに書き込まれるため、進行状況と実際に適用されたパラメーターを監視できます。

新しいオブジェクトの作成は、自動的に次の利用可能なインデックスから開始されることに注意してください。たとえば、多数のクライアントを作成するために上記のエンドポイントをトリガーし、DB に既に 230 個のクライアント (client-0client-1、.. client-229) がある場合、HTTP リクエストは client-230 からクライアントの作成を開始します。

タスクがまだ実行中かどうかを確認

GET メソッドを使用して次の URL を呼び出します。

.../realms/master/dataset/status

タスクがまだ実行中の場合は、次のような情報が返されます。

{"status":"Task in progress","task-id":{"startTimeMs":"1662115169043","message":"Creation of 1 realms from realm-6 to realm-6"}}

実行中のタスクがない場合は、次のような情報が返されます。

{"status":"No task in progress. New task can be started"}

最後に完了したタスクの結果を確認

GET メソッドを使用して次の URL を呼び出します。

.../realms/master/dataset/status-completed

タスクがまだ実行中の場合は、次のような情報が返されます。

{"status":"previous task completed","task":{"success":"true","startTimeMs":"1662115169043","message":"Creation of 1 realms from realm-1 to realm-1","endTimeMs":"1662115173323"}}

完了したタスクがない場合は、ステータスコード 404 でこの情報が返されます。

{"status":"No completed task"}

最後に完了したタスクの結果をクリア

DELETE メソッドを使用して次の URL を呼び出します。

.../realms/master/dataset/status-completed

特定のオブジェクトの最後の項目を確認

最後に作成されたレルムインデックスを確認するには

.../realms/master/dataset/last-realm

指定されたレルムで最後に作成されたクライアントを確認するには

.../realms/master/dataset/last-client?realm-name=realm5

指定されたレルムで最後に作成されたユーザーを確認するには

.../realms/master/dataset/last-user?realm-name=realm5

組織のプロビジョニング

組織をプロビジョニングする前に、レルムを手動で作成またはプロビジョニングしてください。たとえば、次のように realm-0 レルムをプロビジョニングします。

.../realms/master/dataset/create-realms?count=1&users-per-realm=5000

その結果、realm-0 レルムに 5 千人のユーザーが作成されます。

これは、プレフィックス org- を持つレルムに 1000 個の組織を作成するリクエストです。

.../realms/realm-0/dataset/orgs/create?count=1000

または、指定された名前で単一の組織を作成することもできます。

realms/realm-0/dataset/orgs/create?name=myorg.com&domains=myorg.com,myorg.org,myorg.net&count=1

作成する各組織にリンクする必要があるメンバー (管理対象および管理対象外) とアイデンティティプロバイダーの数を指定することもできます。

.../realms/realm-0/dataset/orgs/create?count=1000&unmanaged-members-count=500&identity-providers-count=10

その結果、次の構成で 1 千個の組織が作成されます。

  • 500 人の管理対象外メンバー

  • 10 個のアイデンティティプロバイダー

アイデンティティプロバイダーごとに多数のアイデンティティプロバイダーマッパーを指定することも可能です。

.../realms/realm-0/dataset/orgs/create?count=1000&unmanaged-members-count=500&identity-providers-count=10&identity-provider-mappers-count=3

この場合、それぞれ 500 人の管理対象外メンバー、10 個のアイデンティティプロバイダー、および各アイデンティティプロバイダーに 3 つのアイデンティティプロバイダーマッパーを持つ 1 千個の組織。

特定の組織にデータをプロビジョニングすることもできます。たとえば、特定の組織にさらに多くのアイデンティティプロバイダーをプロビジョニングするには

.../realms/realm-0/dataset/orgs/org-0/identity-providers/create?count=1000

オプションで、アイデンティティプロバイダーごとに多数のアイデンティティプロバイダーマッパーを指定することも可能です。

.../realms/realm-0/dataset/orgs/org-0/identity-providers/create?count=1000&identity-provider-mappers-count=5

または、特定の組織にさらに多くの管理対象外メンバーをプロビジョニングするには

.../realms/realm-0/dataset/orgs/org-0/members/create-unmanaged?count=100

または、特定の組織にさらに多くの管理対象メンバーをプロビジョニングするには

.../realms/realm-0/dataset/orgs/org-0/members/create-managed?count=100

メンバーをプロビジョニングするときは、レルムに十分なユーザーを作成していることを確認してください。管理対象メンバーの場合は、組織にリンクされた少なくとも 1 つのアイデンティティプロバイダーも必要です。

組織を削除する場合は

.../realms/realm-0/dataset/orgs/org-0/remove