アプリケーション グループを使用してクライアント アプリケーションのリソースを管理する
- [アーティクル]
-
-
Azure Event Hubs を使用すると、アプリケーション グループを使用して Event Hubs に接続するクライアント アプリケーションのイベント ストリーミング ワークロードを管理することができます。 詳細については、「アプリケーション グループを使用したリソース管理」を参照してください。
この記事では、次のタスクを実行する方法について説明します。
- アプリケーション グループを作成します。
- アプリケーション グループを有効または無効にする
- しきい値の制限を定義し、アプリケーション グループに調整ポリシーを適用する
- 診断ログを使用して調整を検証する
注意
アプリケーション グループは、Premium レベルと Dedicated レベルでのみ使用できます。
アプリケーション グループを作成する
このセクションでは、Azure portal、CLI、PowerShell、Azure Resource Manager (ARM) テンプレートを使用してアプリケーション グループを作成する方法について説明します。
次の手順に従って、Azure portal を使用してアプリケーション グループを作成できます。
Event Hubs 名前空間に移動します。
左側のメニューの [設定] で [アプリケーション グループ] を選択します。
[アプリケーション グループ] ページで、コマンド バーにある [+ アプリケーション グループ] を選択します。
[アプリケーション グループの追加] ページで、以下の操作を行います。
アプリケーション グループの [名前] を指定します。
[有効] が選択されていることを確認します。 最初にアプリケーション グループを無効状態にするには、[有効] オプションをオフにします。 このフラグは、アプリケーション グループのクライアントが Event Hubs にアクセスできるかどうかを決定します。
[セキュリティ コンテキストの種類] で、[名前空間の共有アクセス ポリシー]、[イベント ハブの共有アクセス ポリシー]、または [Microsoft Entra アプリケーション] を選択します。アプリケーション グループでは、名前空間またはエンティティ (イベント ハブ) レベルでの SAS キーの選択がサポートされます。 アプリケーション グループを作成するときは、クライアント アプリケーションで使用される共有アクセス署名 (SAS) または Microsoft Entra アプリケーション ID のいずれかに関連付ける必要があります。
[名前空間の共有アクセス ポリシー] を選択した場合:
[SAS key name] (SAS キー名) には、このアプリケーション グループのセキュリティ コンテキストとして使用できる SAS ポリシーを選択します。 [SAS ポリシーの追加] を選択して、新しいポリシーを追加し、アプリケーション グループに関連付けることができます。
[Event Hubs の共有アクセス ポリシー] を選択した場合:
[SAS キー名] には、Event Hubs の [共有アクセス ポリシー] ページから SAS ポリシー名をコピーし、テキスト ボックスに貼り付けます
Microsoft Entra アプリケーションを選択した場合:
- Microsoft Entra Application (クライアント) ID には、Microsoft Entra アプリケーションまたはクライアント ID を指定します。
自動生成された [Client group ID] (クライアント グループ ID) (アプリケーション グループに関連付けられている一意の ID) を確認します。 アプリケーション ガバナンスのスコープ (名前空間またはエンティティ レベル) は、使用される Microsoft Entra アプリケーション ID のアクセス レベルによって異なります。 次の表は、さまざまなセキュリティ コンテキストの種類に対して自動生成されたクライアント グループ ID を示しています。
セキュリティ コンテキストの種類 |
自動生成されたクライアント グループ ID |
名前空間の共有アクセス キー |
NamespaceSASKeyName=<NamespaceLevelKeyName> |
Microsoft Entra アプリケーション |
AADAppID=<AppID> |
Event Hubs の共有アクセス キー |
EntitySASKeyName=<EntityLevelKeyName> |
Note
名前空間の共有アクセス キーを使用して作成されたすべての既存のアプリケーション グループは、SASKeyName
以降のクライアント グループ ID で引き続き動作します。 ただし、上記のように、すべての新しいアプリケーション グループに、更新されたクライアント グループ ID が設定されます。
ポリシーを追加するには、次の手順に従います。
ポリシーの [名前] を入力します。
[種類] には、[調整ポリシー] を選択します。
[メトリック ID] には、次のいずれかのオプションを選択します: [受信メッセージ]、[送信メッセージ]、[着信バイト数]、[発信バイト数]。 次の例では、[受信メッセージ] が選択されています。
[レート制限のしきい値] には、しきい値を入力します。 次の例では、受信メッセージ数のしきい値として 10000 が指定されています。
別のポリシーが追加されたページのスクリーンショットを次に示します。
次に、[アプリケーション グループの追加] ページで、[追加] を選択します。
アプリケーション グループの一覧にアプリケーション グループが表示されていることを確認します。
一覧内のアプリケーション グループの横にあるごみ箱アイコン ボタンを選択すると、一覧からアプリケーション グループを削除できます。
CLI コマンド az eventhubs namespace application-group create
を使用して、Event Hubs 名前空間または Event Hubs レベルでアプリケーション グループを作成します。 選択するセキュリティ コンテキストの種類に基づいて、-client-app-group-identifier を設定する必要があります。 サポートされているセキュリティ コンテキストの種類については、上記の表を確認してください
次の例では、Azure リソース グループ MyResourceGroup
内の名前空間 mynamespace
に myAppGroup
という名前のアプリケーション グループを作成します。 次の構成を使用します。
- 共有アクセス ポリシーがセキュリティ コンテキストとして使用されます。
- クライアント アプリ グループ ID が
NamespaceSASKeyName=<NameOfTheSASkey>
に設定されます。
Incoming messages
メトリックの最初の調整ポリシーでは、しきい値は 10000
です。
Incoming bytes
メトリックの 2 番目の調整ポリシーでは、しきい値は 20000
です。
az eventhubs namespace application-group create --namespace-name mynamespace \
-g MyResourceGroup \
--name myAppGroup \
--client-app-group-identifier NamespaceSASKeyName=keyname \
--throttling-policy-config name=policy1 metric-id=IncomingMessages rate-limit-threshold=10000 \
--throttling-policy-config name=policy2 metric-id=IncomingBytes rate-limit-threshold=20000
CLI コマンドの詳細については、「az eventhubs namespace application-group create
」を参照してください。
PowerShell コマンド New-AzEventHubApplicationGroup
を使用して、Event Hubs 名前空間または Event Hubs レベルでアプリケーション グループを作成します。 選択するセキュリティ コンテキストの種類に基づいて、-ClientAppGroupIdentifier を設定する必要があります。 サポートされているセキュリティ コンテキストの種類については、上記の表を確認してください
次の例では、New-AzEventHubThrottlingPolicyConfig
を使用して、アプリケーションに関連付けられる 2 つのポリシーを作成します。
Incoming bytes
メトリックの最初の調整ポリシーでは、しきい値は 12345
です。
Incoming messages
メトリックの 2 番目の調整ポリシーでは、しきい値は 23416
です。
次に、調整ポリシーと共有アクセス ポリシーをセキュリティ コンテキストとして指定することで、Azure リソース グループ myresourcegroup
内の名前空間 mynamespace
に myappgroup
という名前のアプリケーション グループを作成します。
$policy1 = New-AzEventHubThrottlingPolicyConfig -Name policy1 -MetricId IncomingBytes -RateLimitThreshold 12345
$policy2 = New-AzEventHubThrottlingPolicyConfig -Name policy2 -MetricId IncomingMessages -RateLimitThreshold 23416
New-AzEventHubApplicationGroup -ResourceGroupName myresourcegroup -NamespaceName mynamespace -Name myappgroup
-ClientAppGroupIdentifier NamespaceSASKeyName=myauthkey -ThrottlingPolicyConfig $policy1, $policy2
PowerShell コマンドの詳細については、「New-AzEventHubApplicationGroup
」を参照してください。
次の例は、ARM テンプレートを使用してアプリケーション グループを作成する方法を示しています。 この例では、アプリケーション グループは、クライアント AppGroupIdentifier
を NamespaceSASKeyName=contososaspolicy
として設定することで、既存の SAS ポリシー名 contososaspolicy
に関連付けられます。 アプリケーション グループ ポリシーは、ARM テンプレートでも定義されます。 選択するセキュリティ コンテキストの種類に基づいて、ClientAppGroupIdentifier を設定する必要があります。 サポートされているセキュリティ コンテキストの種類については、上記の表を確認してください
{
"type": "ApplicationGroups",
"apiVersion": "2022-01-01-preview",
"name": "[parameters('applicationGroupName')]",
"dependsOn": [
"[resourceId('Microsoft.EventHub/namespaces/', parameters('eventHubNamespaceName'))]",
"[resourceId('Microsoft.EventHub/namespaces/authorizationRules', parameters('eventHubNamespaceName'),parameters('namespaceAuthorizationRuleName'))]"
],
"properties": {
"ClientAppGroupIdentifier": "NamespaceSASKeyName=contososaspolicy",
"policies": [{
"Type": "ThrottlingPolicy",
"Name": "ThrottlingPolicy1",
"metricId": "IncomingMessages",
"rateLimitThreshold": 10
},
{
"Type": "ThrottlingPolicy",
"Name": "ThrottlingPolicy2",
"metricId": "IncomingBytes",
"rateLimitThreshold": 3951729
}
],
"isEnabled": true
}
}
アプリケーション グループを有効または無効にする
クライアント アプリケーションが Event Hubs 名前空間にアクセスできないようにするには、それらのアプリケーションを含むアプリケーション グループを無効にします。 アプリケーション グループを無効にすると、クライアント アプリケーションはデータを発行または使用できなくなります。 そのアプリケーション グループのクライアント アプリケーションから確立されているすべての接続が終了します。
このセクションでは、Azure portal、PowerShell、CLI、ARM テンプレートを使用してアプリケーション グループを有効または無効にする方法について説明します。
[Event Hubs 名前空間] ページで、左側のメニューの [アプリケーション グループ] を選択します。
有効または無効にするアプリケーション グループを選択します。
[Edit application group] (アプリケーション グループの編集) ページで、[有効] の横にあるチェックボックスをオフにしてアプリケーション グループを無効にしてから、ページの下部にある [更新] を選択します。 同様に、チェックボックスをオンにしてアプリケーション グループを有効にします。
アプリケーション グループを無効にするには、--is-enabled
を false
に設定した状態で az eventhubs namespace application-group update
コマンドを使用します。 同様に、アプリケーション グループを有効にするには、このプロパティを true
に設定し、コマンドを実行します。
次のサンプル コマンドは、リソース グループ myresourcegroup
内にある Event Hubs 名前空間 mynamespace
で、myappgroup
という名前のアプリケーション グループを無効にします。
az eventhubs namespace application-group update --namespace-name mynamespace -g myresourcegroup --name myappgroup --is-enabled false
アプリケーション グループを無効にするには、-IsEnabled
を false
に設定した状態で Set-AzEventHubApplicationGroup コマンドを使用します。 同様に、アプリケーション グループを有効にするには、このプロパティを true
に設定し、コマンドを実行します。
次のサンプル コマンドは、リソース グループ myresourcegroup
内にある Event Hubs 名前空間 mynamespace
で、myappgroup
という名前のアプリケーション グループを無効にします。
Set-AzEventHubApplicationGroup -ResourceGroupName myresourcegroup -NamespaceName mynamespace -Name myappgroup -IsEnabled false
次の ARM テンプレートは、isEnabled
プロパティを false
に設定することにより、既存の名前空間 (contosonamespace
) を更新してアプリケーション グループを無効にする方法を示しています。 アプリ グループの識別子は SASKeyName=RootManageSharedAccessKey
です。
Note
次のサンプルは、2 つの調整ポリシーも追加します。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"namespace_name": {
"defaultValue": "contosonamespace",
"type": "String"
},
"client-app-group-identifier": {
"defaultValue": "SASKeyName=RootManageSharedAccessKey",
"type": "String"
}
},
"resources": [
{
"type": "Microsoft.EventHub/namespaces/applicationGroups",
"apiVersion": "2022-01-01-preview",
"name": "[concat(parameters('namespace_name'), '/contosoappgroup')]",
"properties": {
"clientAppGroupIdentifier": "[parameters('client-app-group-identifier')]",
"isEnabled": false,
"policies": [
{
"type": "ThrottlingPolicy",
"name": "incomingmsgspolicy",
"metricId": "IncomingMessages",
"rateLimitThreshold": 10000
},
{
"type": "ThrottlingPolicy",
"name": "incomingbytespolicy",
"metricId": "IncomingBytes",
"rateLimitThreshold": 20000
}
]
}
}
]
}
調整ポリシーを適用する
アプリケーション グループまたは既存のアプリケーション グループを作成するときに、0 個以上のポリシーを追加できます。 たとえば、IncomingMessages
、IncomingBytes
、または OutgoingBytes
に関連する調整ポリシーを contosoAppGroup
に追加できます。 これらのポリシーは、SAS ポリシー contososaspolicy
を使用するクライアント アプリケーションのイベント ストリーミング ワークロードに適用されます。
アプリケーション グループの作成時にポリシーを追加する方法については、「アプリケーション グループを作成する」セクションを参照してください。
アプリケーション グループの作成後にポリシーを追加することもできます。
[Event Hubs 名前空間] ページで、左側のメニューの [アプリケーション グループ] を選択します。
ポリシーを追加、更新、または削除するアプリケーション グループを選択します。
[Edit application group] (アプリケーション グループの編集) ページで、次の手順を実行できます。
- 既存のポリシーの設定 (しきい値を含む) を更新する
- 新しいポリシーを追加する
az eventhubs namespace application-group policy add
を使用して、既存のアプリケーション グループにポリシーを追加します。
例:
az eventhubs namespace application-group policy add --namespace-name mynamespace -g MyResourceGroup --name myAppGroup --throttling-policy-config name=policy1 metric-id=OutgoingMessages rate-limit-threshold=10500 --throttling-policy-config name=policy2 metric-id=IncomingBytes rate-limit-threshold=20000
-ThrottingPolicyConfig
を適切な値に設定した状態で Set-AzEventHubApplicationGroup コマンドを使用します。
例:
$policyToBeAppended = New-AzEventHubThrottlingPolicyConfig -Name policy1 -MetricId IncomingBytes -RateLimitThreshold 12345
$appGroup = Get-AzEventHubApplicationGroup -ResourceGroupName myresourcegroup -NamespaceName mynamespace -Name myappgroup
$appGroup.ThrottlingPolicyConfig += $policyToBeAppended
Set-AzEventHubApplicationGroup -ResourceGroupName myresourcegroup -NamespaceName mynamespace -Name myappgroup -ThrottlingPolicyConfig $appGroup.ThrottlingPolicyConfig
次の ARM テンプレートは、既存の名前空間 (contosonamespace
) を更新して調整ポリシーを追加する方法を示しています。 アプリ グループの識別子は NamespaceSASKeyName=RootManageSharedAccessKey
です。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"namespace_name": {
"defaultValue": "contosonamespace",
"type": "String"
},
"client-app-group-identifier": {
"defaultValue": "NamespaceSASKeyName=RootManageSharedAccessKey",
"type": "String"
}
},
"resources": [
{
"type": "Microsoft.EventHub/namespaces/applicationGroups",
"apiVersion": "2022-01-01-preview",
"name": "[concat(parameters('namespace_name'), '/contosoappgroup')]",
"properties": {
"clientAppGroupIdentifier": "[parameters('client-app-group-identifier')]",
"isEnabled": true,
"policies": [
{
"type": "ThrottlingPolicy",
"name": "incomingmsgspolicy",
"metricId": "IncomingMessages",
"rateLimitThreshold": 10000
},
{
"type": "ThrottlingPolicy",
"name": "incomingbytespolicy",
"metricId": "IncomingBytes",
"rateLimitThreshold": 20000
}
]
}
}
]
}
調整ポリシーのしきい値を決定する
Azure Event Hubs では、アプリケーション メトリック ログ機能をサポートして、システム内の通常のスループットを監視し、それに応じてアプリケーション グループのしきい値が決定されます。 以下の手順に従って、しきい値を決定できます。
アプリケーション メトリック ログを選択されたカテゴリとして Event Hubs で診断設定を有効にし、宛先として Log Analytics を選択します。
調整ポリシーを使用せずに空のアプリケーション グループを作成します。
通常のスループットで、イベント ハブにメッセージやイベントを送信し続けます。
Log Analytics ワークスペースに移動し、AzureDiagnostics テーブルで適切なアクティビティ名 ((resource-governance-overview.md#throttling-policy---threshold-limits) に基づいた) のクエリを実行します。 次のサンプル クエリは、受信メッセージのしきい値を追跡するように設定されています。
AzureDiagnostics
| where ActivityName_s =="IncomingMessages"
| where Outcome_s =="Success"
Log Analytics ワークスペースで [グラフ] セクションを選択し、生成された時間を Y 軸、送信されたメッセージの数を X 軸とするグラフをプロットします。
この例では、通常のスループットでメッセージが 550 件を超えることはないということがわかります (予想される現在のスループット)。 この観察は、実際のしきい値を定義する際に役立ちます。
しきい値を決定したら、アプリケーション グループ内に新しい調整ポリシーを追加します。
イベントを発行または使用する
アプリケーション グループに調整ポリシーを正常に追加したら、contosoAppGroup
アプリケーション グループの一部であるクライアント アプリケーションを使用してイベントを発行または使用することで、調整動作をテストできます。 テストするには、AMQP クライアントまたは Kafka クライアント アプリケーションと、アプリケーション グループの作成に使用されたものと同じ SAS ポリシー名または Microsoft Entra アプリケーション ID を使用できます。
Note
クライアント アプリケーションが調整されると、データの公開または使用が遅くなるはずです。
アプリケーション グループを使用して調整を検証する
調整ポリシーのしきい値制限の決定と同様に、アプリケーション メトリック ログを使用して調整を検証し、詳細を見つけることができます。
次のクエリ例を使用して、特定の時間枠内のすべての調整された要求を確認できます。 調整が予想される操作に一致するように ActivityName を更新する必要があります。
AzureDiagnostics
| where Category =="ApplicationMetricsLogs"
| where ActivityName_s =="IncomingMessages"
| where Outcome_s =="Throttled"
プロトコル レベルの制限のため、調整された要求ログは、イベント ハブ内のコンシューマー操作 (OutgoingMessages
または OutgoingBytes
) に対して生成されません。 要求がコンシューマー側でスロットルされているときは、エグレス スループットの低下が観察されます。
次の手順