次の方法で共有


Azure Container Apps でルールベースのルーティングを使用する (プレビュー)

この記事では、Azure Container Apps でルールベースのルーティングを使用する方法について説明します。 ルールベースのルーティングでは、コンテナー アプリ環境に完全修飾ドメイン名 (FQDN) を作成します。 その後、ルールを使用して、各要求のパスに応じて、この FQDN の要求を異なるコンテナー アプリにルーティングします。

前提条件

  • アクティブなサブスクリプションが含まれる Azure アカウント。

  • Azure CLI をインストールします。

セットアップ

  1. 次のコマンドを実行して、CLI から Azure にサインインします。

    az login
    
  2. 最新バージョンの 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
    
  3. 最新の拡張機能またはモジュールがインストールされたので、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"

コンテナー アプリを作成する

  1. 次のコマンドを実行して、最初のコンテナー アプリを作成します。 このコンテナー アプリでは、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. 次のコマンドを実行して、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
    
  3. 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 コンテナー アプリ内の特定のリビジョンにルーティングします。
  4. 次のコマンドを実行して、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

  1. 両方のコンテナー アプリが既に存在することを確認します。

  2. 次の 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
    
  3. 次のコマンドを使用して Bicep ファイルをデプロイします。

    az deployment group create `
      --name $ROUTE_CONFIG_NAME `
      --resource-group $RESOURCE_GROUP `
      --template-file routing.bicep
    
  4. 出力で、HTTP ルート構成の完全修飾ドメイン名 (FQDN) を含む outputsを見つけます。 例えば次が挙げられます。

        "outputs": {
          "fqdn": {
            "type": "String",
            "value": "my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io"
          }
        },
    

HTTP ルートの構成を確認する

  1. パス /app1 を使って HTTP ルート構成 FQDN を参照します。

    たとえば、 my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io/app1と指定します。

    Container Apps のクイック スタート イメージが表示されます。

  2. パス /app2 を使って HTTP ルート構成 FQDN を参照します。

    たとえば、 my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io/app2と指定します。

    ASP.NET クイック スタートの画像が表示されます。

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

このアプリケーションの使用を継続しない場合は、次のコマンドを実行して、このクイックスタートで作成したすべてのリソースと共にリソース グループを削除します。

注意事項

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

az group delete --name my-container-apps