A arquitetura serverless no Azure oferece agilidade e escalabilidade, eliminando a carga de gerenciamento de infraestrutura. Entretanto, um pesadelo recorrente para times de engenharia é o cenário onde uma Function App está ativa, processando requisições com sucesso, mas simplesmente não aparece no blade de funções do Azure Portal. Esse problema de visibilidade, frequentemente atrelado a falhas de sincronização de estado, pode gerar insegurança operacional e dificultar o troubleshooting.
O processo de descoberta no Portal
Para que o diagnóstico seja preciso, é fundamental entender o fluxo que o Azure Portal executa ao carregar o blade de sua Function App:
- Host Status Check: O portal interroga o endpoint
/admin/host/statuspara confirmar se o runtime está ativo e saudável. - Function Enumeration: Uma requisição é enviada ao runtime para listar os triggers e funções configuradas.
- Metadata Retrieval: O portal busca a definição de cada função (triggers, bindings e configurações).
- UI Rendering: O processo de renderização no front-end do portal mostra o resultado consolidado.
Se qualquer um desses elos da corrente falhar, você verá um vazio na interface.
Arquivos chave para a descoberta
| File | Purpose | Location |
|---|---|---|
host.json |
Host configuration | Root of function app |
function.json |
Function metadata (script languages) | Each function folder |
*.dll or compiled code |
Function implementation | bin folder or function folder |
extensions.json |
Extension bindings | bin folder |
Categorias de falhas e análise técnica
Para times de DevOps e infraestrutura, categorizar o problema é o primeiro passo para o MTTR (Mean Time To Resolution) eficiente.
| Categoria | Causas Comuns |
|---|---|
| Deployment | Failed deployment, missing files, package issues |
| Function Configuration | Invalid function.json, binding errors, disabled |
| Host/Runtime | Host startup failure, runtime errors, worker issues |
| Storage | AzureWebJobsStorage issues, connectivity |
| Portal/Sync | Sync triggers failure, cache issues, ARM API |
| Networking | VNET, private endpoints, firewall blocking |
Diagnóstico Prático e Resolução
1. O Host não está em execução
Se o status do host retornar erro ou não houver resposta via API (/admin/host/status), a visibilidade será nula. Verifique se as Application Settings estão íntegras, com foco especial na AzureWebJobsStorage.
2. Falhas de Deployment
Em planos Windows, utilize o Kudu (Advanced Tools) para verificar a integridade da pasta site/wwwroot. No Linux (Consumption/Flex), dependa de SSH ou Azure CLI para auditar a estrutura real dos arquivos. Um simples az functionapp restart pode resolver caches de deployment.
3. O pesadelo do V2 Programming Model (Python/Node.js)
Em modelos modernos (Python V2/Node.js V4), o uso de decoradores substitui os arquivos function.json. O portal depende inteiramente de que o runtime esteja saudável para "descobrir" essas funções. Se o entry point estiver mal configurado ou o host não subir, as funções não serão listadas.
4. Sincronização e Cache
Se após um deploy bem-sucedido o portal ainda exibir funções antigas, force uma sincronização via API:
az rest --method post --url https://management.azure.com/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Web/sites/<APP_NAME>/syncfunctiontriggers?api-version=2016-08-01
5. Networking e o "False Negative"
Ambientes com Private Endpoints ou VNet Integration com forced tunneling são os maiores causadores de problemas de visibilidade no Portal. O portal tentará alcançar o endpoint de administração dentro da sua rede isolada. Se não houver permissão, o portal dirá que não consegue alcançar o app. Lembre-se: em cenários de isolamento total, a falta de visibilidade no portal pode ser o comportamento esperado de segurança (Network Lockdown).
Checklist de Resposta Rápida
- Estado do Host: Verifique
/admin/host/status. - Kudu Audit: Valide se os arquivos estão fisicamente no local correto.
function.json: Valide a sintaxe, especialmente após alterações manuais.WEBSITE_RUN_FROM_PACKAGE: Se configurado via URL, garanta que o blob seja acessível (verifique SAS tokens expirados).- Networking: Verifique se as restrições de IP do portal estão bloqueando o tráfego da API de controle.
Se o problema persistir, utilize as ferramentas de "Diagnose and solve problems" do próprio Azure, filtrando por SyncTrigger ou Function App Home. O diagnóstico de ponta a ponta poupa horas de testes de tentativa e erro.
Artigo originalmente publicado em Azure Updates - Latest from Azure Charts.