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.

Sunday, September 13, 2026Omid Saffari
Tools
Vercel Functions umgehen: FastAPI-Dateien direkt aus dem CDN

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.

Architekturschnitt: Öffentliche FastAPI-Assets nehmen den kurzen Weg vom Besucher über das CDN, während geschützte Assets durch die Function und deren Zugriffskontrolle laufen
Öffentliche Assets können am CDN enden. Geschützte Assets benötigen weiterhin die Function, wenn FastAPI die Anfrage prüfen muss.

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:

MessgrößeVor der VerlagerungNach der Verlagerung
Function Invocations1 Million0
Active CPU für diese AnfragenGemessen0
Provisioned Memory für diese AnfragenGemessen0
Fast Origin Transfer für diese AntwortenGemessen0
CDN Requests oder Edge Requests1 Million1 Million
Fast Data Transfer zu BesuchernGemessene BytesGemessene Bytes

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.

  1. Öffentliche und geschützte Pfade kennzeichnen

    Alle app.frontend()-Verzeichnisse und StaticFiles-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.

  2. Deklarationsreihenfolge prüfen

    Eine Function-Route muss vor einem StaticFiles-Mount stehen, wenn sie Vorrang haben soll. Vercel dokumentiert dieses Muster:

    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. Geschützte Pfade auf der Function belassen

    Vor einer Konfigurationsänderung Top-Level-Middleware, Middleware in Unteranwendungen und Frontend-Abhängigkeiten prüfen. cdn = true darf nicht allein deshalb gesetzt werden, damit eine Kurve fällt; jede betroffene Datei muss tatsächlich öffentlich sein. cdn = false ist richtig, wenn der gesamte passende Traffic FastAPI durchlaufen muss.

  4. Ü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 = true

    Benötigt der Laufzeitcode diese Dateien weiterhin, bleibt die Standardeinstellung bestehen.

  5. Aufteilung deployen und verifizieren

    vc deploy ausfü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

Diese Seite in Google bevorzugen

omidsaffari.com als bevorzugte Quelle in der Google-Suche hinzufügen

Markieren Sie omidsaffari.com als bevorzugte Quelle, und Google hebt die Seite für Sie in Top Stories, AI Overviews und AI Mode hervor.

OpenAI API Key mit Ablaufdatum: So gelingt die Rotation ohne Ausfall

OpenAI API Key mit Ablaufdatum: So gelingt die Rotation ohne Ausfall

OpenAI API Keys können ablaufen. Dieser Leitfaden zeigt, wie Teams Ersatzschlüssel bereitstellen, produktiv prüfen und ohne Ausfall rotieren.13. Sept. 2026Explained
Connector Manager in Vercel: Klare Zuständigkeit für gemeinsame Zugangsdaten

Connector Manager in Vercel: Klare Zuständigkeit für gemeinsame Zugangsdaten

Mit dem Connector Manager begrenzen Vercel-Teams, wer gemeinsame Verbindungen pflegt – ohne Provider-Rechte, Laufzeitzugriff und Freigaben zu vermischen.13. Sept. 2026Explained
Cloudflare R2: Dateien ohne Dateiendung in AI Search indexieren

Cloudflare R2: Dateien ohne Dateiendung in AI Search indexieren

Cloudflare R2: AI Search erkennt Dateien ohne Endung jetzt am HTTP-Content-Type. So bleiben stabile Objektschlüssel erhalten – samt Prüf- und Kostenregeln.12. Sept. 2026Explained
Code Sandbox mit 64 GB: Was Vercels Speicherplus bringt

Code Sandbox mit 64 GB: Was Vercels Speicherplus bringt

Vercels Code Sandbox bietet jetzt 64 GB lokalen Speicher. Welche Repository-, Build- und Datenjobs profitieren – und was vor dem Umstieg zu messen ist.12. Sept. 2026Explained
Cloudflare Workflows: Aufbewahrung und Speicherkosten richtig planen

Cloudflare Workflows: Aufbewahrung und Speicherkosten richtig planen

Neue Cloudflare Workflows im Paid-Tarif speichern abgeschlossene und fehlerhafte Instanzen standardmäßig sieben Tage. Aufbewahrung und Kosten richtig planen.11. Sept. 2026Explained
KI Reporting mit ChatGPT Data: Weniger Übergaben im Wochenbericht

KI Reporting mit ChatGPT Data: Weniger Übergaben im Wochenbericht

ChatGPT Data macht aus verbundenen Geschäftsdaten wiederkehrende Berichte. So lassen sich Kosten, Prüfungen, Zugriffe und Freigaben sauber planen.11. Sept. 2026Explained
Cursor AI im Team: Mit Projects wird Review zum Engpass

Cursor AI im Team: Mit Projects wird Review zum Engpass

Cursor AI: Projects bündelt Agenten, Kontext und Trigger. So planen Teams einen begrenzten Pilotversuch mit Kosten, Reviews und klaren Grenzen.11. Sept. 2026Explained
ChatGPT Work: Deep Research teilt das Budget mit Codex

ChatGPT Work: Deep Research teilt das Budget mit Codex

Deep Research in ChatGPT Work teilt sich das Budget mit Codex. Was das für Credits, Kostenkontrolle und den passenden Einsatzbereich bedeutet.10. Sept. 2026Explained
Newsletter

Ein Brief, jeden Sonntag.Funktionierende Systeme, keine heißen Takes.

Wöchentlich. Kein Spam. Jederzeit abbestellbar.