FastAPI Vercel: arquivos estáticos deixam de usar Functions

A Vercel agora entrega arquivos estáticos elegíveis do FastAPI pela CDN. Veja quais requisições deixam de usar Functions e quando a proteção exige Python.

Sunday, September 13, 2026Omid Saffari
Tools
FastAPI Vercel: arquivos estáticos deixam de usar Functions

A integração FastAPI Vercel teve uma linha de custo alterada em 10 de setembro de 2026. Agora, requisições elegíveis do frontend e de arquivos estáticos saem da CDN da Vercel direto para o visitante, sem gerar invocações de Function nem consumo de computação. As requisições e a transferência da CDN continuam existindo — por isso, a mudança reduz o uso de Functions, mas não torna gratuita a entrega de conteúdo estático.

Como o FastAPI Vercel agora evita a Function

Um arquivo estático é aquele que o servidor pode enviar sem alterações, como um arquivo HTML, uma folha de estilos, um bundle de JavaScript, uma fonte ou uma imagem. Uma Vercel Function é o processo FastAPI em execução que atende às requisições dinâmicas. Já a CDN é a camada de entrega mais próxima do visitante.

Antes dessa mudança, um arquivo montado pelo FastAPI ainda podia percorrer a rota da Function. A requisição chegava à rede da Vercel, invocava a Function do FastAPI e deixava o Python devolver o arquivo.

Agora, durante o build, a Vercel identifica os arquivos elegíveis por trás de app.frontend() e de StaticFiles do FastAPI. Esses arquivos são promovidos para a CDN, e as requisições correspondentes passam a ser atendidas sem invocar a Function.

O caminho muda disto:

visitor → CDN → FastAPI Function → file → visitor

para isto:

visitor → CDN file → visitor

A API dinâmica não se torna estática. Somente os arquivos correspondentes mudam de rota. Os arquivos no diretório public/ no nível do projeto já eram servidos pela CDN; portanto, apps que concentram todos os ativos públicos ali não ganham uma nova economia com essa atualização.

Por padrão, os diretórios promovidos também continuam dentro do bundle da Function. Definir tool.vercel.fastapi.static.exclude = true remove essa cópia duplicada, mas essa é uma decisão separada sobre o bundle. A configuração não é necessária para que a requisição siga pela CDN.

Corte arquitetônico mostrando ativos públicos do FastAPI seguindo uma rota curta do visitante pela CDN, enquanto ativos protegidos passam pela Function e por sua verificação
Ativos públicos podem parar na CDN. Ativos protegidos ainda precisam da Function quando o FastAPI deve verificar a requisição.

A conta perde computação, não entrega

A Vercel mede uma requisição em camadas. Function Invocations contabiliza as requisições que chegam ao seu código. Active CPU e Provisioned Memory medem o trabalho e os recursos de execução por trás dessas invocações. Fast Origin Transfer mede o tráfego entre a CDN e a Function.

Os medidores da entrega externa são diferentes. A métrica CDN Requests, exibida como Edge Requests no painel, aplica-se tanto aos ativos estáticos quanto ao tráfego de Functions. Fast Data Transfer mede os bytes enviados entre a CDN e o visitante.

Veja o demonstrativo direto para um milhão de requisições idênticas de ativos que chegavam à Function antes do deploy e se qualificam para promoção depois dele:

MedidorAntes da promoçãoDepois da promoção
Function Invocations1 milhão0
Active CPU dessas requisiçõesMedido0
Provisioned Memory dessas requisiçõesMedido0
Fast Origin Transfer dessas respostasMedido0
CDN Requests ou Edge Requests1 milhão1 milhão
Fast Data Transfer para visitantesBytes medidosBytes medidos

A tarifa Pro publicada é de $0.60 por um milhão de invocações de Function. Assim, um milhão de requisições de arquivos que antes chegavam à Function retiram $0.60 do uso bruto de invocações antes do crédito mensal, além do consumo real de Active CPU, Provisioned Memory e Fast Origin Transfer gerado por essas requisições.

Essa última parte precisa vir dos seus dados de Usage. Uma resposta de arquivo que mal tocava o Python oferece pouca CPU para eliminar. Uma resposta grande pode retirar mais transferência de origem. A atualização abre uma nova rota; ela não promete um percentual universal de economia.

O uso da CDN permanece no outro lado do demonstrativo. A atual página de preços da CDN da Vercel informa que, no Pro com cobrança por demanda, os primeiros 10 milhões de Edge Requests e o primeiro 1 TB de Fast Data Transfer estão incluídos; depois disso, valem tarifas de uso por região. Equipes que usam Flat Rate CDN consomem a capacidade de requisições e transferência desse plano. A análise da Flat Rate CDN explica essa decisão orçamentária separada.

