Compartilhar via


Back-ends no Gerenciamento de API

APLICA-SE A: todas as camadas do Gerenciamento de API

Um back-end (ou back-end de API) no Gerenciamento de API é um serviço HTTP que implementa a API de front-end e suas operações.

Quando você importa determinadas APIs, o Gerenciamento de API configura automaticamente o back-end da API. Por exemplo, o Gerenciamento de API configura o serviço Web de backend ao importar:

Para outras APIs, como APIs dos serviços do Azure, você importa um recurso do Azure sem especificar explicitamente o serviço de back-end. Os exemplos incluem:

O Gerenciamento de API também dá suporte ao uso de outros recursos como um back-end de API, como:

Para esses back-ends, você pode criar uma entidade de back-end no Gerenciamento de API e referenciá-la em suas APIs.

Benefícios dos back-ends

O Gerenciamento de API dá suporte a entidades de back-end para que você possa gerenciar os serviços de back-end da sua API. Uma entidade de back-end encapsula informações sobre o serviço de back-end, promovendo a reutilização entre APIs e uma governança aprimorada.

Use back-ends para um ou mais dos seguintes recursos:

  • Autorizar as credenciais de solicitações para o serviço de back-end
  • Aproveite a funcionalidade de Gerenciamento de API para manter segredos no Azure Key Vault se os valores nomeados estiverem configurados para autenticação de parâmetro de cabeçalho ou consulta
  • Definir regras de disjuntor para proteger seu back-end contra o excesso de solicitações
  • Rotear ou balancear a carga de solicitações para vários back-ends

Configure e gerencie entidades de back-end no portal do Azure ou usando APIs ou ferramentas do Azure.

Criar um back-end

Você pode criar um back-end no portal do Azure ou usando APIs ou ferramentas do Azure.

Observação

Quando você importa determinadas APIs, como APIs do Microsoft Foundry ou outros serviços de IA, o Gerenciamento de API configura automaticamente uma entidade de back-end.

Para criar um back-end no portal:

  1. Entre no portal e vá para a instância de Gerenciamento de API.
  2. No menu à esquerda, selecione APIs>Back-ends>+ Criar novo back-end.
  3. Na página Back-end , conclua as seguintes etapas:
    1. Insira um nome para o back-end e uma descrição opcional.
    2. Selecione um tipo de hospedagem de back-end, como um recurso do Azure para um recurso do Azure, como um aplicativo de funções ou aplicativo lógico, URL personalizada para um serviço personalizado ou um cluster do Service Fabric .
    3. Na URL do Runtime, insira a URL do serviço de back-end para o qual as solicitações de API são encaminhadas.
    4. Em Avançado, opcionalmente, desabilite a cadeia de certificados ou a validação de nome de certificado para o back-end.
    5. Em Adicionar esse serviço de back-end a um pool de back-end, opcionalmente, selecione ou crie um pool com balanceamento de carga para o back-end.
    6. Na Regra do disjuntor, opcionalmente, configure um disjuntor para o back-end.
    7. Em credenciais de autorização, opcionalmente, configure as credenciais para autorizar o acesso ao back-end. As opções incluem um cabeçalho de solicitação, parâmetro de consulta, certificado do cliente ou identidade gerenciada atribuída pelo sistema ou atribuída pelo usuário configurada na instância de Gerenciamento de API.
    8. Selecione Criar.

Depois de criar um back-end, você pode atualizar as configurações de back-end a qualquer momento. Por exemplo, você pode adicionar uma regra de disjuntor, alterar a URL do runtime ou adicionar credenciais de autorização.

Configurar identidade gerenciada para credenciais de autorização

Você pode usar uma identidade gerenciada atribuída pelo sistema ou atribuída pelo usuário configurada na instância de Gerenciamento de API para autorizar o acesso ao serviço de back-end. Para configurar uma identidade gerenciada para credenciais de autorização, conclua as seguintes etapas:

  1. Na seção Credenciais de Autorização da configuração de back-end, selecione a guia Identidade Gerenciada e selecione Habilitar.

  2. Na identidade do cliente, selecione a identidade atribuída pelo sistema ou uma identidade atribuída pelo usuário que você configurou em sua instância.

  3. Na ID do Recurso, insira um serviço do Azure de destino ou a ID do aplicativo Microsoft Entra que representa o back-end. Por exemplo, insira https://cognitiveservices.azure.com para o serviço Azure OpenAI.

    Para obter mais exemplos, consulte a referência de política authentication-managed-identity.

  4. Selecione Criar.

Observação

