次の方法で共有


チュートリアル: コンテナー アプリをスケーリングする

Azure Container Apps では、宣言型スケーリング ルールのセットにより、自動水平スケーリングが管理されます。 コンテナー アプリがスケールアウトされるときは、コンテナー アプリの新しいインスタンスがオンデマンドで作成されます。 これらのインスタンスはレプリカと呼ばれます。

このチュートリアルでは、コンテナー アプリに HTTP スケール ルールを追加し、アプリケーションがどのようにスケーリングされるかを確認します。

前提条件

要件 Instructions
Azure アカウント Azure アカウントがない場合は、アカウントを無料で作成できます。

続行するには、Azure サブスクリプションの "共同作成者" アクセス許可が必要です。 詳細については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。
GitHub アカウント 1 つ無料で取得できます。
Azure CLI Azure CLI をインストールします。

セットアップ

CLI から Azure にサインインするには、次のコマンドを実行し、プロンプトに従って認証プロセスを完了します。

az login

最新バージョンの CLI を実行していることを確認するには、upgrade コマンドを実行します。

az upgrade

次に、CLI 用の Azure Container Apps 拡張機能をインストールまたは更新します。

Azure CLI で az containerapp コマンドを実行したとき、または PowerShell で Az.App モジュールのコマンドレットを実行したときに、パラメーターの不足に関するエラーが表示される場合は、最新バージョンの Azure Container Apps 拡張機能がインストールされていることを確認してください。

az extension add --name containerapp --upgrade

Note

2024 年 5 月以降、Azure CLI 拡張機能では、既定でプレビュー機能が有効になりません。 Container Apps のプレビュー機能にアクセスするには、--allow-preview true を使用して Container Apps 拡張機能をインストールします。

az extension add --name containerapp --upgrade --allow-preview true

最新の拡張機能またはモジュールがインストールされたので、Microsoft.App および Microsoft.OperationalInsights 名前空間を登録します。

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights

コンテナー アプリを作成してデプロイする

containerapp up コマンドを使用し、コンテナー アプリを作成してデプロイします。 このコマンドを実行すると、次のものが作成されます。

  • リソースグループ
  • Container Apps 環境
  • Log Analytics ワークスペース

これらのリソースのいずれかが既に存在する場合、コマンドは新しいリソースを作成するのではなく、既存のリソースを使用します。

最後に、このコマンドは、パブリック コンテナー イメージ ( mcr.microsoft.com/dotnet/samples:aspnetapp) を使用してコンテナー アプリを作成してデプロイします。 このイメージは、この記事で作成したスケール ルールをトリガーするために使用されます。 この手順を完了するために、.NET を知ったり使用したりする必要はありません。

az containerapp up \
  --name my-container-app \
  --resource-group my-container-apps \
  --location centralus \
  --environment 'my-container-apps' \
  --image mcr.microsoft.com/dotnet/samples:aspnetapp \
  --target-port 8080 \
  --ingress external \
  --query properties.configuration.ingress.fqdn \

Note

--image パラメーターの値が小文字 であることを確認してください。

--ingressexternal に設定すると、コンテナー アプリがパブリック要求で使用できるようになります。

up コマンドによって、コンテナー アプリの完全修飾ドメイン名 (FQDN) が返されます。 この FQDN をテキスト ファイルにコピーします。 [ 要求の送信 ] セクションで使用します。 FQDN は次の例のようになります。

https://my-container-app.icydune-96848328.centralus.azurecontainerapps.io

スケール ルールを追加する

az containerapp update コマンドを実行して、コンテナー アプリに HTTP スケール ルールを追加します。

az containerapp update \
    --name my-container-app \
    --resource-group my-container-apps \
    --min-replicas 1 \
    --max-replicas 10 \
    --scale-rule-name my-http-scale-rule \
    --scale-rule-http-concurrency 1

