Compartilhar via


Usar o roteamento baseado em regra com aplicativos de contêiner do Azure

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

Pré-requisitos

Configuração

  1. Execute o comando a seguir para entrar no Azure por meio 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 em uso no momento.

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

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

Criar variáveis de ambiente

Crie as variáveis de ambiente a seguir.

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 comando a seguir para criar seu primeiro aplicativo de contêiner. Este aplicativo de contêiner usa a imagem Quickstart dos 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 comando a seguir para criar seu segundo aplicativo de contêiner. Este aplicativo de contêiner usa a imagem de início rápido 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 a configuração da rota HTTP.

    Crie o arquivo a seguir 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 tráfego HTTP.

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

    Essas regras permitem que caminhos diferentes em seu domínio roteiem para aplicativos de contêiner diferentes, modificando também o caminho da solicitação antes de chegar 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 do caminho de correspondência exata.
    route.match.pathSeparatedPrefix Corresponde a rotas em limites '/' em vez de qualquer texto. Por exemplo, se você definir o valor como /product, ele corresponderá /product/1, mas não /product1.
    route.match.caseSensitive Controla se os padrões de rota correspondem à diferenciação de maiúsculas e minúsculas.
    target.label Roteie-a para uma revisão rotulada específica em um aplicativo de contêiner.
    target.revision Redirecionar para uma revisão específica em um aplicativo de contêiner.
  4. Execute o comando a seguir 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 os dois aplicativos de contêiner já existem.

  2. Crie o arquivo Bicep a seguir 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. Na saída, localize outputs, que contém o FQDN (nome de domínio totalmente qualificado) da configuração de 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. Navegue até o FQDN da configuração da rota HTTP com o caminho /app1.

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

    Você verá a imagem de início rápido de Aplicativos de Contêiner.

  2. Navegue até o FQDN da configuração da rota HTTP com o caminho /app2.

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

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

Limpar os recursos

Caso não pretenda continuar usando este aplicativo, execute o comando a seguir para excluir o grupo de recursos junto com todos os recursos criados neste guia de início rápido.

Cuidado

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

az group delete --name my-container-apps