Azure Container Appsで Durable Task SDK アプリをホストする場合は、自動スケールを構成して、オーケストレーション、アクティビティ、またはエンティティのワークロードに基づいてレプリカの数がプラットフォームによって自動的に調整されるようにすることができます。
この記事では、次の方法について説明します。
- コンテナー アプリの最小レプリカ数と最大レプリカ数を設定します。
- Durable Task Scheduler の作業項目に応答するスケール ルールを追加します。
- Azure Developer CLI を使用して自動スケール サンプルをデプロイして確認します。
注
自動スケールは、Durable Task SDK を使用して構築され、Azure Container Apps でホストされているアプリでサポートされています。 この機能では、 azure-durabletask-scheduler KEDA スケーラーを使用します。
Important
minReplicasを 0 に設定すると、ゼロにスケールできます。これにより、アイドル時のコストは節約されますが、新しい作業項目が到着したときにコールド スタート待機時間が発生します。 ワークロードが待機時間の影響を受けやすい場合は、 minReplicas を 1 以上に設定します。
自動スケーラーを構成する
自動スケーラーの構成は、Azure ポータル、Bicep テンプレート、およびAzure CLIを使用して設定できます。
Azure portal で、コンテナー アプリに移動します。
左側のメニューから、[ アプリケーション>スケール] を選択します。
リビジョンの 最小レプリカ と 最大レプリカ の値を設定します。
[ 追加] を選択して新しいスケール ルールを作成します。 [種類] を [カスタム] に設定し、[Durable Task Scheduler] フィールドを構成します。
[ マネージド ID で認証 する] チェック ボックスがオンになっていることを確認し、スケジューラとタスク ハブ リソースにリンクされている ID を選択します。
保存を選びます。
| フィールド | 説明 | 例 |
|---|---|---|
| 最小レプリカ数 | 任意の時点でコンテナー リビジョンに許可されるレプリカの最小数。 | 1 |
| 最大レプリカ数 | 特定の時点でコンテナー リビジョンに許可されるレプリカの最大数。 | 10 |
| エンドポイント | スケーラーが接続する Durable Task Scheduler エンドポイント。 | https://dts-ID.centralus.durabletask.io |
| maxConcurrentWorkItemsCount(最大同時作業項目数) | 1 つのレプリカが同時に処理する作業項目の最大数。 値を小さくすると、スケーラーのレプリカの追加が早くなります。 CPU 負荷の高い作業の 1 から始めます。I/O バインド ワークロードでは増加します。 |
1 |
| taskhubName | スケジューラに接続されているタスク ハブの名前。 | taskhub-ID |
| 作業項目タイプ | ディスパッチされる作業項目の種類。 オプションには Orchestration、Activity、または Entity があります。 |
Orchestration |
| マネージド ID | スケジューラおよびタスク ハブ リソースにリンクされているユーザー割り当てマネージド ID またはシステム割り当てマネージド ID。 | /subscriptions/<SUB_ID>/resourceGroups/<RG>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<IDENTITY_NAME> |
チュートリアル: 自動スケール コンテナー アプリをデプロイする
既存のアプリで自動スケールが既に構成されていますか? このセクションはスキップできます。 実践的なチュートリアルが必要な場合は、次の手順に従って、Azure Developer CLI を使用して Autoscaling を Azure Container Apps サンプルにデプロイします。 このサンプルでは、関数チェーン パターンを使用する .NET Durable Task SDK アプリをデプロイし、事前構成済みの KEDA スケーラーを含めます。
注
このサンプルでは Durable Task .NET SDK を使用していますが、自動スケールは言語に依存しません。
前提条件
- .NET 8 SDK 以降
- Docker (イメージのビルド用)
- Azure Developer CLI
環境を設定する
Azure-Samples/Durable-Task-Schedulerディレクトリを複製します。git clone https://github.com/Azure-Samples/Durable-Task-Scheduler.gitAzure Developer CLI を使用してAzureで認証します。
azd auth login
Azure Developer CLI を使用してソリューションをデプロイする
AutoscalingInACAサンプル ディレクトリに移動します。cd /path/to/Durable-Task-Scheduler/samples/scenarios/AutoscalingInACAAzure Developer CLI 環境を初期化します (初回のみ必要)。
azd initリソースをプロビジョニングし、アプリケーションをデプロイします。
azd upターミナルでメッセージが表示されたら、次のパラメーターを指定します。
パラメーター 説明 環境名 すべてのAzureリソースを保持するために作成されたリソース グループのプレフィックス。 Azureの場所 リソースの Azure の場所。 Azure サブスクリプション リソースのAzure サブスクリプション。 この処理は、完了までに時間がかかる場合があります。
azd upコマンドが完了すると、CLI 出力に 2 つのAzure ポータル リンクが表示され、デプロイの進行状況が監視されます。 出力には、azd upがどのように機能するかも示されています。-
./infraを使用して、azd provisionディレクトリ内の指定されている Bicep ファイルを使用して、必要なすべての Azure リソースを作成して構成します。 Azure Developer CLI によってプロビジョニングされたら、Azure ポータルからこれらのリソースにアクセスできます。 Azure リソースをプロビジョニングするファイルは次のとおりです。main.parameters.jsonmain.bicep- 機能別に整理された
appリソース ディレクトリ -
coreテンプレートによって使用される Bicep モジュールを含むazd参照ライブラリ
-
azd deployを使用したコードのデプロイ
想定される出力
Packaging services (azd package) (✓) Done: Packaging service client - Image Hash: {IMAGE_HASH} - Target Image: {TARGET_IMAGE} (✓) Done: Packaging service worker - Image Hash: {IMAGE_HASH} - Target Image: {TARGET_IMAGE} Provisioning Azure resources (azd provision) Provisioning Azure resources can take some time. Subscription: SUBSCRIPTION_NAME (SUBSCRIPTION_ID) Location: West US 2 You can view detailed progress in the Azure portal: https://portal.azure.com/#view/HubsExtension/DeploymentDetailsBlade/~/overview/id/%2Fsubscriptions%SUBSCRIPTION_ID%2Fproviders%2FMicrosoft.Resources%2Fdeployments%2FCONTAINER_APP_ENVIRONMENT (✓) Done: Resource group: GENERATED_RESOURCE_GROUP (1.385s) (✓) Done: Virtual Network: VNET_ID (862ms) (✓) Done: Container Apps Environment: GENERATED_CONTAINER_APP_ENVIRONMENT (54.125s) (✓) Done: Container Registry: GENERATED_REGISTRY (1m27.747s) (✓) Done: Container App: SAMPLE_CLIENT_APP (21.39s) (✓) Done: Container App: SAMPLE_WORKER_APP (24.136s) Deploying services (azd deploy) (✓) Done: Deploying service client - Endpoint: https://SAMPLE_CLIENT_APP.westus2.azurecontainerapps.io/ (✓) Done: Deploying service worker - Endpoint: https://SAMPLE_WORKER_APP.westus2.azurecontainerapps.io/ SUCCESS: Your up workflow to provision and deploy to Azure completed in 10 minutes 34 seconds.-
デプロイが成功したことを確認する
Azure ポータルで、オーケストレーションが正常に実行されていることを確認します。
ターミナル出力からリソース グループ名をコピーします。
Azure portal にサインインし、そのリソース グループ名を検索します。
リソース グループの概要ページで、クライアント コンテナー アプリ リソースをクリックします。
[ 監視>ログ ストリーム] を選択します。
クライアント コンテナーが関数チェーン タスクをログに記録することを確認します。
リソース グループ ページに戻り、
workerコンテナーを選択します。[ 監視>ログ ストリーム] を選択します。
ワーカー コンテナーが関数チェーン タスクをログに記録することを確認します。
カスタム スケーラーについて
このサンプルには、 azure.yaml 構成ファイルが含まれています。
azd upを実行すると、Durable Task Scheduler のワークロードに基づいて自動的にスケーリングされるコンテナー アプリ用のカスタム スケーラーなど、サンプル ソリューション全体を Azure にデプロイしました。
カスタム スケーラー:
- タスク ハブ内の保留中のオーケストレーションの数を監視します。
- ワークロードの増加に合わせてワーカー レプリカの数をスケールアップします。
- 負荷が減少したときにスケールダウンします。
- 容量を需要に合わせることにより、効率的なリソース使用率を提供します。
スケーラーの構成を確認する
デプロイされたソリューションで自動スケールが正しく機能していることを確認します。
Azure ポータルで、worker アプリに移動します。
左側のメニューから、 アプリケーション>プロビジョニングとレプリカを選択します。
[ レプリカ ] タブを選択して、アプリケーションがスケールアウトされていることを確認します。
左側のメニューから、[ アプリケーション>スケール] を選択します。
スケール ルール名を選択して、スケーラーの設定を表示します。
関連するコンテンツ
- Durable Task Scheduler の概要
クイックスタート: Durable Task SDK アプリを Azure Container Apps にデプロイします - Azure Container Apps でスケーリング ルールを設定する
Azure Container Apps