No Hobby, o benefício pode aparecer como mais folga, e não como uma conta menor. O Hobby inclui um milhão de invocações de Function, quatro horas de Active CPU e 360 GB-hours de Provisioned Memory. O tráfego de arquivos públicos que deixa de chegar à Function para de consumir essas franquias, enquanto a entrega pela CDN continua sendo contabilizada quando aplicável.

A elegibilidade depende das rotas e regras de segurança

A Vercel preserva a ordem de declaração do FastAPI para StaticFiles. Quando uma rota é declarada antes de uma montagem estática no mesmo caminho, ela vence e chega à Function. Declarada depois da montagem, a rota perde para o arquivo da CDN.

Com app.frontend(), a regra é um pouco diferente. Rotas de API sempre têm prioridade sobre arquivos do frontend, independentemente da ordem de declaração. Assim, um frontend montado em / não engole um endpoint real da API.

A segurança também muda o comportamento padrão. Um arquivo da CDN nunca entra no Python, então o middleware e as verificações de Depends() do FastAPI não podem ser executados. Por isso, a Vercel mantém estes caminhos na Function por padrão:

  • Todas as montagens estáticas e todos os frontends quando o app tem middleware no nível superior.
  • As montagens estáticas de um subapp quando esse subapp tem middleware.
  • Um frontend protegido por dependências do FastAPI.

Definir cdn = false faz a escolha oposta: desativa a promoção e mantém todas as requisições correspondentes na Function. É a decisão correta quando o código da aplicação precisa examinar cada requisição.

Há ainda um caso de borda menor: a raiz exata de uma montagem StaticFiles continua chegando à Function para que o FastAPI possa redirecioná-la à forma com barra final. Não espere um zero literal no uso de Functions se os clientes continuarem requisitando esse caminho sem a barra.

O que muda no trabalho de cada equipe

Fundador solo de um SaaS com um repositório FastAPI

Quem entrega um app web empacotado por app.frontend() pode manter a API dinâmica e tirar o tráfego público de HTML, CSS e JavaScript da rota da Function. O ganho é uma linha de base de computação mais limpa. O tráfego do produto pode crescer sem que cada busca de ativo pelo navegador pareça trabalho de backend.

Engenharia de agência com arquivos públicos e exclusivos de clientes

Uma pessoa de engenharia em uma agência pode colocar a interface pública na CDN e declarar uma rota sensível antes da montagem estática. O ganho não se limita ao menor uso de Functions. Surge também um mapa de rotas que deixa claro quais arquivos de clientes exigem uma decisão de acesso em Python e quais não exigem.

Liderança de backend trabalhando com finanças

A liderança de backend pode entregar duas projeções separadas à área financeira: o tráfego dinâmico do FastAPI para a linha de Functions e todo o tráfego dos visitantes para a linha da CDN. Assim, uma queda em Function Invocations não é confundida com uma redução equivalente em Edge Requests ou em transferência.

Equipe com middleware global

Uma equipe que usa middleware de logging, resolução de tenant ou autenticação no nível superior deve esperar que as montagens estáticas permaneçam na Function por padrão. O passo útil é decidir se uma área claramente pública de ativos pode ignorar esse middleware. Se a resposta for não, essa mudança não oferece uma economia segura para incluir no orçamento.

Audite um deploy

Comece por um inventário real de rotas, não pela suposição de que todo arquivo com extensão é público.

  1. Separe caminhos públicos e protegidos

    Liste cada diretório de app.frontend() e cada montagem StaticFiles. Marque os arquivos que podem ser devolvidos a qualquer visitante. Em separado, identifique tudo cuja resposta dependa de usuário, tenant, função, cookie ou resultado de middleware em tempo de requisição.

  2. Confira a ordem de declaração

    Mantenha uma rota de Function antes de uma montagem StaticFiles quando essa rota precisar vencer. Este é o padrão documentado pela Vercel:

    Python
    from fastapi import FastAPI
    from fastapi.staticfiles import StaticFiles
    
    app = FastAPI()
    
    # Declared before the mount, so this route wins over any CDN file at this path.
    @app.get("/static/protected.json")
    def protected():
        return {"access": "denied"}
    
    app.mount("/static", StaticFiles(directory="static"))
  3. Mantenha caminhos protegidos na Function

    Confira o middleware no nível superior, o middleware dos subapps e as dependências do frontend antes de alterar a configuração. Não defina cdn = true apenas para derrubar um gráfico, a menos que todos os arquivos afetados sejam realmente públicos. Use cdn = false quando todo o tráfego correspondente precisar passar pelo FastAPI.

  4. Decida se vale reduzir o bundle

    Se o app em execução nunca lê os arquivos promovidos, você pode excluir os diretórios de origem deles do bundle da Function com a configuração documentada:

    TOML
    [tool.vercel.fastapi.static]
    exclude = true

    Mantenha o padrão se o código em execução ainda precisar desses arquivos.

  5. Faça o deploy e valide a divisão

    Execute vc deploy. Acesse um arquivo público, um arquivo protegido e uma rota de API. Confirme que a resposta protegida continua funcionando corretamente; depois, compare Function Invocations, Active CPU, Provisioned Memory, Fast Origin Transfer, Edge Requests e Fast Data Transfer do projeto em Usage. A amostra pública deve sair da rota da Function sem desaparecer dos totais da CDN.

