チュートリアル: コンテナー アプリをスケーリングする
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 拡張機能をインストールまたは更新します。
Azure CLI で az containerapp
コマンドを実行したとき、または Azure 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 ワークスペース
これらのリソースのいずれかが既に存在する場合、コマンドは新しいリソースを作成するのではなく、既存のリソースを使用します。
最後に、コマンドは、パブリック コンテナー イメージを使用してコンテナー アプリを作成し、デプロイします。
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
パラメーターの値が小文字 であることを確認してください。
--ingress
を external
に設定すると、コンテナー アプリがパブリック要求で使用できるようになります。
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 でスケーリングを表示する (省略可能)
- Azure portal にサインインします。
- 上部の [検索] バーに「my-container-app」と入力します。
- 検索結果の [リソース] で、[my-container-app] を選択します。
- 左側のナビゲーション バーで、[アプリケーション] を展開し、[Scale and replicas] (スケールとレプリカ) を選択します。
- [Scale and replicas] (スケールとレプリカ) ページで、[レプリカ] を選択します。
- コンテナー アプリで複数のレプリカが実行されるようになりました。
新しいレプリカを表示するには、[最新の情報に更新] を選択する必要がある場合があります。
左側のナビゲーション バーで、[監視] を展開し、[メトリック] を選択します。
[メトリック] ページで、[メトリック] を [要求] に設定します。
[分割の適用] を選択します。
[値] ドロップダウンを展開し、[レプリカ] をオンにします。
青いチェックマーク アイコンを選択して、分割の編集を完了します。
グラフには、コンテナー アプリが受信した要求がレプリカ別に分割されて表示されます。
既定では、グラフのスケールは過去 24 時間 (時間の細分性は 15 分) に設定されています。 スケールを選択し、過去 30 分間 (時間の細分性は 1 分) に変更します。 [適用] ボタンを選択します。
グラフを選択し、ドラッグして、コンテナー アプリが受信した要求の最近の増加を強調表示します。
次のスクリーンショットは、コンテナー アプリが受信した要求がレプリカ間でどのように分割されるのかを表す拡大ビューを示しています。
リソースをクリーンアップする
このアプリケーションを引き続き使用しない場合は、次のコマンドを実行して、このチュートリアルで作成したすべてのリソースと共にリソース グループを削除してください。
注意事項
次のコマンドを実行すると、指定されたリソース グループとそれに含まれるすべてのリソースが削除されます。 指定したリソース グループにこのチュートリアルの範囲外のリソースが含まれている場合、それらも削除されます。
az group delete --name my-container-apps
ヒント
問題がある場合は、 GitHub の Azure Container Apps リポジトリでイシューを開いて、お知らせください。