Azure Container Apps では、宣言型スケーリング ルールのセットにより、自動水平スケーリングが管理されます。 コンテナー アプリのリビジョンがスケールアウトされるときは、リビジョンの新しいインスタンスがオンデマンドで作成されます。 これらのインスタンスはレプリカと呼ばれます。
このスケーリング動作をサポートするために、Azure Container Apps は KEDA (Kubernetes イベントドリブン自動スケーリング) を利用しています。 KEDA では、HTTP 要求、キュー メッセージ、CPU とメモリの負荷、Azure Service Bus、Azure Event Hubs、Apache Kafka、Redis などのイベント ソースなどのさまざまなメトリックに対するスケーリングがサポートされています。 詳細については、 KEDA ドキュメントのスケーラーを参照してください。
スケール ルールを追加または編集すると、コンテナー アプリの新しいリビジョンが作成されます。 リビジョンとは、コンテナー アプリの不変スナップショットです。 新しいリビジョンをトリガーする変更の種類を確認するには、リビジョンの変更の種類を参照します。
イベントドリブン Container Apps ジョブはスケーリング ルールを使用し、イベントに基づいて実行をトリガーします。
スケール定義
スケーリングは、制限、ルール、動作の組み合わせです。
制限は、コンテナー アプリがスケーリングする場合に可能なリビジョンあたりのレプリカの最小数と最大数を定義します。
スケールの制限 既定値 最小値 最大値 リビジョンごとの最小レプリカ数 0 0 構成可能なレプリカの最大数は 1,000 です。 リビジョンあたりのレプリカの最大数 10 1 構成可能なレプリカの最大数は 1,000 です。 ルールとは、レプリカを追加または削除するタイミングを決定するためにコンテナー アプリによって使用される条件です。
スケール ルール は、HTTP、TCP (伝送制御プロトコル)、またはカスタムとして実装されます。
動作 は、時間の経過に伴うスケールの決定を決定するためのルールと制限の組み合わせです。
スケールの動作は、スケールがどのように決定されるか説明します。
スケーリング ルールを定義するときは、次の点を考慮することが重要です:
- コンテナー アプリがゼロにスケーリングされている場合、利用料金は請求されません。
- 処理は行われていなくても、メモリ内に残っているレプリカは、より低い "アイドル" レートで課金される可能性があります。 詳細については、「課金」を参照してください。
- リビジョンのインスタンスが常に実行されるようにする場合は、レプリカの最小数を 1 以上に設定します。
スケール ルール
トリガーの 3 つのカテゴリによって、スケーリングの実行方法が決まります。
- HTTP: あなたのリビジョンに対する同時 HTTP 要求数に基づいています。
- TCP: リビジョンに対して同時に実行できる TCP 接続数に基づきます。
-
カスタム: 次のようなカスタム メトリックに基づいています。
- CPU
- 記憶
- サポートされているイベント ドリブン データ ソース:
- Azure Service Bus
- Azure Event Hubs
- Apache Kafka
- Redis
複数のスケール ルールを定義すると、いずれかのルールの最初の条件が満たされたときにコンテナー アプリでスケーリングが開始されます。
注記
Container Apps の関数を使用している場合、スケール ルールは関数のトリガーとバインディングに基づいて自動的に構成されます。 その結果、これらのアプリでは、Azure portal の [スケール ルールの追加] ボタンが無効になります。 このシナリオでは、手動によるスケール ルールの構成は不要であり、サポートもされていません。
HTTP
HTTP スケール ルールを使用すると、コンテナー アプリのリビジョンのスケーリング方法を決定する同時 HTTP 要求のしきい値を制御できます。 15 秒ごとに、同時要求数は、過去 15 秒間の要求数を 15 で割った値として計算されます。 Container Apps ジョブは HTTP スケーリング ルールをサポートしていません。
次の例では、リビジョンが最大 5 レプリカまでスケールアウトし、ゼロにスケールダウンできます。 スケーリング プロパティで、1 秒あたりの同時要求数を 100 に設定します。
例
http セクションで、HTTP スケール ルールを定義します。
| スケーリング プロパティ | 説明 | 既定値 | 最小値 | 最大値 |
|---|---|---|---|---|
concurrentRequests |
HTTP 要求数がこの値を超えると、レプリカがもう 1 つ追加されます。 レプリカは引き続き maxReplicas 量までプールに追加されます。 |
10 | 1 | 該当なし |
resource symbolicname 'Microsoft.App/containerApps@2025-02-02-preview' = {
...
properties: {
...
template: {
...
scale: {
maxReplicas: 0
minReplicas: 5
rules: [
{
name: 'http-rule'
http: {
metadata: {
concurrentRequests: '100'
}
}
}
]
}
}
}
}
注記
HTTP 以外のイベント スケール ルールの使用時には、コンテナー アプリの properties.configuration.activeRevisionsMode プロパティを single に設定します。
http セクションで、HTTP スケール ルールを定義します。
| スケーリング プロパティ | 説明 | 既定値 | 最小値 | 最大値 |
|---|---|---|---|---|
concurrentRequests |
HTTP 要求数がこの値を超えると、レプリカがもう 1 つ追加されます。 レプリカは引き続き maxReplicas 量までプールに追加されます。 |
10 | 1 | 該当なし |
{
...
"resources": {
...
"properties": {
...
"template": {
...
"scale": {
"minReplicas": 0,
"maxReplicas": 5,
"rules": [{
"name": "http-rule",
"http": {
"metadata": {
"concurrentRequests": "100"
}
}
}]
}
}
}
}
}
注記
HTTP 以外のイベント スケール ルールの使用時には、コンテナー アプリの properties.configuration.activeRevisionsMode プロパティを single に設定します。
--scale-rule-http-concurrency コマンドまたは create コマンドで update パラメーターを使用して、HTTP スケール ルールを定義します。
| CLI パラメーター | 説明 | 既定値 | 最小値 | 最大値 |
|---|---|---|---|---|
--scale-rule-http-concurrency |
同時に実行される HTTP 要求数がこの値を超えると、レプリカがもう 1 つ追加されます。 レプリカは引き続き max-replicas 量までプールに追加されます。 |
10 | 1 | 該当なし |
az containerapp create \
--name <CONTAINER_APP_NAME> \
--resource-group <RESOURCE_GROUP> \
--environment <ENVIRONMENT_NAME> \
--image <CONTAINER_IMAGE_LOCATION>
--min-replicas 0 \
--max-replicas 5 \
--scale-rule-name azure-http-rule \
--scale-rule-type http \
--scale-rule-http-concurrency 100
Azure portal でコンテナー アプリに移動します。
[スケール] を選択します。
[Edit and deploy](編集してデプロイ) を選択します。
[スケール] タブを選択します。
レプリカの最小範囲と最大範囲を選択します。
[追加] を選択します。
[ルール名] ボックスに、ルールの名前を入力します。
[種類] ドロップダウンから [HTTP スケーリング] を選びます。
[同時要求数] ボックスに、コンテナー アプリに指定する同時実行要求数を入力します。
TCP
TCP スケール ルールを使用すると、アプリのスケーリング方法を決定する同時 TCP 接続のしきい値を制御できます。 15 秒ごとに、コンカレント接続数は、過去 15 秒間の接続数を 15 で割った値として計算されます。 Container Apps ジョブは TCP スケーリング ルールをサポートしていません。
次の例では、コンテナー アプリのリビジョンが最大 5 レプリカまでスケールアウトし、ゼロにスケールダウンできます。 スケーリングしきい値では、1 秒あたりのコンカレント接続が 100 に設定されています。
例
tcp セクションでは、TCP スケール ルールを定義します。
| スケーリング プロパティ | 説明 | 既定値 | 最小値 | 最大値 |
|---|---|---|---|---|
concurrentConnections |
TCP のコンカレント接続数がこの値を超えると、レプリカがもう 1 つ追加されます。 同時接続の数が増えるにつれて、レプリカは引き続き maxReplicas の量まで追加されます。 |
10 | 1 | 該当なし |
resource symbolicname 'Microsoft.App/containerApps@2025-02-02-preview' = {
...
properties: {
...
template: {
...
scale: {
maxReplicas: 0
minReplicas: 5
rules: [
{
name: 'tcp-rule'
http: {
metadata: {
concurrentConnections: '100'
}
}
}
]
}
}
}
}
tcp セクションで、TCP スケール ルールを定義します。
| スケーリング プロパティ | 説明 | 既定値 | 最小値 | 最大値 |
|---|---|---|---|---|
concurrentConnections |
TCP のコンカレント接続数がこの値を超えると、レプリカがもう 1 つ追加されます。 同時接続の数が増えるにつれて、レプリカは引き続き maxReplicas の量まで追加されます。 |
10 | 1 | 該当なし |
{
...
"resources": {
...
"properties": {
...
"template": {
...
"scale": {
"minReplicas": 0,
"maxReplicas": 5,
"rules": [{
"name": "tcp-rule",
"tcp": {
"metadata": {
"concurrentConnections": "100"
}
}
}]
}
}
}
}
}
--scale-rule-tcp-concurrency コマンドまたは create コマンドで update パラメーターを使用して、TCP スケール ルールを定義します。
| CLI パラメーター | 説明 | 既定値 | 最小値 | 最大値 |
|---|---|---|---|---|
--scale-rule-tcp-concurrency |
TCP のコンカレント接続数がこの値を超えると、レプリカがもう 1 つ追加されます。 コンカレント接続の数が増えるにつれて、max-replicas の数までレプリカが追加されます。 |
10 | 1 | 該当なし |
az containerapp create \
--name <CONTAINER_APP_NAME> \
--resource-group <RESOURCE_GROUP> \
--environment <ENVIRONMENT_NAME> \
--image <CONTAINER_IMAGE_LOCATION>
--min-replicas 0 \
--max-replicas 5 \
--transport tcp \
--ingress <external/internal> \
--target-port <CONTAINER_TARGET_PORT> \
--scale-rule-name azure-tcp-rule \
--scale-rule-type tcp \
--scale-rule-tcp-concurrency 100
Azure portal ではサポートされていません。 Azure CLI、Azure Resource Manager、または Bicep を使用して、TCP スケールルールを構成します。
カスタム
次の既定値を使用して、任意の ScaledObject ベースの KEDA スケーラー を基にコンテナー アプリのカスタム スケール ルールを作成できます。
| 既定値 | 秒数 |
|---|---|
| [ポーリング間隔] | 30 |
| クールダウン期間 | 300 |
注記
クールダウン期間は、最終的なレプリカから 0 にスケールインする場合にのみ有効です。 クール ダウン期間は、他のレプリカが削除されるため、スケーリングには影響しません。
イベントドリブン Container Apps ジョブの場合は、任意の ScaledJob ベースのKEDA スケーラーを基にカスタム スケール ルールを作成できます。
カスタム スケール ルールを作成する方法を、次の例に示します。
例
この例では、Azure Service Bus スケーラーをコンテナー アプリのスケール ルールに変換する方法を示しますが、他の ScaledObject ベースの KEDA スケーラー 仕様にも同じプロセスを使用します。
認証では、KEDA スケーラーの認証パラメーターにより、Container Apps シークレット、またはマネージド ID が取得されます。
次の手順では、KEDA スケーラーをコンテナー アプリのスケールルールに変換する方法を示します。 このスニペットは、各セクションがテンプレート全体のコンテキストに収まる場所を示す Bicep テンプレートの抜粋です。
resource symbolicname 'Microsoft.App/containerApps@2025-02-02-preview' = {
...
properties: {
...
configuration: {
...
secrets: [
{
name: '<NAME>'
value: '<VALUE>'
}
]
}
template: {
...
scale: {
maxReplicas: 0
minReplicas: 5
rules: [
{
name: '<RULE_NAME>'
custom: {
metadata: {
...
}
auth: [
{
secretRef: '<NAME>'
triggerParameter: '<PARAMETER>'
}
]
}
}
]
}
}
}
}
以下の例が Bicep テンプレートにどのように適合するかについては、この抜粋を参照してください。
まず、スケール ルールの種類とメタデータを定義します。
KEDA スケーラー仕様で、
type値を検索します。triggers: - type: azure-servicebus ⬅️ metadata: queueName: my-queue namespace: service-bus-namespace messageCount: "5"Bicep テンプレートで、スケール ルールの
typeプロパティにスケーラーのcustom.type値を入力します。... rules: [ { name: 'azure-servicebus-queue-rule' custom: { type: 'azure-servicebus' ⬅️ metadata: { queueName: 'my-queue' namespace: 'service-bus-namespace' messageCount: '5' } } } ] ...KEDA スケーラー仕様で、
metadata値を検索します。triggers: - type: azure-servicebus metadata: queueName: my-queue ⬅️ namespace: service-bus-namespace ⬅️ messageCount: "5" ⬅️Bicep テンプレートで、すべてのメタデータ値をスケール ルールの
custom.metadataセクションに追加します。... rules: [ { name: 'azure-servicebus-queue-rule' custom: { type: 'azure-servicebus' metadata: { queueName: 'my-queue' ⬅️ namespace: 'service-bus-namespace' ⬅️ messageCount: '5' ⬅️ } } } ] ...
認証
Container Apps スケール ルールでは、シークレットベースの認証がサポートされています。 Azure Queue Storage、Azure Service Bus、Azure Event Hubs を含む Azure リソースのスケール ルールでも、マネージド ID がサポートされます。 可能な場合は、マネージド ID 認証を使用して、アプリ内にシークレットを格納しないようにしてください。
シークレットを使用する
認証にシークレットを使用するには、コンテナー アプリの secrets 配列にシークレットを作成する必要があります。 シークレット値は、スケール ルールの auth 配列で使用されます。
KEDA スケーラーは、 プロパティにより参照される authenticationRef のシークレットを使用できます。 TriggerAuthentication オブジェクトをコンテナー アプリのスケール ルールにマップできます。
KEDA
TriggerAuthentication仕様によって参照されるScaledObjectオブジェクトを検索します。TriggerAuthenticationオブジェクトで、各secretTargetRefとそれに関連付けられているシークレットを見つけます。apiVersion: v1 kind: Secret metadata: name: my-secrets namespace: my-project type: Opaque data: connection-string-secret: <SERVICE_BUS_CONNECTION_STRING> ⬅️ --- apiVersion: keda.sh/v1alpha1 kind: TriggerAuthentication metadata: name: azure-servicebus-auth spec: secretTargetRef: - parameter: connection ⬅️ name: my-secrets ⬅️ key: connection-string-secret ⬅️ --- apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: azure-servicebus-queue-rule namespace: default spec: scaleTargetRef: name: my-scale-target triggers: - type: azure-servicebus metadata: queueName: my-queue namespace: service-bus-namespace messageCount: "5" authenticationRef: name: azure-servicebus-authBicep テンプレートで、シークレットごとに次の手順を実行します。
スケール ルールの
auth配列にエントリを追加します。triggerParameterプロパティの値を、secretTargetRefのparameterプロパティの値に設定します。secretRefプロパティの値を、secretTargetRefのkeyプロパティの名前に設定します。resource symbolicname 'Microsoft.App/containerApps@2025-02-02-preview' = { ... properties: { ... configuration: { ... secrets: [ { ⬅️ name: 'connection-string-secret' ⬅️ value: '<SERVICE_BUS_CONNECTION_STRING>' ⬅️ } ⬅️ ] } template: { ... scale: { maxReplicas: 0 minReplicas: 5 rules: [ { name: 'azure-servicebus-queue-rule' custom: { type: 'azure-servicebus' metadata: { queueName: 'my-queue' namespace: 'service-bus-namespace' messageCount: '5' } auth: [ { secretRef: 'connection-string-secret' triggerParameter: 'connection' } ] } } ] } } } }
一部のスケーラーでは、環境変数内の値を参照するために、
FromEnvサフィックスを持つメタデータがサポートされています。 コンテナー アプリは、ARM テンプレートにリストされている環境変数の最初のコンテナーを確認します。セキュリティ関連の詳細については、「考慮事項」セクション を参照してください。
マネージド ID の使用
Container Apps スケール ルールでは、マネージド ID を使用して Azure サービスを認証できます。 次の Bicep テンプレートは、システム ベースのマネージド ID を渡して、Azure Queue スケーラーの認証を行います。
次のコードを使用する前に、 <> で囲まれたプレースホルダーを実際の値に置き換えます。
scale: {
minReplicas: 0
maxReplicas: 4
rules: [
{
name: 'azure-queue'
custom: {
type: 'azure-queue'
metadata: {
accountName: '<ACCOUNT_NAME>'
queueName: '<QUEUE_NAME>'
queueLength: '1'
},
identity: 'system'
}
}
]
}
スケール ルールでマネージド ID を使用する方法の詳細については、マネージド IDに関するページを参照してください。
次の手順では、KEDA スケーラーをコンテナー アプリのスケールルールに変換する方法を示します。 このスニペットは、各セクションがテンプレート全体のコンテキストに収まる場所を示す ARM テンプレートの抜粋です。
{
...
"resources": {
...
"properties": {
...
"configuration": {
...
"secrets": [
{
"name": "<NAME>",
"value": "<VALUE>"
}
]
},
"template": {
...
"scale": {
"minReplicas": 0,
"maxReplicas": 5,
"rules": [
{
"name": "<RULE_NAME>",
"custom": {
"metadata": {
...
},
"auth": [
{
"secretRef": "<NAME>",
"triggerParameter": "<PARAMETER>"
}
]
}
}
]
}
}
}
}
}
以下の例が ARM テンプレートにどのように適合するかについては、この抜粋を参照してください。
まず、スケール ルールの種類とメタデータを定義します。
KEDA スケーラー仕様で、
type値を検索します。triggers: - type: azure-servicebus ⬅️ metadata: queueName: my-queue namespace: service-bus-namespace messageCount: "5"ARM テンプレートで、スケール ルールの
typeプロパティにスケーラーのcustom.type値を入力します。... "rules": [ { "name": "azure-servicebus-queue-rule", "custom": { "type": "azure-servicebus", ⬅️ "metadata": { "queueName": "my-queue", "namespace": "service-bus-namespace", "messageCount": "5" } } } ] ...KEDA スケーラー仕様で、
metadata値を検索します。triggers: - type: azure-servicebus metadata: queueName: my-queue ⬅️ namespace: service-bus-namespace ⬅️ messageCount: "5" ⬅️ARM テンプレートで、すべてのメタデータ値をスケール ルールの
custom.metadataセクションに追加します。... "rules": [ { "name": "azure-servicebus-queue-rule", "custom": { "type": "azure-servicebus", "metadata": { "queueName": "my-queue", ⬅️ "namespace": "service-bus-namespace", ⬅️ "messageCount": "5" ⬅️ } } } ] ...
認証
Container Apps スケール ルールでは、シークレットベースの認証がサポートされています。 Azure Queue Storage、Azure Service Bus、Azure Event Hubs を含む Azure リソースのスケール ルールでも、マネージド ID がサポートされます。 可能な場合は、マネージド ID 認証を使用して、アプリ内にシークレットを格納しないようにしてください。
シークレットを使用する
認証にシークレットを使用するには、コンテナー アプリの secrets 配列にシークレットを作成する必要があります。 シークレット値は、スケール ルールの auth 配列で使用されます。
KEDA スケーラーは、 プロパティにより参照される authenticationRef のシークレットを使用できます。 TriggerAuthentication オブジェクトをコンテナー アプリのスケール ルールにマップできます。
KEDA
TriggerAuthentication仕様によって参照されるScaledObjectオブジェクトを検索します。TriggerAuthenticationオブジェクトで、各secretTargetRefとそれに関連付けられているシークレットを見つけます。apiVersion: v1 kind: Secret metadata: name: my-secrets namespace: my-project type: Opaque data: connection-string-secret: <SERVICE_BUS_CONNECTION_STRING> ⬅️ --- apiVersion: keda.sh/v1alpha1 kind: TriggerAuthentication metadata: name: azure-servicebus-auth spec: secretTargetRef: - parameter: connection ⬅️ name: my-secrets ⬅️ key: connection-string-secret ⬅️ --- apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: azure-servicebus-queue-rule namespace: default spec: scaleTargetRef: name: my-scale-target triggers: - type: azure-servicebus metadata: queueName: my-queue namespace: service-bus-namespace messageCount: "5" authenticationRef: name: azure-servicebus-authARM テンプレートで、シークレットごとに次の手順を実行します。
スケール ルールの
auth配列にエントリを追加します。triggerParameterプロパティの値を、secretTargetRefのparameterプロパティの値に設定します。secretRefプロパティの値を、secretTargetRefのkeyプロパティの名前に設定します。
{ ... "resources": { ... "properties": { ... "configuration": { ... "secrets": [ { ⬅️ "name": "connection-string-secret", ⬅️ "value": "<SERVICE_BUS_CONNECTION_STRING>" ⬅️ } ⬅️ ] }, "template": { ... "scale": { "minReplicas": 0, "maxReplicas": 5, "rules": [ { "name": "azure-servicebus-queue-rule", "custom": { "type": "azure-servicebus", "metadata": { "queueName": "my-queue", "namespace": "service-bus-namespace", "messageCount": "5" }, "auth": [ { ⬅️ "secretRef": "connection-string-secret", ⬅️ "triggerParameter": "connection" ⬅️ } ⬅️ ] } } ] } } } } }一部のスケーラーでは、環境変数内の値を参照するために、
FromEnvサフィックスを持つメタデータがサポートされています。 コンテナー アプリは、ARM テンプレートにリストされている環境変数の最初のコンテナーを確認します。セキュリティ関連の詳細については、「考慮事項」セクション を参照してください。
マネージド ID の使用
Container Apps スケール ルールでは、マネージド ID を使用して Azure サービスを認証できます。 次の ARM テンプレートは、Azure Queue スケーラーの認証用にシステムベースのマネージド ID を渡します。
次のコードを使用する前に、 <> で囲まれたプレースホルダーを実際の値に置き換えます。
"scale": {
"minReplicas": 0,
"maxReplicas": 4,
"rules": [
{
"name": "azure-queue",
"custom": {
"type": "azure-queue",
"metadata": {
"accountName": "<ACCOUNT_NAME>",
"queueName": "<QUEUE_NAME>",
"queueLength": "1"
},
"identity": "system"
}
}
]
}
スケール ルールでマネージド ID を使用する方法の詳細については、マネージド IDに関するページを参照してください。
KEDA スケーラー仕様で、
type値を検索します。triggers: - type: azure-servicebus ⬅️ metadata: queueName: my-queue namespace: service-bus-namespace messageCount: "5"CLI コマンドで、
--scale-rule-typeパラメーターを仕様のtype値に設定します。az containerapp create \ --name <CONTAINER_APP_NAME> \ --resource-group <RESOURCE_GROUP> \ --environment <ENVIRONMENT_NAME> \ --image <CONTAINER_IMAGE_LOCATION> --min-replicas 0 \ --max-replicas 5 \ --secrets "connection-string-secret=<SERVICE_BUS_CONNECTION_STRING>" \ --scale-rule-name azure-servicebus-queue-rule \ --scale-rule-type azure-servicebus \ ⬅️ --scale-rule-metadata "queueName=my-queue" \ "namespace=service-bus-namespace" \ "messageCount=5" \ --scale-rule-auth "connection=connection-string-secret"KEDA スケーラー仕様で、
metadata値を検索します。triggers: - type: azure-servicebus metadata: queueName: my-queue ⬅️ namespace: service-bus-namespace ⬅️ messageCount: "5" ⬅️CLI コマンドで、
--scale-rule-metadataパラメーターをメタデータ値に設定します。コマンド ラインで使用するために、値を YAML 形式からキーと値のペアに変換する必要があります。 各キーと値のペアをスペースで区切ります。
az containerapp create \ --name <CONTAINER_APP_NAME> \ --resource-group <RESOURCE_GROUP> \ --environment <ENVIRONMENT_NAME> \ --image <CONTAINER_IMAGE_LOCATION> --min-replicas 0 \ --max-replicas 5 \ --secrets "connection-string-secret=<SERVICE_BUS_CONNECTION_STRING>" \ --scale-rule-name azure-servicebus-queue-rule \ --scale-rule-type azure-servicebus \ --scale-rule-metadata "queueName=my-queue" \ ⬅️ "namespace=service-bus-namespace" \ ⬅️ "messageCount=5" \ ⬅️ --scale-rule-auth "connection=connection-string-secret"
認証
Container Apps スケール ルールでは、シークレットベースの認証がサポートされています。 Azure Queue Storage、Azure Service Bus、Azure Event Hubs を含む Azure リソースのスケール ルールでも、マネージド ID がサポートされます。 可能な場合は、マネージド ID 認証を使用して、アプリ内にシークレットを格納しないようにしてください。
シークレットを使用する
Container Apps スケール ルールのシークレットベースの認証を構成するには、コンテナー アプリでシークレットを構成し、スケール ルールでそれらを参照します。
KEDA スケーラーは、 プロパティが参照に使用する authenticationRef 内のシークレットをサポートします。
TriggerAuthentication オブジェクトを Container Apps スケール ルールにマップできます。
KEDA
TriggerAuthentication仕様によって参照されるScaledObjectオブジェクトを検索します。secretTargetRefオブジェクトの各TriggerAuthenticationを識別します。apiVersion: v1 kind: Secret metadata: name: my-secrets namespace: my-project type: Opaque data: connection-string-secret: <SERVICE_BUS_CONNECTION_STRING> ⬅️ --- apiVersion: keda.sh/v1alpha1 kind: TriggerAuthentication metadata: name: azure-servicebus-auth spec: secretTargetRef: - parameter: connection ⬅️ name: my-secrets ⬅️ key: connection-string-secret ⬅️ --- apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: azure-servicebus-queue-rule namespace: default spec: scaleTargetRef: name: my-scale-target triggers: - type: azure-servicebus metadata: queueName: my-queue namespace: service-bus-namespace messageCount: "5" authenticationRef: name: azure-servicebus-authCLI コマンドで、各
secretTargetRefエントリのパラメーターを設定します。--secretsパラメーターを使用してシークレット エントリを作成します。 シークレットが複数ある場合は、スペースで区切ります。--scale-rule-authパラメーターを使用して、認証エントリを作成します。 複数のエントリがある場合は、スペースで区切ります。
az containerapp create \ --name <CONTAINER_APP_NAME> \ --resource-group <RESOURCE_GROUP> \ --environment <ENVIRONMENT_NAME> \ --image <CONTAINER_IMAGE_LOCATION> --min-replicas 0 \ --max-replicas 5 \ --secrets "connection-string-secret=<SERVICE_BUS_CONNECTION_STRING>" \ ⬅️ --scale-rule-name azure-servicebus-queue-rule \ --scale-rule-type azure-servicebus \ --scale-rule-metadata "queueName=my-queue" \ "namespace=service-bus-namespace" \ "messageCount=5" \ --scale-rule-auth "connection=connection-string-secret" ⬅️
マネージド ID の使用
Container Apps スケール ルールでは、マネージド ID を使用して Azure サービスを認証できます。 次のコマンドは、ユーザー割り当てマネージド ID を持つコンテナー アプリを作成し、それを使用して Azure Queue スケーラーの認証を行います。
次のコードを使用する前に、 <> で囲まれたプレースホルダーを実際の値に置き換えます。
az containerapp create \
--resource-group <RESOURCE_GROUP> \
--name <APP_NAME> \
--environment <ENVIRONMENT_ID> \
--user-assigned <USER_ASSIGNED_IDENTITY_ID> \
--scale-rule-name azure-queue \
--scale-rule-type azure-queue \
--scale-rule-metadata "accountName=<AZURE_STORAGE_ACCOUNT_NAME>" "queueName=queue1" "queueLength=1" \
--scale-rule-identity <USER_ASSIGNED_IDENTITY_ID>
Azure portal でコンテナー アプリに移動します。
[スケール] を選択します。
[Edit and deploy](編集してデプロイ) を選択します。
スケールとレプリカ タブを選択します。
レプリカの最小範囲と最大範囲を選択します。
[追加] を選択します。
[ルール名] ボックスに、ルールの名前を入力します。
[種類] ドロップダウンから [カスタム] を選びます。
KEDA スケーラー仕様で、
type値を検索します。triggers: - type: azure-servicebus ⬅️ metadata: queueName: my-queue namespace: service-bus-namespace messageCount: "5"[カスタム ルール タイプ] ボックスに、スケーラー
type値を入力します。KEDA スケーラー仕様で、
metadata値を検索します。triggers: - type: azure-servicebus metadata: queueName: my-queue ⬅️ namespace: service-bus-namespace ⬅️ messageCount: "5" ⬅️ポータルで、[メタデータ] セクションを検索し、[追加] を選択します。 KEDA の
ScaledObject仕様メタデータ セクションに各項目の名前と値を入力します。
認証
Container Apps スケール ルールでは、シークレットベースの認証がサポートされています。 Azure Queue Storage、Azure Service Bus、Azure Event Hubs を含む Azure リソースのスケール ルールでも、マネージド ID がサポートされます。 可能な場合は、マネージド ID 認証を使用して、アプリ内にシークレットを格納しないようにしてください。
シークレットを使用する
コンテナー アプリで、参照するシークレットを作成します。
KEDA
TriggerAuthentication仕様によって参照されるScaledObjectオブジェクトを検索します。secretTargetRefオブジェクトの各TriggerAuthenticationを識別します。apiVersion: v1 kind: Secret metadata: name: my-secrets namespace: my-project type: Opaque data: connection-string-secret: <SERVICE_BUS_CONNECTION_STRING> --- apiVersion: keda.sh/v1alpha1 kind: TriggerAuthentication metadata: name: azure-servicebus-auth spec: secretTargetRef: - parameter: connection ⬅️ name: my-secrets ⬅️ key: connection-string-secret ⬅️ --- apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: azure-servicebus-queue-rule namespace: default spec: scaleTargetRef: name: my-scale-target triggers: - type: azure-servicebus metadata: queueName: my-queue namespace: service-bus-namespace messageCount: "5" authenticationRef: name: azure-servicebus-auth[認証] セクションで [追加] を選択して、各 KEDA の
secretTargetRefパラメーターに対するエントリを作成します。
マネージド ID の使用
マネージド ID 認証は、Azure portal ではサポートされていません。 マネージド ID を使って認証するには、Azure CLI または Azure Resource Manager を使用します。
既定の尺度規則
スケール ルールを作成しない場合は、既定のスケール ルールがコンテナー アプリに適用されます。
| トリガー | 最小レプリカ数 | 最大レプリカ数 |
|---|---|---|
| HTTP | 0 | 10 |
重要
イングレスを有効にしない場合は、スケール ルールを作成するか、minReplicas を 1 以上に設定してください。 イングレスが無効になっており、 minReplicas またはカスタム スケール ルールを定義していない場合、コンテナー アプリはゼロにスケーリングされ、バックアップを開始する方法はありません。
スケーリング動作
スケーリングの動作は次のとおりです。
| 行動 | 価値 |
|---|---|
| [ポーリング間隔] | 30 秒 |
| クールダウン期間 | 300 秒 |
| スケール アップ安定化期間 | 0 秒 |
| 縮小安定化期間 | 300 秒 |
| スケールアップ ステップ | 1, 4, 8, 16, 32, ...構成された最大レプリカ数まで |
| スケールダウン ステップ | シャットダウンする必要があるレプリカの 100% |
| スケーリング アルゴリズム | desiredReplicas = ceil(currentMetricValue / targetMetricValue) |
- ポーリング間隔 は、KEDA によってイベント ソースが照会される頻度です。 この値は、HTTP および TCP のスケールルールには適用されません。
- クール ダウン期間 は、最後のイベントが観察されてからアプリケーションが最小レプリカ数にスケールダウンするまでに経過した期間を示します。
- スケールアップ安定化期間は、スケールアップ条件が満たされてからスケールアップの決定を実行するまでの待機期間です。
- スケールダウン安定化期間は、スケールダウン条件が満たされてからスケールダウンの決定を実行するまでの待機期間です。
- スケールアップ手順 は、コンテナー アプリがスケールアウトされるときに追加されるレプリカの数です。1 から始まり、構成済みの最大レプリカ数まで 4、8、16、32 まで増加します。
- スケール ダウン手順 は、コンテナー アプリのスケールイン時に削除されるレプリカの数です。シャットダウンする必要があるレプリカの 100% が削除されます。
- スケーリング アルゴリズムは、現在必要なレプリカ数を計算するために使用される計算式です。
例
スケール ルールは次のようになります。
"minReplicas": 0,
"maxReplicas": 20,
"rules": [
{
"name": "azure-servicebus-queue-rule",
"custom": {
"type": "azure-servicebus",
"metadata": {
"queueName": "my-queue",
"namespace": "service-bus-namespace",
"messageCount": "5"
}
}
}
]
アプリがスケールアウトすると、KEDA は空のキューから始まり、次の手順を実行します:
-
my-queueを 30 秒ごとにチェックします。 - キューの長さが 0 の場合は、(1) に戻ります。
- キューの長さが 0 より大きい場合は、アプリを 1 にスケーリングします。
- キューの長さが 50 の場合は、
desiredReplicas = ceil(50/5) = 10と計算します。 - アプリを
min(maxReplicaCount, desiredReplicas, max(4, 2*currentReplicaCount))にスケーリングします。 - (1) に戻ります。
アプリが最大レプリカ数の 20 にスケーリングされた場合、スケーリングは同じ前の手順を実行します。 スケールダウンは、条件が 300 秒間満たされた場合 (スケール ダウン安定化期間) にのみ発生します。 キューの長さが 0 になると、KEDA はアプリを 0 にスケーリングするまで 300 秒間 (クールダウン期間) 待機します。
考慮事項
"複数のリビジョン" モードでは、新しいスケール トリガーを追加するとアプリケーションの新しいリビジョンが作成されますが、古いリビジョンも引き続き前のスケール ルールで使用できます。 [リビジョン管理] ページを使用してトラフィックの割り当てを管理してください。
アプリケーションがゼロにスケーリングされているとき、利用料金は発生しません。 価格の詳細については、「Azure Container Apps での課金」を参照してください。
Azure Container Apps 上のすべての .NET アプリに対してデータ保護を有効にする必要があります。 詳細については、「Azure Container Apps での ASP.NET Core アプリのデプロイとスケーリング」を参照してください。
既知の制限事項
垂直方向のスケーリングはサポートされていません。
レプリカの数は目標値であり、保証はされません。
Dapr アクターを使用して状態を管理しようとしている場合は、ゼロへのスケーリングがサポートされないことに注意してください。 Dapr では仮想アクターを使用して非同期呼び出しが管理されます。つまり、メモリ内表現は、ID や有効期間に関連付けられません。
プロキシ設定を使用した KEDA プロキシの 変更はサポートされていません。 NAT Gateway またはユーザー定義ルート (UDR) でワークロード プロファイルを使用してトラフィックをネットワーク アプライアンスに送信し、そこからトラフィックを検査またはプロキシすることを検討してください。