Vercel Functions umgehen: FastAPI-Dateien direkt aus dem CDN
Vercel Functions liefern geeignete FastAPI-Static-Files nicht mehr selbst aus. So sinken Function-Aufrufe und Compute-Nutzung; CDN-Nutzung und Transfer bleiben.

Bei Vercel hat sich am 10. September 2026 eine Kostenposition für FastAPI-Anwendungen geändert. Geeignete Frontend- und Static-File-Anfragen laufen nun direkt vom Vercel CDN zum Besucher. Dadurch erzeugen sie weder Aufrufe von Vercel Functions noch Compute-Nutzung. CDN-Anfragen und Datentransfer fallen weiterhin an: Die Änderung senkt also die Function-Nutzung, macht die Auslieferung statischer Dateien aber nicht kostenlos.
So umgehen Static Files jetzt Vercel Functions
Eine statische Datei kann der Server unverändert ausliefern, etwa eine HTML-Datei, ein Stylesheet, ein JavaScript-Bundle, eine Schriftart oder ein Bild. Eine Vercel Function ist der laufende FastAPI-Prozess, der dynamische Anfragen verarbeitet. Das CDN übernimmt die Auslieferung in der Nähe des Besuchers.
Vor dieser Änderung konnte selbst eine über FastAPI eingebundene Datei noch den Weg durch die Function nehmen. Die Anfrage erreichte das Vercel-Netzwerk, rief die FastAPI Function auf und wurde anschließend von Python beantwortet.
Jetzt erkennt Vercel geeignete Dateien hinter app.frontend() und FastAPIs StaticFiles während des Builds. Diese Dateien werden ins CDN verschoben und passende Anfragen ohne Aufruf der Function ausgeliefert.
Aus diesem Pfad:
visitor → CDN → FastAPI Function → file → visitor
wird dieser:
visitor → CDN file → visitor
Die dynamische API wird dadurch nicht statisch. Nur passende Dateien wechseln den Pfad. Dateien im projektweiten Verzeichnis public/ kamen bereits aus dem CDN. Anwendungen, die dort sämtliche öffentlichen Assets ablegen, sparen durch dieses Release daher nichts zusätzlich.
Hochgestufte Verzeichnisse bleiben standardmäßig auch im Function-Bundle enthalten. Mit tool.vercel.fastapi.static.exclude = true lässt sich diese doppelte Kopie entfernen. Das ist jedoch eine separate Entscheidung zur Bundle-Größe und keine Voraussetzung dafür, dass der CDN-Pfad funktioniert.

