データセットの生成
このドキュメントでは、ロードテスト用のデータセットを生成するためにデータセットプロバイダーとその 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-only
、confidential
、または 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-hierarchy
がtrue
の場合にのみアクティブになります。 groups-count-each-level
-
作成された各グループが持つサブグループの数。このパラメーターは、
groups-with-hierarchy
がtrue
の場合にのみアクティブになります。
デフォルト値では、トップレベルグループのみが作成されます。groups-with-hierarchy
を true
に設定すると、groups-per-realm
パラメーターは無視され、グループツリー構造は他のパラメーターによって定義されるように作成されます。groups-count-each-level
groups-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-0
、realm-1
、… realm-99
のような 100 個のレルムがある場合、それらの中にランダムに 1000 万件のイベントが作成されます。
.../realms/master/dataset/create-events?count=10000000
多数のオフラインセッションを作成
これは、プレフィックス realm-
を持つ利用可能なレルムに 1000 万件の新しいオフラインセッションを作成するリクエストです。たとえば、realm-0
、realm-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-0
、client-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"}
特定のオブジェクトの最後の項目を確認
最後に作成されたレルムインデックスを確認するには
.../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