Azure Functions para IA: hospedagem, escala, gatilhos, vínculos, segurança e MCP
Projete back-ends de IA sem servidor responsivos com o plano de hospedagem correto, escala independente orientada a eventos, desenvolvimento local, padrões HTTP e de mensagens, configuração segura, identidades gerenciadas e ferramentas MCP.
Tempo de estudo sugerido: 130 minutos • Nível intermediário • Reescrita autoral completa com versão resumida de cada tópico, avaliação comentada e laboratório MCP guiado
Por João Ricardo Dutra••Conteúdo autoral completo
1. Cenário e objetivos de aprendizagem
Considere uma plataforma inteligente de documentos: uma recebe o arquivo, um serviço de IA extrai o texto, a solução classifica o conteúdo e grava o resultado. Máquinas virtuais dimensionadas para o pico ficam ociosas e ainda exigem correções e gestão de capacidade. O troca essa capacidade fixa por execução orientada a eventos, escala automática e cobrança conforme o plano escolhido.
Expor uma entrada de baixa latência.
Enviar tarefas longas a um processador acionado por fila.
Usar vínculos para movimentar dados e SDKs onde não houver vínculo.
Proteger configuração com , e .
Expor operações selecionadas como ferramentas MCP.
A entrada síncrona e o trabalhador assíncrono escalam separadamente, enquanto a fila absorve picos.
Resumo rápido
O objetivo é um back-end de IA responsivo e seguro que separa a aceitação da solicitação do processamento pesado.
2. Partida a frio e seu impacto ampliado pela IA
A partida a frio acontece quando a plataforma aloca uma instância, inicia o host e o trabalhador da linguagem, carrega o aplicativo e prepara dependências antes da primeira invocação. Ela pode ocorrer em planos que escalam até zero e é paga uma vez por nova instância, não a cada solicitação.
SDKs grandes, bibliotecas de inferência, de modelo, resolução de configuração, e pools de rede aumentam esse tempo. Inicialize clientes reutilizáveis no escopo do módulo, mantenha o pacote enxuto e meça separadamente as latências fria e aquecida.
Resumo rápido
A partida a frio é por instância; dependências pesadas a ampliam e invocações aquecidas reutilizam o processo preparado.
3. Consumo Flexível como padrão sem servidor
O plano de Consumo Flexível é a recomendação baseada em Linux para novos aplicativos de funções sem servidor. Oferece escala por função, integração à rede virtual, instâncias configuráveis de 512 MB, 2.048 MB ou 4.096 MB e até 1.000 instâncias sob demanda. Comece em 2.048 MB, use 4.096 MB para cargas intensivas e 512 MB para processadores leves.
Instâncias sempre prontas mantêm uma função ou grupo de escala aquecido. Elas reduzem a partida a frio, mas criam custo básico; reserve-as para sensíveis à latência. A escala sob demanda continua além desse piso.
Resumo rápido
Use Consumo Flexível para economia orientada a eventos e adicione capacidade sempre pronta somente onde a latência justificar.
4. Premium e demais opções de hospedagem
Decisão de hospedagem
Opção
Melhor uso
Contrapartida
Consumo Flexível
com picos e gatilhos independentes
Partida a frio sem instâncias sempre prontas
Premium
Latência baixa constante, trabalhadores maiores, rede virtual ou imagens Linux personalizadas
Pelo menos um trabalhador aquecido gera custo básico
Dedicado
Capacidade existente ociosa ou carga previsível
A equipe administra capacidade e
GPU, pacotes de SO ou serviços em contêineres próximos
Réplicas e contêineres entram na operação
Consumo Linux legado
Somente cargas existentes
Aposentadoria programada após setembro de 2028; migre para Flexível
Escolha por latência, formato da carga, computação, rede e operação, e não por um único preço.
Resumo rápido
Premium troca um piso aquecido por inicialização previsível; Dedicado e Aplicativos de Contêiner atendem requisitos especializados.
5. Escala por função, concorrência e memória
No Consumo Flexível, gatilhos escalam como um grupo; blobs acionados pela formam outro; Funções Duráveis compartilham um grupo. A maioria dos demais gatilhos, como , filas e temporizadores, escala de modo independente. Assim, um pico na fila não precisa disputar instâncias com a .
Concorrência menor distribui chamadas de IA caras por mais instâncias e dedica mais recursos a cada invocação; concorrência maior usa menos instâncias, mas aumenta a contenção. Ajuste com testes de carga, cotas dos serviços dependentes, memória e latência ponta a ponta.
Resumo rápido
Grupos definem quais funções compartilham instâncias; concorrência e memória definem quanto trabalho cada instância aceita.
6. Tarefas longas e solicitação-resposta assíncrona
Uma função acionada por dispõe de aproximadamente 230 segundos para responder devido ao , mesmo com functionTimeout maior. Consumo Flexível e Premium permitem execuções não sem máximo configurado, porém ainda existem períodos de cortesia em redução de escala e atualizações.
A resposta 202 e a fila desacoplam a latência do processamento e permitem escala independente.
7. Ferramentas locais e criação do projeto
O Core Tools v4 fornece o host local em disponibilidade geral e o comando func; o CLI v5 ainda está em . A extensão do para acrescenta modelos, depuração com F5, implantação e sincronização de configurações. Crie pelo Command Palette ou com func init, adicione com func new e execute com func start.
Core Tools v4
e extensão do
Python compatível e ambiente virtual
Azurite para armazenamento do host
curl ou cliente de arquivos .
Resumo rápido
O host local usa o mesmo modelo de gatilhos e vínculos do e encurta o ciclo de desenvolvimento.
8. Estrutura do projeto Python v2
Arquivos essenciais
Arquivo
Finalidade
function_app.py
Entrada por decoradores e registro de blueprints
host.
,, extensões e concorrência globais
local.settings.
Configuração local; nunca versione segredos
requirements.txt
Dependências Python
.vscode/*
Depuração e tarefas compartilhadas
.funcignore
Exclusões do pacote de implantação
Mantenha funções sem estado, divida projetos grandes em blueprints e versione a configuração de depuração, mas não local.settings..
Resumo rápido
Código, comportamento global e ambiente ficam separados em arquivos com papéis definidos.
9. AzureWebJobsStorage, Azurite e dependências locais
AzureWebJobsStorage também coordena o host, mantém estado de temporizadores e armazena chaves. Uma configuração inválida pode impedir gatilhos não . Localmente, UseDevelopmentStorage=true aponta o host e os vínculos compatíveis para o Azurite, que implementa de Blobs, Filas e Tabelas.
Use o emulador do quando adequado e contêineres locais de PostgreSQL ou Redis. Antes da liberação, teste os serviços reais e jamais implante UseDevelopmentStorage=true.
Resumo rápido
O Azurite atende à dependência local do host; emuladores aceleram o trabalho, mas não substituem o teste final no .
10. Gatilhos e autorização do
Cada função tem exatamente um gatilho. O gatilho recebe método, cabeçalhos, parâmetros e corpo e devolve HttpResponse. Use anonymous apenas quando o acesso público for intencional, function como barreira básica e admin somente com a chave mestra para operações administrativas.
Chaves não identificam o chamador. Use ou Autenticação do quando precisar de ,, cotas, transformações ou limitação de taxa.
Resumo rápido
O nível de autorização define a exigência de chave; identidade real requer uma camada de autenticação apropriada.
11. Gatilhos do , locks e dead-letter
O gatilho de fila do recebe em PeekLock. Sucesso conclui a mensagem; falha a abandona para nova entrega, salvo liquidação manual. maxConcurrentCalls controla chamadas paralelas por instância e maxAutoRenewDuration deve cobrir o processamento esperado.
Ao ultrapassar maxDeliveryCount, o move a mensagem problemática para a subfila de mensagens mortas com . Monitore-a e reprocesse com intenção. Permissão de leitura administrativa também melhora a precisão da escala baseada em destino.
Resumo rápido
Dimensione concorrência e renovação do lock e trate a fila de mensagens mortas como parte da operação.
12. Vínculos de entrada/saída e clientes
O gatilho também é um vínculo de entrada. Vínculos adicionais leem ou escrevem sem código repetitivo de conexão: de Blobs para arquivos, para resultados estruturados e para fan-out. Use quando não houver vínculo adequado ou for necessária a completa.
Crie credenciais e clientes caros no escopo do módulo para que invocações aquecidas reutilizem pools e .
Resumo rápido
Vínculos reduzem código de infraestrutura; SDKs dão controle total e devem ser reutilizados.
13. Configurações do aplicativo e separação de ambientes
Configurações do aplicativo são criptografadas em repouso e injetadas como variáveis de ambiente. Armazene , modelos, limites e sinalizadores em pares simples. Use os.environ para valores obrigatórios e os.getenv para padrões explícitos.
Separe desenvolvimento, homologação e produção. Administre produção com infraestrutura como código ou CLI controlada; baixar configurações pode expor segredos e enviar valores locais pode interromper a produção.
Resumo rápido
O código permanece neutro quando cada ambiente fornece sua própria configuração.
14. Referências do e rotação
Uma referência do resolve o segredo como configuração, sem alteração no código. Conceda Secrets User. A sem versão acompanha a versão mais recente em até 24 horas de ; a versionada permanece fixa. Uma alteração de configuração ou atualização explícita força nova resolução.
AI_SERVICE_KEY=@Microsoft.KeyVault(
SecretUri=https://<vault>.vault.azure.net/secrets/AiServiceKey/)
from azure.appconfiguration.provider import load
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()
config = load(
endpoint=os.environ["AZURE_APPCONFIG_ENDPOINT"],
credential=credential,
keyvault_credential=credential)
Resumo rápido
Mantenha segredos no , use referências sem versão para rotação e conceda apenas leitura.
15. e recursos
A centraliza valores não secretos e sinalizadores compartilhados. Rótulos selecionam cada ambiente; o provedor Python pode atualizar valores e resolver referências do com DefaultAzureCredential.
Guarde rotas de modelo, limites e sinalizadores na e credenciais no .
Resumo rápido
A centraliza comportamento; o continua sendo a origem dos segredos.
16. e menor privilégio
Conexões por identidade trocam cadeias por um prefixo e . A identidade atribuída pelo sistema é padrão; uma identidade atribuída pelo usuário pode ser compartilhada e preparada antes da implantação. Dois sublinhados formam propriedades estruturadas.
AzureWebJobsStorage__accountName=<storage-account>
ServiceBusConnection__fullyQualifiedNamespace=<namespace>.servicebus.windows.net
CosmosDBConnection__accountEndpoint=https://<account>.documents.azure.com:443/
# SDK client created once and reused on warm invocations
credential = DefaultAzureCredential()
client = DocumentIntelligenceClient(
endpoint=os.environ["DOCUMENT_INTELLIGENCE_ENDPOINT"],
credential=credential)
Papéis mínimos representativos
Conexão
Papel
AzureWebJobsStorage do host
Blob
Gatilho de blob
Também Queue Data Contributor e Account Contributor
Entrada/saída do
Data Receiver / Data Sender
Saída do
Cosmos DB Built-in Data Contributor
Referência do
Secrets User
Search Index Data Reader / Contributor
e substituem credenciais embutidas; o cobre segredos inevitáveis.
Resumo rápido
A identidade remove credenciais armazenadas, mas cada destino ainda precisa do papel mínimo correto.
17. Chaves de acesso, proteção de e laboratório MCP
Chaves de função valem para uma função, chaves de host alcançam todas, chaves de sistema pertencem a extensões e a chave mestra libera administração. Todas são segredos. acrescenta políticas e ; a Autenticação do pode exigir .
A extensão MCP do expõe gatilhos de ferramenta, recurso e prompt. Prefira Streamable em /runtime//mcp; SSE é compatibilidade. No , o normalmente exige a chave de sistema mcp_extension. Python requer -functions 1.24.0 ou posterior e o teste local exige Core Tools 4.0.7030 ou posterior.