このコマンドを実行すると、my-http-scale-rule という名前と 1 のコンカレンシー設定を使用して、コンテナー アプリに HTTP スケール ルールが追加されます。 アプリが複数の同時 HTTP 要求を受信した場合、ランタイムによって、要求を処理するアプリのレプリカが作成されます。

update コマンドによって、要求が成功したことを確認するための JSON 応答として新しい構成が返されます。

ログ出力を開始する

Container Apps ランタイムによって生成されたログを表示することで、アプリケーション スケールの効果を確認できます。 az containerapp logs show コマンドを使用して、ログ エントリのリッスンを開始します。

az containerapp logs show \
    --name my-container-app \
    --resource-group my-container-apps \
    --type=system \
    --follow=true

show コマンドによって、コンテナー アプリのシステム ログからリアルタイムでエントリが返されます。 次の例のような応答が表示されるはずです。

{
    "TimeStamp":"2023-08-01T16:49:03.02752",
    "Log":"Connecting to the container 'my-container-app'..."
}
{
    "TimeStamp":"2023-08-01T16:49:03.04437",
    "Log":"Successfully Connected to container:
    'my-container-app' [Revision: 'my-container-app--9uj51l6',
    Replica: 'my-container-app--9uj51l6-5f96557ffb-5khg9']"
}
{
    "TimeStamp":"2023-08-01T16:47:31.9480811+00:00",
    "Log":"Microsoft.Hosting.Lifetime[14]"
}
{
    "TimeStamp":"2023-08-01T16:47:31.9481264+00:00",
    "Log":"Now listening on: http://[::]:80"
}
{
    "TimeStamp":"2023-08-01T16:47:31.9490917+00:00",
    "Log":"Microsoft.Hosting.Lifetime[0]"
}
{
    "TimeStamp":"2023-08-01T16:47:31.9491036+00:00",
    "Log":"Application started. Press Ctrl+C to shut down."
}
{
    "TimeStamp":"2023-08-01T16:47:31.949723+00:00",
    "Log":"Microsoft.Hosting.Lifetime[0]"
}
{
    "TimeStamp":"2023-08-01T16:47:31.9497292+00:00",
    "Log":"Hosting environment: Production"
}
{
    "TimeStamp":"2023-08-01T16:47:31.9497325+00:00",
    "Log":"Microsoft.Hosting.Lifetime[0]"
}
{
    "TimeStamp":"2023-08-01T16:47:31.9497367+00:00",
    "Log":"Content root path: /app/"
}

詳細については、「az containerapp logs」を参照してください。

要求を送信する

新しい bash シェルを開きます。 次のコマンドを実行し、<YOUR_CONTAINER_APP_FQDN> を、「コンテナー アプリを作成してデプロイする」セクションで保存したコンテナー アプリの完全修飾ドメイン名に置き換えます。

seq 1 50 | xargs -Iname -P10 curl "<YOUR_CONTAINER_APP_FQDN>"

これらのコマンドは、それぞれ 10 個の要求の同時実行バッチで、50 個の要求をコンテナー アプリに送信します。

コマンドまたは引数 説明
seq 1 50 1 から 50 までの数値のシーケンスを生成します。
| パイプ演算子は、xargs コマンドにシーケンスを送信します。
xargs 指定した URL を使用して curl を実行します。
-Iname seq の出力のプレースホルダーとして機能します。 この引数を指定すると、戻り値が curl コマンドに送信されなくなります。
curl 指定された URL を呼び出します。
-P10 一度に最大 10 個のプロセスを実行するように xargs に指示します。

詳細については、以下のドキュメントを参照してください。

az containerapp logs show コマンドを実行した最初のシェルでは、次のような 1 つ以上のログ エントリが出力に含まれるようになりました。

{
    "TimeStamp":"2023-08-01 18:09:52 +0000 UTC",
    "Type":"Normal",
    "ContainerAppName":"my-container-app",
    "RevisionName":"my-container-app--00001111",
    "ReplicaName":"my-container-app--00001111-aaaaa22222-bbbb",
    "Msg":"Replica 'my-container-app--00001111-aaaaa22222-bbbb' has been scheduled to run on a node.",
    "Reason":"AssigningReplica",
    "EventSource":"ContainerAppController",
    "Count":0
}

