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.

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.

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:
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.
Separe caminhos públicos e protegidos
Liste cada diretório de
app.frontend()e cada montagemStaticFiles. 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.Confira a ordem de declaração
Mantenha uma rota de Function antes de uma montagem
StaticFilesquando essa rota precisar vencer. Este é o padrão documentado pela Vercel:Pythonfrom 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"))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 = trueapenas para derrubar um gráfico, a menos que todos os arquivos afetados sejam realmente públicos. Usecdn = falsequando todo o tráfego correspondente precisar passar pelo FastAPI.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 = trueMantenha o padrão se o código em execução ainda precisar desses arquivos.
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