O limite real da economia

O preço direto de invocação é de apenas $0.60 por milhão no Pro. Para um app pequeno, a economia financeira pode ser de poucos centavos ou ser absorvida pelo crédito mensal de uso. O benefício maior pode estar em retirar o ruído dos ativos do uso de Functions e preservar a folga de computação para o trabalho real da API.

A economia cresce quando o tráfego de ativos públicos é alto, a antiga rota da Function mantinha memória ocupada por tempo suficiente para fazer diferença ou as respostas geravam Fast Origin Transfer relevante. Ela continua pequena quando os arquivos já estavam em public/, o tráfego é baixo ou as regras de segurança mantêm corretamente os caminhos na Function.

Isso também não substitui a otimização de ativos. O mesmo bundle grande de JavaScript, imagem ou fonte ainda precisa cruzar a CDN até o visitante. Reduzir esses arquivos continua sendo a medida que corta Fast Data Transfer.

A ação para segunda-feira

Tome uma atitude nesta semana se app.frontend() ou StaticFiles entrega arquivos públicos e essas requisições aparecem no uso de Functions. Espere se os arquivos são protegidos e suas regras de acesso ainda não foram separadas. Nada muda se os arquivos relevantes já vêm de public/ ou de outro caminho atendido por CDN.

Na segunda-feira, inventarie os caminhos de ativos públicos e protegidos, preserve todas as rotas e proteções que precisam ser executadas e valide um deploy com uma requisição de cada classe. Orce a queda medida no uso de Functions. Mantenha no demonstrativo as requisições e a transferência da CDN.

Se você quer mais análises diretas, em linguagem simples, sobre mudanças de plataforma que afetam a conta operacional, assine a newsletter.

Última atualização
13 de set. de 2026
Categoria
Explained

Prefira este site no Google

Adicionar omidsaffari.com como fonte preferida na Busca do Google

Marque omidsaffari.com como fonte preferida e o Google destaca o site para você em Top Stories, AI Overviews e AI Mode.

Chave da API OpenAI: como planejar a rotação sem interrupções

Chave da API OpenAI: como planejar a rotação sem interrupções

Entenda como definir a validade da chave da API OpenAI, preparar a substituição e verificar cada automação antes que a credencial expire em produção.13 de set. de 2026Explained
Credenciais compartilhadas no Vercel Connect: quem pode gerenciar

Credenciais compartilhadas no Vercel Connect: quem pode gerenciar

Defina quem gerencia credenciais compartilhadas no Vercel Connect, entenda o alcance do Connector Manager e mantenha cada camada de acesso sob controle.13 de set. de 2026Explained
Cloudflare R2: arquivos sem extensão já entram no AI Search

Cloudflare R2: arquivos sem extensão já entram no AI Search

O Cloudflare R2 agora permite indexar arquivos sem extensão no AI Search via Content-Type. Veja o que muda na ingestão, os custos e como validar.12 de set. de 2026Explained
Vercel Sandbox dobra o espaço para jobs maiores de agentes

Vercel Sandbox dobra o espaço para jobs maiores de agentes

Entenda quais jobs de repositório, build e dados agora cabem no Vercel Sandbox e o que medir antes de repetir uma execução que exige muito disco.12 de set. de 2026Explained
Cloudflare Workflows: retenção curta sem perder evidências

Cloudflare Workflows: retenção curta sem perder evidências

Entenda o novo padrão de 7 dias no Cloudflare Workflows, separe retenção de sucesso e erro e estime custos sem perder evidências operacionais.11 de set. de 2026Explained
Dashboard com IA: como o ChatGPT Data reduz as idas e vindas do relatório semanal

Dashboard com IA: como o ChatGPT Data reduz as idas e vindas do relatório semanal

Veja como usar o ChatGPT Data para criar um dashboard com IA, reduzir o retrabalho em relatórios semanais e manter métricas e aprovações sob controle.11 de set. de 2026Explained
IA para programar em equipe: Cursor Projects na prática

IA para programar em equipe: Cursor Projects na prática

Veja como o Cursor Projects coordena agentes, compartilha contexto e leva o gargalo da execução à revisão, com um plano de piloto, custos e limites.11 de set. de 2026Explained
Codex ChatGPT: como o Deep Research usa o orçamento do Work

Codex ChatGPT: como o Deep Research usa o orçamento do Work

Entenda por que o Deep Research no ChatGPT Work usa a mesma franquia ou os mesmos créditos do Codex e como acompanhar o custo de cada entrega.10 de set. de 2026Explained
Newsletter

Uma carta, todo domingo.Sistemas que funcionam, não hot takes.

Semanal. Sem spam. Cancele quando quiser.