Azure portal でスケーリングを表示する (省略可能)

  1. Azure portal にサインインします。

  2. 上部の [検索] バーに「my-container-app」と入力します。

  3. 検索結果の [リソース] で、[my-container-app] を選択します

  4. 左側のナビゲーション バーで、[アプリケーション] を展開し、[スケールとレプリカ] を選択します。

  5. [スケールとレプリカ] ページで、[レプリカ] を選択します。

  6. コンテナー アプリで複数のレプリカが実行されるようになりました。

    コンテナー アプリのレプリカのスクリーンショット。

    新しいレプリカを表示するには、[ 最新の情報に更新 ] を選択する必要がある場合があります。

  7. 左側のナビゲーション バーで、[監視] を展開し、[メトリック] を選択します。

  8. [メトリック] ページで、[メトリック][要求] に設定します。

  9. [分割の適用] を選択します。

  10. [値] ドロップダウンを展開し、[レプリカ] をオンにします。

  11. 青いチェックマーク アイコンを選択して、分割の編集を完了します。

  12. グラフには、コンテナー アプリが受信した要求がレプリカ別に分割されて表示されます。

    要求がレプリカ別に分割されて表示されているコンテナー アプリのメトリック グラフ。

  13. 既定では、グラフのスケールは過去 24 時間 (時間の細分性は 15 分) に設定されています。 スケールを選択し、過去 30 分間 (時間の細分性は 1 分) に変更します。 [適用] ボタンを選択します。

  14. グラフを選択し、ドラッグして、コンテナー アプリが受信した要求の最近の増加を強調表示します。

    30 分間のスケール (時間の細分性は 1 分) で、要求がレプリカ別に分割されて表示されているコンテナー アプリのメトリック グラフのスクリーンショット。

    次のスクリーンショットは、コンテナー アプリが受信した要求がレプリカ間でどのように分割されるのかを表す拡大ビューを示しています。

    要求がレプリカ別に分割されて表示されているコンテナー アプリのメトリック グラフ (拡大ビュー) のスクリーンショット。

CPU とメモリのスケーリング

可能な場合は 、CPU またはメモリ スケール ルールよりも HTTP スケール ルールを使用することをお勧めします。 CPU とメモリのスケーリングでは、コンテナー アプリをゼロにスケーリングすることはできません。

CPU またはメモリスケールルールを追加したら、 コンテナー アプリに要求を送信 し、 Azure portal でスケーリングを表示することで、それをテストできます。

スケール アプリに要求を送信した後、スケール ルールがトリガーされて新しいレプリカが作成されるまでに 1 分かかる場合があります。

CPU スケーリング

CPU スケーリングを使用すると、使用されている CPU の量に応じてアプリをスケールインまたはスケールアウトできます。

たとえば、使用率の値が 50 の CPU スケール ルールを作成した場合、すべてのレプリカの平均 CPU 使用率が 50%に達すると、Azure Container Apps によってコンテナー アプリのレプリカが作成されます。

CPU スケーリングでは、コンテナー アプリをゼロにスケーリングすることはできません。 このトリガーの詳細については、「 KEDA CPU スケール トリガー」を参照してください。

az containerapp update コマンドを実行して、コンテナー アプリに CPU スケール ルールを追加します。

Note

Azure CLI を使用して、既にスケール ルールがあるコンテナー アプリにスケール ルールを追加すると、新しいスケール ルールによって古いスケール ルールが置き換えられます。 複数のスケール ルールを追加する方法については、「 複数のスケール ルール」を参照してください。

次のコマンドを実行する前に、 <PLACEHOLDERS> を実際の値に置き換えます。 このチュートリアルでは、 <UTILIZATION>1に置き換えます。 これにより、すべてのレプリカの平均 CPU 使用率が 1%に達すると、コンテナー アプリがスケーリングされます。 この値はデモンストレーション専用です。 レプリカの数は、--max-replicas 10の実行時に指定したaz containerapp updateによって 10 個に制限されます。

