Partilhar via


Use o encaminhamento baseado em regras com o Azure Container Apps

Neste artigo, você aprenderá a usar o roteamento baseado em regras com os Aplicativos de Contêiner do Azure. Com o roteamento baseado em regras, você cria um nome de domínio totalmente qualificado (FQDN) em seu ambiente de aplicativos de contêiner. Em seguida, você usa regras para rotear solicitações desse FQDN para diferentes aplicativos de contêiner, dependendo do caminho de cada solicitação.

Pré-requisitos

Configuração

  1. Execute o seguinte comando para entrar no Azure a partir da CLI.

    az login
    
  2. Para garantir que você esteja executando a versão mais recente da CLI, execute o comando upgrade.

    az upgrade
    

    Ignore quaisquer avisos sobre módulos atualmente em uso.

  3. Agora que a extensão ou módulo atual está instalado, registre os Microsoft.App namespaces e Microsoft.OperationalInsights .

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

Criar variáveis de ambiente

Crie as seguintes variáveis de ambiente.

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"

Criar aplicativos de contêiner

  1. Execute o seguinte comando para criar seu primeiro aplicativo de contêiner. Esta aplicação de contentor utiliza a imagem de início rápido do 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. Execute o seguinte comando para criar seu segundo aplicativo de contêiner. Esta aplicação de contentor usa a imagem de início rápido do 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. Crie uma configuração de rota HTTP.

    Crie o seguinte arquivo e salve-o como 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
    

    Essa configuração define duas regras de roteamento para o tráfego HTTP.

    Propriedade Descrição
    description Rótulo legível por humanos para a regra
    routes.match.prefix Prefixo do caminho de URL a ser correspondido. Por exemplo, /api.
    routes.action.prefixRewrite O que substituir o prefixo correspondente antes de encaminhar.
    targets.containerApp O nome do aplicativo de contêiner para o qual a solicitação de rota correspondente é enviada.

    Essas regras permitem que caminhos diferentes no seu domínio sejam encaminhados para diferentes aplicativos de contêiner e, ao mesmo tempo, modificam o caminho da solicitação antes que ela chegue ao aplicativo de destino.

    Outras propriedades não listadas que podem afetar suas rotas incluem o seguinte.

    Propriedade Descrição
    route.match.path Definição de rota de correspondência exata.
    route.match.pathSeparatedPrefix Corresponde a rotas nos limites '/' em vez de qualquer texto. Por exemplo, se você definir o valor como /product, ele corresponderá em /product/1, mas não /product1em .
    route.match.caseSensitive Controla se os padrões de rota correspondem ou não à diferenciação de maiúsculas e minúsculas.
    target.label Encaminhar para uma revisão etiquetada específica dentro de uma aplicação container.
    target.revision Encaminhar para uma revisão específica dentro de um aplicativo de contêiner.
  4. Execute o seguinte comando para criar a configuração de rota 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
    

    O FQDN (nome de domínio totalmente qualificado) da configuração de rota HTTP é semelhante a este exemplo: my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io

  1. Verifique se ambos os aplicativos de contêiner já existem.

  2. Crie o seguinte arquivo Bicep e salve-o como 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. Implante o arquivo Bicep com o seguinte comando:

    az deployment group create `
      --name $ROUTE_CONFIG_NAME `
      --resource-group $RESOURCE_GROUP `
      --template-file routing.bicep
    
  4. No resultado, encontre outputs, que contém o nome de domínio totalmente qualificado (FQDN) da configuração da sua rota HTTP. Por exemplo:

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

Verificar a configuração da rota HTTP

  1. Aceda ao FQDN da configuração de rota HTTP com o caminho /app1.

    Por exemplo: my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io/app1.

    Você vê a imagem de introdução rápida dos aplicativos de contêiner.

  2. Aceda ao FQDN da configuração de rota HTTP com o caminho /app2.

    Por exemplo: my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io/app2.

    Você vê a imagem de início rápido do ASP.NET.

Limpeza de recursos

Se você não vai continuar a usar este aplicativo, execute o seguinte comando para excluir o grupo de recursos junto com todos os recursos criados neste início rápido.

Atenção

O comando a seguir exclui o grupo de recursos especificado e todos os recursos contidos nele. Se existirem recursos fora do escopo deste início rápido no grupo de recursos especificado, eles também serão excluídos.

az group delete --name my-container-apps