Share via


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

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

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

前提条件

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

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

セットアップ

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

az login

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

az upgrade

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

az extension add --name containerapp --upgrade

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

Note

Azure Container Apps リソースは、Microsoft.Web 名前空間から Microsoft.App 名前空間に移行されました。 詳細については、「2022 年 3 月に Microsoft.Web から Microsoft.App に名前空間を移行する」を参照してください。

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

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

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

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

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

最後に、コマンドは、パブリック コンテナー イメージを使用してコンテナー アプリを作成し、デプロイします。

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

注意

--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 \
    --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://[::]:8080"
}
{
	"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--9uj51l6",
	"ReplicaName":"my-container-app--9uj51l6-5f96557ffb-f795d",
	"Msg":"Replica 'my-container-app--9uj51l6-5f96557ffb-f795d' 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. 左側のナビゲーション バーで、[アプリケーション] を展開し、[Scale and replicas] (スケールとレプリカ) を選択します。
  5. [Scale and replicas] (スケールとレプリカ) ページで、[レプリカ] を選択します。
  6. コンテナー アプリで複数のレプリカが実行されるようになりました。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

注意事項

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

az group delete --name my-container-apps

ヒント

問題がある場合は、 GitHub の Azure Container Apps リポジトリでイシューを開いて、お知らせください。

次のステップ