Compute-Kosten sinken, die Auslieferung bleibt
Vercel erfasst eine Anfrage auf mehreren Ebenen. Function Invocations zählen Anfragen, die den eigenen Code erreichen. Active CPU und Provisioned Memory messen die Arbeit und Laufzeitressourcen hinter diesen Aufrufen. Fast Origin Transfer erfasst den Datenverkehr zwischen CDN und Function.
Für die äußere Auslieferung gelten andere Zähler. CDN Requests, im Dashboard als Edge Requests bezeichnet, erfassen sowohl statische Assets als auch Function-Traffic. Fast Data Transfer misst die Bytes, die zwischen CDN und Besucher übertragen werden.
So sieht die klare Bilanz für eine Million ansonsten identische Asset-Anfragen aus, die vor dem Deployment die Function erreichten und danach für die Verlagerung ins CDN geeignet sind:
Der veröffentlichte Pro-Preis beträgt $0.60 pro eine Million Function Invocations. Eine Million Dateianfragen, die zuvor die Function erreichten, vermeiden damit vor der monatlichen Gutschrift $0.60 an Bruttoverbrauch für Aufrufe. Hinzu kommt der tatsächlich entfallende Verbrauch von Active CPU, Provisioned Memory und Fast Origin Transfer.
Dieser zweite Teil lässt sich nur aus den eigenen Usage-Daten ablesen. Wenn Python eine Dateianfrage kaum bearbeitet hat, fällt auch nur wenig CPU-Nutzung weg. Bei einer großen Antwort kann dagegen mehr Origin-Transfer entfallen. Das Release eröffnet einen neuen Auslieferungsweg, verspricht aber keinen allgemeingültigen Sparprozentsatz.
Die CDN-Nutzung bleibt auf der anderen Seite der Bilanz bestehen. Auf Vercels aktueller CDN-Preisseite sind bei nutzungsabhängiger Abrechnung im Pro-Tarif die ersten 10 Millionen Edge Requests und das erste 1 TB Fast Data Transfer enthalten; danach gelten regionsabhängige Nutzungspreise. Teams mit Flat Rate CDN verbrauchen stattdessen das Anfrage- und Transfervolumen dieses Tarifs. Der Beitrag zum Flat Rate CDN erläutert diese separate Budgetentscheidung.
Im Hobby-Tarif kann der Vorteil mehr Spielraum statt einer niedrigeren Rechnung bedeuten. Enthalten sind eine Million Function Invocations, vier Active-CPU-Stunden und 360 GB-Stunden Provisioned Memory. Öffentlicher Dateiverkehr, der die Function nicht mehr erreicht, belastet diese Kontingente nicht länger. Die CDN-Auslieferung zählt jedoch weiterhin, soweit sie abrechnungsrelevant ist.
Welche Routen und Sicherheitsregeln sind geeignet?
Vercel behält bei StaticFiles die Deklarationsreihenfolge von FastAPI bei. Eine Route, die vor einem Static-Mount für denselben Pfad deklariert wurde, gewinnt und erreicht die Function. Eine Route nach dem Mount verliert gegen die Datei im CDN.
Bei app.frontend() gilt eine etwas andere Regel. API-Routen haben unabhängig von der Deklarationsreihenfolge immer Vorrang vor Frontend-Dateien. So kann ein unter / eingebundenes Frontend keinen echten API-Endpunkt verschlucken.
Auch Sicherheitsvorgaben ändern den Standardpfad. Eine CDN-Datei gelangt nie in Python, deshalb können FastAPI-Middleware und Depends()-Prüfungen dort nicht ausgeführt werden. Vercel belässt diese Pfade daher standardmäßig auf der Function:
- Sämtliche Static-Mounts und Frontends, wenn die Anwendung Top-Level-Middleware verwendet.
- Die Static-Mounts einer Unteranwendung, wenn dort Middleware aktiv ist.
- Ein Frontend, das durch FastAPI-Abhängigkeiten geschützt wird.
Mit cdn = false fällt die Entscheidung umgekehrt aus: Die Verlagerung wird deaktiviert, und jede passende Anfrage bleibt auf der Function. Das ist richtig, wenn der Anwendungscode jede Anfrage prüfen muss.
Hinzu kommt ein kleinerer Randfall: Der nackte Stammpfad eines StaticFiles-Mounts erreicht weiterhin die Function, damit FastAPI auf die Schreibweise mit abschließendem Schrägstrich umleiten kann. Wenn Clients diesen nackten Pfad wiederholt aufrufen, ist bei der Function-Nutzung also keine buchstäbliche Null zu erwarten.
Was ändert sich im Arbeitsalltag?
Solo-SaaS mit einem FastAPI-Repository
Wer eine gebündelte Webanwendung über app.frontend() ausliefert, kann die API dynamisch lassen und zugleich den öffentlichen HTML-, CSS- und JavaScript-Traffic vom Function-Pfad nehmen. Das Ergebnis ist eine sauberere Compute-Basislinie: Steigender Produkt-Traffic lässt nicht mehr jeden Asset-Abruf des Browsers wie Backend-Arbeit aussehen.
Agenturprojekt mit öffentlichen und kundengeschützten Dateien
In einem Agenturprojekt kann die öffentliche Oberfläche im CDN liegen, während eine sensible Route vor dem Static-Mount deklariert wird. Der Nutzen beschränkt sich nicht auf weniger Function-Nutzung. Die Routenstruktur zeigt zugleich klar, bei welchen Kundendateien Python über den Zugriff entscheiden muss und bei welchen nicht.
Backend-Verantwortliche in der Finanzplanung
Für die Finanzplanung lassen sich zwei getrennte Prognosen erstellen: dynamischer FastAPI-Traffic für die Function-Position und der gesamte Besucherverkehr für die CDN-Position. So wird ein Rückgang der Function Invocations nicht irrtümlich als gleich hoher Rückgang bei Edge Requests oder Transfer verbucht.
Team mit globaler Middleware
Bei Top-Level-Middleware für Logging, Mandantenauflösung oder Authentifizierung bleiben Static-Mounts standardmäßig auf der Function. Dann ist zu klären, ob ein eindeutig öffentlicher Asset-Bereich diese Middleware umgehen darf. Lautet die Antwort nein, lässt sich aus dieser Änderung keine sichere Ersparnis einplanen.
Ein Deployment prüfen
Ausgangspunkt sollte ein echtes Routeninventar sein, nicht die Annahme, jede Datei mit einer Endung sei öffentlich.
Öffentliche und geschützte Pfade kennzeichnen
Alle
app.frontend()-Verzeichnisse undStaticFiles-Mounts auflisten. Dateien markieren, die an jeden Besucher ausgeliefert werden dürfen. Davon getrennt alles erfassen, dessen Antwort von Benutzer, Mandant, Rolle, Cookie oder einem Middleware-Ergebnis zur Anfragezeit abhängt.Deklarationsreihenfolge prüfen
Eine Function-Route muss vor einem
StaticFiles-Mount stehen, wenn sie Vorrang haben soll. Vercel dokumentiert dieses Muster: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"))Geschützte Pfade auf der Function belassen
Vor einer Konfigurationsänderung Top-Level-Middleware, Middleware in Unteranwendungen und Frontend-Abhängigkeiten prüfen.
cdn = truedarf nicht allein deshalb gesetzt werden, damit eine Kurve fällt; jede betroffene Datei muss tatsächlich öffentlich sein.cdn = falseist richtig, wenn der gesamte passende Traffic FastAPI durchlaufen muss.Über die Bundle-Verkleinerung entscheiden
Wenn die laufende Anwendung nie auf die verlagerten Dateien zugreift, lassen sich deren Quellverzeichnisse mit der dokumentierten Einstellung aus dem Function-Bundle ausschließen:
TOML[tool.vercel.fastapi.static] exclude = trueBenötigt der Laufzeitcode diese Dateien weiterhin, bleibt die Standardeinstellung bestehen.
Aufteilung deployen und verifizieren
vc deployausführen. Je eine öffentliche Datei, eine geschützte Datei und eine API-Route aufrufen. Zuerst prüfen, ob die geschützte Antwort weiterhin korrekt funktioniert. Anschließend in Usage die Werte für Function Invocations, Active CPU, Provisioned Memory, Fast Origin Transfer, Edge Requests und Fast Data Transfer vergleichen. Das öffentliche Beispiel sollte den Function-Pfad verlassen, ohne aus den CDN-Summen zu verschwinden.
Wo die Ersparnis endet
Der direkte Preis für Aufrufe beträgt im Pro-Tarif nur $0.60 pro Million. Bei einer kleinen Anwendung liegt die finanzielle Ersparnis womöglich im Centbereich oder wird von der monatlichen Nutzungsgutschrift aufgefangen. Wertvoller kann sein, den Asset-Traffic aus der Function-Nutzung herauszuhalten und Compute-Spielraum für echte API-Arbeit zu bewahren.
Die Ersparnis wächst, wenn viel öffentlicher Asset-Traffic anfällt, der alte Function-Pfad den Speicher lange genug belegte oder die Antworten nennenswerten Fast Origin Transfer erzeugten. Sie bleibt klein, wenn die Dateien bereits unter public/ lagen, wenig Traffic anfällt oder Sicherheitsregeln die Pfade zu Recht auf der Function halten.
Asset-Optimierung ersetzt die Änderung ebenfalls nicht. Dasselbe große JavaScript-Bundle, Bild oder dieselbe Schriftart muss weiterhin über das CDN zum Besucher gelangen. Erst kleinere Dateien senken den Fast Data Transfer.
Der nächste Schritt am Montag
Handlungsbedarf besteht diese Woche, wenn app.frontend() oder StaticFiles öffentliche Dateien ausliefert und diese Anfragen in der Function-Nutzung auftauchen. Abwarten ist sinnvoll, wenn die Dateien geschützt sind und ihre Zugriffsregeln noch nicht getrennt wurden. Ohne Auswirkung bleibt die Änderung, wenn die betreffenden Dateien bereits aus public/ oder einem anderen CDN-gestützten Pfad kommen.
Am Montag die öffentlichen und geschützten Asset-Pfade inventarisieren, alle erforderlichen Routen und Schutzmechanismen erhalten und anschließend ein Deployment mit je einer Anfrage pro Klasse prüfen. Nur den gemessenen Rückgang der Function-Nutzung einplanen. CDN-Anfragen und Transfer bleiben in der Kalkulation.
Weitere verständliche Einordnungen von Plattformänderungen mit Auswirkungen auf Betriebskosten gibt es im Newsletter.
- Zuletzt aktualisiert
- 13. Sept. 2026
- Kategorie
- Explained