Atribua também à identidade gerenciada as permissões apropriadas ou uma função RBAC para acessar o serviço de back-end. Por exemplo, se o back-end for um Serviço OpenAI do Azure, atribua a identidade gerenciada à função Cognitive Services User.

Configurar certificados para credenciais de autorização

Você pode proteger o acesso de gateway ao serviço de back-end usando autenticação TLS mútua com certificados de cliente ou certificados de autoridade de certificação (AC).

Configurar o certificado do cliente

Se o serviço de back-end for protegido com um certificado emitido por uma AC conhecida, você poderá adicionar um certificado de cliente na entidade de back-end:

  1. Adicione o certificado à instância de Gerenciamento de API. Você pode fazer referência a um certificado gerenciado no Azure Key Vault ou carregar um arquivo PFX.
  2. Na seção Credenciais de autorização da configuração de back-end, selecione a guia Certificados do cliente .
  3. Na lista suspensa, selecione o certificado do cliente que você deseja usar.
  4. Selecione Criar.

Configurar o certificado de Autoridade Certificadora

Se o serviço de back-end usar um certificado de AC personalizado, você poderá referenciar o certificado de AC personalizado na entidade de back-end. Talvez seja necessário fazer essa etapa para estabelecer a confiança para o certificado do servidor de back-end, por exemplo, com certificados autoassinados, certificados raiz não confiáveis ou cadeias de certificados parciais.

Observação

Atualmente, você só pode configurar os detalhes do certificado de Autoridade de Certificação em uma entidade de back-end nas camadas v2.

Para adicionar detalhes do certificado de autoridade de certificação, siga estas etapas:

  1. Na seção Credenciais de Autorização da configuração de back-end, selecione Certificados CA.
  2. Selecione + Adicionar detalhes do certificado de Autoridade Certificadora.
  3. No painel Adicionar certificado de AC , selecione uma das seguintes opções:
    • Impressão digital do certificado – insira a impressão digital (um hash SHA-1, SHA-256 ou SHA-512) de um certificado de AC personalizado.
    • Nome da entidade e impressão digital do emissor – insira o nome da entidade que identifica exclusivamente a AC e a impressão digital da AC.
  4. Selecione Adicionar.
  5. Selecione Criar.

Captura de tela da configuração de detalhes do certificado de AC para um back-end no portal.

Observação

Quando você configura detalhes de um certificado de Autoridade de Certificação personalizado na entidade de back-end, o Gerenciamento de API sempre valida o nome do certificado e a cadeia de certificados, independentemente de você habilitar ou desabilitar as configurações de validação no backendTlsProperties do back-end.

Dica

Você também pode configurar os detalhes do certificado de CA programaticamente usando a API REST de Gerenciamento de APIs. Defina o backendTlsProperties na entidade de backend.

Mencione o back-end que estiver usando a política set-backend-service

Depois de criar um back-end, você pode referenciar o identificador de back-end (nome) em suas APIs. Use a política set-backend-service para direcionar para o back-end uma solicitação de API sendo recebida. Se já tiver configurado um serviço web de back-end para uma API, você poderá usar a política set-backend-service para, em vez disso, redirecionar a solicitação para uma entidade de back-end. Por exemplo:

<policies>
    <inbound>
        <base />
        <set-backend-service backend-id="myBackend" />
    </inbound>
    [...]
<policies/>

Observação

Alternativamente, você pode utilizar base-url. Normalmente, o formato é https://backend.com/api. Evite adicionar uma barra no final para evitar configurações incorretas. Normalmente, o base-url e o valor do ponto de extremidade HTTP(S) no back-end devem corresponder para habilitarem a integração perfeita entre front-end e back-end. Observe que as instâncias de Gerenciamento de API acrescentam o nome do serviço de back-end ao base-url.

Você pode usar uma lógica condicional com a política set-backend-service para alterar o back-end efetivo com base na localização, no gateway que foi chamado ou em outras expressões.

Por exemplo, aqui temos uma política para rotear o tráfego para outro backend com base no gateway chamado:

<policies>
    <inbound>
        <base />
        <choose>
            <when condition="@(context.Deployment.Gateway.Id == "factory-gateway")">
                <set-backend-service backend-id="backend-on-prem" />
            </when>
            <when condition="@(context.Deployment.Gateway.IsManaged == false)">
                <set-backend-service backend-id="self-hosted-backend" />
            </when>
            <otherwise />
        </choose>
    </inbound>
    [...]
<policies/>

Dica