az containerapp update \
    --name my-container-app \
    --resource-group my-container-apps \
    --min-replicas 1 \
    --max-replicas 10 \
    --scale-rule-name my-cpu-scale-rule \
    --scale-rule-type cpu \
    --scale-rule-metadata type=Utilization value=<UTILIZATION>

メモリのスケーリング

メモリスケーリングを使用すると、使用されているメモリの量に応じてアプリをスケールインまたはスケールアウトできます。

たとえば、使用率の値が 50 のメモリ スケール ルールを作成した場合、すべてのレプリカの平均メモリ使用率が 50%に達すると、Azure Container Apps によってコンテナー アプリのレプリカが作成されます。

メモリスケーリングでは、コンテナー アプリをゼロにスケーリングすることはできません。 このトリガーの詳細については、「 KEDA メモリ スケール トリガー」を参照してください。

az containerapp update コマンドを実行して、コンテナー アプリにメモリ スケール ルールを追加します。

Note

Azure CLI を使用して、既にスケール ルールがあるコンテナー アプリにスケール ルールを追加すると、新しいスケール ルールによって古いスケール ルールが置き換えられます。 複数のスケール ルールを追加する方法については、「 複数のスケール ルール」を参照してください。

次のコマンドを実行する前に、 <PLACEHOLDERS> を実際の値に置き換えます。 このチュートリアルでは、 <UTILIZATION>1に置き換えます。 これにより、すべてのレプリカの平均メモリ使用率が 1%に達すると、コンテナー アプリがスケーリングされます。 この値はデモンストレーション専用です。 レプリカの数は、--max-replicas 10の実行時に指定したaz containerapp updateによって 10 個に制限されます。

az containerapp update \
    --name my-container-app \
    --resource-group my-container-apps \
    --min-replicas 1 \
    --max-replicas 10 \
    --scale-rule-name my-memory-scale-rule \
    --scale-rule-type memory \
    --scale-rule-metadata type=Utilization value=<UTILIZATION>

複数のスケール ルール

Azure CLI を使用してコンテナー アプリに複数のスケール ルールを追加するには、YAML を使用する必要があります。

  1. az containerapp show コマンドを使用して、コンテナー アプリ構成を YAML にエクスポートします。

    az containerapp show \
        --name my-container-app \
        --resource-group my-container-apps \
        --output yaml > app.yaml
    
  2. propertiesの [>template>scale>rulesapp.yaml] セクションで、次のプロパティを追加します。 <PLACEHOLDERS> は、実際の値に置き換えます。

    ...
    properties:
    ...
      template:
    ...
        scale:
    ...
          rules:
            - name: cpu-scaling-rule
              custom:
                type: cpu
                metadata:
                  type: "Utilization"
                  value: "<CPU_UTILIZATION>"
            - name: memory-scaling-rule
              custom:
                type: memory
                metadata:
                  type: "Utilization"
                  value: "<MEMORY_UTILIZATION>"
    ...
    
  3. app.yaml コマンドを使用して、az containerapp updateからコンテナー アプリ構成をインポートします。

    az containerapp update \
      --name my-container-app \
      --resource-group my-container-apps \
      --yaml app.yaml
    

リソースをクリーンアップする

このアプリケーションを引き続き使用しない場合は、次のコマンドを実行して、このチュートリアルで作成したすべてのリソースと共にリソース グループを削除してください。

注意

次のコマンドを実行すると、指定されたリソース グループとそれに含まれるすべてのリソースが削除されます。 このチュートリアルの範囲外のリソースが指定されたリソース グループに存在する場合は、それらのリソースも削除されます。

az group delete --name my-container-apps

ヒント

問題がありますか。 GitHub の Azure Container Apps リポジトリでイシューを開いて、お知らせください。

次のステップ