Azure Container Apps で Durable Task SDK アプリの自動スケールを構成する

Azure Container Appsで Durable Task SDK アプリをホストする場合は、自動スケールを構成して、オーケストレーション、アクティビティ、またはエンティティのワークロードに基づいてレプリカの数がプラットフォームによって自動的に調整されるようにすることができます。

この記事では、次の方法について説明します。

  • コンテナー アプリの最小レプリカ数と最大レプリカ数を設定します。
  • Durable Task Scheduler の作業項目に応答するスケール ルールを追加します。
  • Azure Developer CLI を使用して自動スケール サンプルをデプロイして確認します。

自動スケールは、Durable Task SDK を使用して構築され、Azure Container Apps でホストされているアプリでサポートされています。 この機能では、 azure-durabletask-scheduler KEDA スケーラーを使用します。

Important

minReplicas0 に設定すると、ゼロにスケールできます。これにより、アイドル時のコストは節約されますが、新しい作業項目が到着したときにコールド スタート待機時間が発生します。 ワークロードが待機時間の影響を受けやすい場合は、 minReplicas1 以上に設定します。

自動スケーラーを構成する

自動スケーラーの構成は、Azure ポータル、Bicep テンプレート、およびAzure CLIを使用して設定できます。

  1. Azure portal で、コンテナー アプリに移動します。

  2. 左側のメニューから、[ アプリケーション>スケール] を選択します。

  3. リビジョンの 最小レプリカ最大レプリカ の値を設定します。

    Azure portal のスケーラー最小および最大レプリカ構成のスクリーンショット。

  4. [ 追加] を選択して新しいスケール ルールを作成します。 [種類] を [カスタム] に設定し、[Durable Task Scheduler] フィールドを構成します。

    Azure ポータルでのスケーラー用 Durable Task Scheduler 関連構成のスクリーンショット

  5. [ マネージド ID で認証 する] チェック ボックスがオンになっていることを確認し、スケジューラとタスク ハブ リソースにリンクされている ID を選択します。

  6. 保存を選びます。

フィールド 説明
最小レプリカ数 任意の時点でコンテナー リビジョンに許可されるレプリカの最小数。 1
最大レプリカ数 特定の時点でコンテナー リビジョンに許可されるレプリカの最大数。 10
エンドポイント スケーラーが接続する Durable Task Scheduler エンドポイント。 https://dts-ID.centralus.durabletask.io
maxConcurrentWorkItemsCount(最大同時作業項目数) 1 つのレプリカが同時に処理する作業項目の最大数。 値を小さくすると、スケーラーのレプリカの追加が早くなります。 CPU 負荷の高い作業の 1 から始めます。I/O バインド ワークロードでは増加します。 1
taskhubName スケジューラに接続されているタスク ハブの名前。 taskhub-ID
作業項目タイプ ディスパッチされる作業項目の種類。 オプションには OrchestrationActivity、または 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 を使用していますが、自動スケールは言語に依存しません。

前提条件

環境を設定する

  1. Azure-Samples/Durable-Task-Scheduler ディレクトリを複製します。

    git clone https://github.com/Azure-Samples/Durable-Task-Scheduler.git
    
  2. Azure Developer CLI を使用してAzureで認証します。

    azd auth login
    

Azure Developer CLI を使用してソリューションをデプロイする

  1. AutoscalingInACAサンプル ディレクトリに移動します。

    cd /path/to/Durable-Task-Scheduler/samples/scenarios/AutoscalingInACA
    
  2. Azure Developer CLI 環境を初期化します (初回のみ必要)。

    azd init
    
  3. リソースをプロビジョニングし、アプリケーションをデプロイします。

    azd up
    
  4. ターミナルでメッセージが表示されたら、次のパラメーターを指定します。

    パラメーター 説明
    環境名 すべてのAzureリソースを保持するために作成されたリソース グループのプレフィックス。
    Azureの場所 リソースの Azure の場所。
    Azure サブスクリプション リソースのAzure サブスクリプション。

    この処理は、完了までに時間がかかる場合があります。 azd up コマンドが完了すると、CLI 出力に 2 つのAzure ポータル リンクが表示され、デプロイの進行状況が監視されます。 出力には、azd up がどのように機能するかも示されています。

    • ./infra を使用して、azd provision ディレクトリ内の指定されている Bicep ファイルを使用して、必要なすべての Azure リソースを作成して構成します。 Azure Developer CLI によってプロビジョニングされたら、Azure ポータルからこれらのリソースにアクセスできます。 Azure リソースをプロビジョニングするファイルは次のとおりです。
      • main.parameters.json
      • main.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 ポータルで、オーケストレーションが正常に実行されていることを確認します。

  1. ターミナル出力からリソース グループ名をコピーします。

  2. Azure portal にサインインし、そのリソース グループ名を検索します。

  3. リソース グループの概要ページで、クライアント コンテナー アプリ リソースをクリックします。

  4. [ 監視>ログ ストリーム] を選択します。

  5. クライアント コンテナーが関数チェーン タスクをログに記録することを確認します。

    Azure portal でのクライアント コンテナーのログ ストリームのスクリーンショット。

  6. リソース グループ ページに戻り、 worker コンテナーを選択します。

  7. [ 監視>ログ ストリーム] を選択します。

  8. ワーカー コンテナーが関数チェーン タスクをログに記録することを確認します。

    Azure portal のワーカー コンテナーのログ ストリームのスクリーンショット。

カスタム スケーラーについて

このサンプルには、 azure.yaml 構成ファイルが含まれています。 azd upを実行すると、Durable Task Scheduler のワークロードに基づいて自動的にスケーリングされるコンテナー アプリ用のカスタム スケーラーなど、サンプル ソリューション全体を Azure にデプロイしました。

カスタム スケーラー:

  • タスク ハブ内の保留中のオーケストレーションの数を監視します。
  • ワークロードの増加に合わせてワーカー レプリカの数をスケールアップします。
  • 負荷が減少したときにスケールダウンします。
  • 容量を需要に合わせることにより、効率的なリソース使用率を提供します。

スケーラーの構成を確認する

デプロイされたソリューションで自動スケールが正しく機能していることを確認します。

  1. Azure ポータルで、worker アプリに移動します。

  2. 左側のメニューから、 アプリケーション>プロビジョニングとレプリカを選択します。

  3. [ レプリカ ] タブを選択して、アプリケーションがスケールアウトされていることを確認します。

    [リビジョンとレプリカ] ページのスクリーンショットで Azure portal にスケールされたレプリカが表示されています。

  4. 左側のメニューから、[ アプリケーション>スケール] を選択します。

  5. スケール ルール名を選択して、スケーラーの設定を表示します。