O Gerenciamento de API também detecta e usa automaticamente entidades de back-end quando recebe solicitações de API. Em runtime, se houver uma entidade de back-end que corresponda à URL de um serviço de back-end para o qual o Gerenciamento de API está enviando uma solicitação, ele usará a entidade de back-end. Você não precisa usar set-backend-serviceexplicitamente .

Disjuntor

O Gerenciamento de API expõe uma propriedade de disjuntor no recurso de back-end para proteger um serviço de back-end de ser sobrecarregado por muitas solicitações.

  • A propriedade do disjuntor define regras para acionar o disjuntor, como o número ou porcentagem de condições de falha durante um intervalo de tempo definido e uma faixa de códigos de status que indicam falhas.
  • Quando o disjuntor é acionado, o Gerenciamento de API para de enviar solicitações para o serviço de back-end por um tempo definido e retorna uma resposta 503 Serviço Indisponível ao cliente.
  • Após a duração configurada da viagem, o circuito é reiniciado e o tráfego é retomado para o back-end.

O disjuntor de back-end é uma implementação do padrão de disjuntor para permitir que o back-end se recupere de situações de sobrecarga. Ele aumenta as políticas gerais de limitação de taxa e de limitação de simultaneidade que você pode implementar para proteger o gateway do Gerenciamento de API e seus serviços de back-end.

Observação

  • Atualmente, não há suporte para os disjuntores de back-end no nível Consumo do Gerenciamento de API.
  • Devido à natureza distribuída da arquitetura do Gerenciamento de API, as regras de desarme de disjuntor são aproximadas. Instâncias diferentes do gateway não são sincronizadas e aplicarão regras de disjuntor com base nas informações da mesma instância.
  • Atualmente, você pode configurar apenas uma regra para um disjuntor de back-end.

Cuidado

Se você configurar um Serviço OpenAI do Azure como um back-end e o serviço receber muitas solicitações, ele retornará um código de status de resposta 429 Too Many Requestse um cabeçalho Retry-After com um valor que pode ser grande (por exemplo, 1 dia). Com back-ends do OpenAI do Azure, implemente regras de disjuntor para lidar com as respostas de 429 e aceitar a duração Retry-After.

Exemplo

Use o portal do Azure, a API REST de Gerenciamento de API ou um modelo Bicep ou ARM para configurar um disjuntor em um back-end. No exemplo a seguir, o disjuntor em myBackend na instância do Gerenciamento de API myAPIM é acionado quando há três ou mais códigos de status 5xx indicando erros de servidor em 1 hora.

O disjuntor neste exemplo é reiniciado após 1 hora. Se um cabeçalho Retry-After estiver presente na resposta, o disjuntor aceitará o valor e aguardará o tempo especificado antes de enviar solicitações para o back-end novamente.

  1. No portal do Azure, acesse sua instância de Gerenciamento de API.
  2. No menu à esquerda, selecione APIs>Back-ends> no seu back-end.
  3. Na página de back-end, selecione Configurações>Configurações do disjuntor>Adicionar novo.
  4. Na página Criar novo disjuntor , configure a regra:
    • Nome da regra: insira um nome para a regra, como myBackend.
    • Contagem de falhas: Insira 3.
    • Intervalo de falha: deixe o valor padrão de 1 hora.
    • Intervalo de códigos de status de falha: selecione 500 a 599.
    • Duração da viagem: deixe o valor padrão de 1 hora.
    • Verifique o cabeçalho 'Retry-After' na resposta HTTP: Selecione True (Aceitar).

Pool com balanceamento de carga

O Gerenciamento de API dá suporte aos pools de back-end quando você quer implementar vários back-ends em uma API e solicitações de balanceamento de carga nesses back-ends. Um pool é uma coleção de back-ends que são tratados como uma única entidade para balanceamento de carga.

Use um pool de back-end para cenários como os seguintes:

  • Distribua a carga para vários back-ends, que podem ter disjuntores de back-end individuais.
  • Migre a carga de um conjunto de back-ends para outro conjunto para atualização (implantação azul-verde).

Observação

  • Você pode incluir até 30 back-ends em um pool.
  • Devido à natureza distribuída da arquitetura do Gerenciamento de API, o balanceamento de carga do back-end é aproximado. Instâncias diferentes do gateway não se sincronizam nem fazem balanceamento de carga com base nas informações da mesma instância.

Opções de balanceamento de carga

O Gerenciamento de API dá suporte às seguintes opções de balanceamento de carga para pools de back-end:

