この記事では、Azure Container Apps でルールベースのルーティングを使用する方法について説明します。 ルールベースのルーティングでは、コンテナー アプリ環境に完全修飾ドメイン名 (FQDN) を作成します。 その後、ルールを使用して、各要求のパスに応じて、この FQDN の要求を異なるコンテナー アプリにルーティングします。
前提条件
セットアップ
次のコマンドを実行して、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
注
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
環境変数を作成する
次の環境変数を作成します。
CONTAINER_APP_1_NAME="my-container-app-1"
CONTAINER_APP_1_IMAGE="mcr.microsoft.com/k8se/quickstart:latest"
CONTAINER_APP_1_TARGET_PORT="80"
CONTAINER_APP_2_NAME="my-container-app-2"
CONTAINER_APP_2_IMAGE="mcr.microsoft.com/dotnet/samples:aspnetapp"
CONTAINER_APP_2_TARGET_PORT="8080"
LOCATION="eastus"
RESOURCE_GROUP="my-container-apps"
ENVIRONMENT_NAME="my-container-apps-env"
ROUTE_CONFIG_NAME="my-route-config"
コンテナー アプリを作成する
次のコマンドを実行して、最初のコンテナー アプリを作成します。 このコンテナー アプリでは、Container Apps クイック スタート イメージを使用します。
az containerapp up \ --name $CONTAINER_APP_1_NAME \ --resource-group $RESOURCE_GROUP \ --___location $LOCATION \ --environment $ENVIRONMENT_NAME \ --image $CONTAINER_APP_1_IMAGE \ --target-port $CONTAINER_APP_1_TARGET_PORT \ --ingress external \ --query properties.configuration.ingress.fqdn
次のコマンドを実行して、2 つ目のコンテナー アプリを作成します。 このコンテナー アプリでは、ASP.NET クイック スタート イメージを使用します。
az containerapp up \ --name $CONTAINER_APP_2_NAME \ --resource-group $RESOURCE_GROUP \ --___location $LOCATION \ --environment $ENVIRONMENT_NAME \ --image $CONTAINER_APP_2_IMAGE \ --target-port $CONTAINER_APP_2_TARGET_PORT \ --ingress external \ --query properties.configuration.ingress.fqdn
HTTP ルート構成を作成します。
次のファイルを作成し、
routing.yml
として保存します。rules: - description: App 1 rule routes: - match: prefix: /app1 action: prefixRewrite: / targets: - containerApp: my-container-app-1 - description: App 2 rule routes: - match: path: /app2 action: prefixRewrite: / - match: path: / targets: - containerApp: my-container-app-2
この構成では、HTTP トラフィックの 2 つのルーティング規則を定義します。
プロパティ 説明 description
ルールについての人間が判読できるラベル routes.match.prefix
一致する URL パス プレフィックス。 たとえば、 /api
のようにします。routes.action.prefixRewrite
転送前に一致したプレフィックスを置き換えるもの。 targets.containerApp
一致するルート要求が送信されるコンテナー アプリの名前。 これらの規則を使用すると、ドメイン上のさまざまなパスが異なるコンテナー アプリにルーティングされる一方で、宛先アプリに到達する前に要求パスも変更されます。
ルートに影響する可能性がある一覧にないその他のプロパティには、次のようなものがあります。
プロパティ 説明 route.match.path
完全一致パスの定義。 route.match.pathSeparatedPrefix
任意のテキストではなく、'/' 境界上のルートと一致します。 たとえば、値を /product
に設定すると、/product/1
では一致しますが、/product1
では一致しません。route.match.caseSensitive
ルート パターンと大文字と小文字の区別が一致するかどうかを制御します。 target.label
コンテナー アプリ内の特定のラベル付きリビジョンにルーティングします。 target.revision
コンテナー アプリ内の特定のリビジョンにルーティングします。 次のコマンドを実行して、HTTP ルート構成を作成します。
az containerapp env http-route-config create \ --http-route-config-name $ROUTE_CONFIG_NAME \ --resource-group $RESOURCE_GROUP \ --name $ENVIRONMENT_NAME \ --yaml routing.yml \ --query properties.fqdn
HTTP ルート構成の完全修飾ドメイン名 (FQDN) は、次の例のようになります。
my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io
両方のコンテナー アプリが既に存在することを確認します。
次の Bicep ファイルを作成し、
routing.bicep
として保存します。resource containerAppsEnvironment 'Microsoft.App/managedEnvironments@2024-10-02-preview' = { name: 'my-container-apps-env' ___location: 'eastus' tags: {} properties: { workloadProfiles: [ { workloadProfileType: 'Consumption' name: 'Consumption' } ] } } resource httpRouteConfig 'Microsoft.App/managedEnvironments/httpRouteConfigs@2024-10-02-preview' = { parent: containerAppsEnvironment name: 'my-route-config' ___location: 'eastus' properties: { rules: [ { description: 'App 1 rule' routes: [ { match: { prefix: '/app1' } action: { prefixRewrite: '/' } } ] targets: [ { containerApp: 'my-container-app-1' } ] } { description: 'App 2 rule' routes: [ { match: { path: '/app2' } action: { prefixRewrite: '/' } } { match: { path: '/' } } ] targets: [ { containerApp: 'my-container-app-2' } ] } ] } } output fqdn string = httpRouteConfig.properties.fqdn
次のコマンドを使用して Bicep ファイルをデプロイします。
az deployment group create ` --name $ROUTE_CONFIG_NAME ` --resource-group $RESOURCE_GROUP ` --template-file routing.bicep
出力で、HTTP ルート構成の完全修飾ドメイン名 (FQDN) を含む
outputs
を見つけます。 例えば次が挙げられます。"outputs": { "fqdn": { "type": "String", "value": "my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io" } },
HTTP ルートの構成を確認する
パス
/app1
を使って HTTP ルート構成 FQDN を参照します。たとえば、
my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io/app1
と指定します。Container Apps のクイック スタート イメージが表示されます。
パス
/app2
を使って HTTP ルート構成 FQDN を参照します。たとえば、
my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io/app2
と指定します。ASP.NET クイック スタートの画像が表示されます。
リソースをクリーンアップする
このアプリケーションの使用を継続しない場合は、次のコマンドを実行して、このクイックスタートで作成したすべてのリソースと共にリソース グループを削除します。
注意事項
次のコマンドを実行すると、指定されたリソース グループとそれに含まれるすべてのリソースが削除されます。 このクイック スタートの範囲外のリソースが指定されたリソース グループに存在する場合は、それらのリソースも削除されます。
az group delete --name my-container-apps