Opção balanceamento de carga Descrição
Round robin As solicitações são distribuídas uniformemente entre os back-ends no pool por padrão.
Ponderado Atribua pesos aos backends no pool e distribua as solicitações com base no peso relativo de cada backend. Útil para cenários como implantações blue-green.
Baseado em prioridade Organize backends em grupos prioritários. Enviar solicitações para grupos de prioridade mais alta primeiro; em um grupo, distribua solicitações uniformemente ou de acordo com os pesos atribuídos.

Observação

O serviço de Gerenciamento de API usa back-ends nos grupos de baixa prioridade apenas quando todos os back-ends nos grupos de alta prioridade não estiverem disponíveis porque as regras do disjuntor foram acionadas.

Reconhecimento de sessão

Com qualquer uma das opções de balanceamento de carga anteriores, você pode habilitar o reconhecimento de sessão (afinidade de sessão) para garantir que todas as solicitações de um usuário específico durante uma sessão acessem o mesmo back-end no pool. O Gerenciamento de API define um cookie de ID de sessão para manter o estado da sessão. Essa opção é útil, por exemplo, em cenários com sistemas de suporte, como assistentes de chat de IA ou outros agentes de conversa, para rotear solicitações da mesma sessão para o mesmo destino.

Observação

O reconhecimento de sessão em pools com balanceamento de carga está sendo lançado primeiro para o grupo de atualizaçãoantecipada do Gateway de IA.

Gerenciar cookies para reconhecimento de sessão

Quando você usa o reconhecimento de sessão, o cliente deve manipular cookies adequadamente. O cliente precisa armazenar o valor do Set-Cookie cabeçalho e enviá-lo com solicitações subsequentes para manter o estado da sessão.

Você pode usar políticas de Gerenciamento de API para ajudar a definir cookies para reconhecimento de sessão. Por exemplo, para o caso da API de Assistentes (um recurso do Azure OpenAI no Microsoft Foundry Models), o cliente precisa guardar o ID da sessão, extrair o ID do thread do corpo, guardar o par e enviar o cookie correto para cada chamada. Além disso, o cliente precisa saber quando enviar um cookie ou quando não enviar um cabeçalho de cookie. Esses requisitos podem ser tratados adequadamente definindo as seguintes políticas de exemplo:

<policies>
  <inbound>
    <base />
    <set-backend-service backend-id="APIMBackend" />
  </inbound>
  <backend>
    <base />
  </backend>
  <outbound>
    <base />
    <set-variable name="gwSetCookie" value="@{
      var payload = context.Response.Body.As<JObject>();
      var threadId = payload["id"];
      var gwSetCookieHeaderValue = context.Request.Headers.GetValueOrDefault("SetCookie", string.Empty);
      if(!string.IsNullOrEmpty(gwSetCookieHeaderValue))
      {
        gwSetCookieHeaderValue = gwSetCookieHeaderValue + $";Path=/threads/{threadId};";
      }
      return gwSetCookieHeaderValue;
    }" />
    <set-header name="Set-Cookie" exists-action="override">
      <value>Cookie=gwSetCookieHeaderValue</value>
    </set-header>
  </outbound>
  <on-error>
    <base />
  </on-error>
</policies>

Exemplo

Use o portal, a API REST do Gerenciamento de API ou um modelo Bicep ou ARM para configurar um pool de back-end. No exemplo a seguir, o back-end myBackendPool na instância do Gerenciamento de API myAPIM está configurado com um pool de back-end. Os exemplos de back-end no pool são denominados backend-1 e backend-2. Ambos os back-ends estão no grupo de prioridade mais alta; dentro do grupo, back-end-1 tem um peso maior do que back-end-2.

  1. No portal do Azure, acesse sua instância de Gerenciamento de API.
  2. No menu à esquerda, selecione APIs>Back-ends> no seu back-end.
  3. Na página Back-ends , selecione a guia Balanceador de carga .
  4. Selecione + Criar um novo pool.
  5. Na página Criar novo pool com balanceamento de carga, insira as seguintes informações:
    • Nome: insira um nome para o pool, como myBackendPool.
    • Descrição: opcionalmente, insira uma descrição.
    • Adicionar backends ao pool: Selecione um ou mais backends para adicionar ao pool.
    • Peso e prioridade de back-end: selecione Personalizar peso e prioridade para configurar o peso e a prioridade de cada back-end no pool. Por exemplo, se você adicionou dois backends nomeados backend-1 e backend-2, defina o peso de backend-1 para 3 e o peso de backend-2 para 1, e defina a prioridade de ambos os backends para 1.
    • Selecione Criar.

Limitações