spinny:~/writing $ less serverless-aws-lambda-vercel-cloudflare.md
12Serverless computing lader dig koere kode uden at administrere servere. Du skriver funktioner, deployer dem, og platformen haandterer skalering, tilgaengelighed og infrastruktur. I 2026 dominerer tre platforme serverless-landskabet: **AWS Lambda**, **Vercel Serverless Functions** og **Cloudflare Workers**. Hver har forskellige styrker og kompromiser.34I denne artikel sammenligner vi dem med virkelige eksempler, ydeevneovervejelser og prisanalyser.56## Hvordan Serverless Virker78```mermaid9graph LR10 User -- "HTTP Request" --> Gateway[API Gateway / Edge]11 Gateway -- "Invoke" --> Function[Serverless Function]12 Function -- "Response" --> User13 Function -- "Read/Write" --> DB[(Database)]14```1516Du deployer en funktion. Naar en anmodning ankommer, goer platformen foelgende:171. Starter et eksekveringsmiljoe (eller genbruger et allerede opvarmet)182. Koerer din funktion193. Returnerer svaret204. Skalerer til nul ved inaktivitet (du betaler ikke for inaktiv tid)2122## Platformoversigt2324### AWS Lambda2526Den originale serverless platform (lanceret 2014). Den mest modne og funktionsrige, med dyb integration i AWS-oekosystemet.2728```javascript29// AWS Lambda handler30export const handler = async (event) => {31 const body = JSON.parse(event.body);3233 const result = await processData(body);3435 return {36 statusCode: 200,37 headers: { 'Content-Type': 'application/json' },38 body: JSON.stringify(result),39 };40};41```4243### Vercel Serverless Functions4445Taet integreret med Next.js og frontend-deployment-workflowet. Funktioner deployes sammen med din frontend uden konfiguration.4647```typescript48// app/api/hello/route.ts (Next.js App Router)49import { NextResponse } from 'next/server';5051export async function GET(request: Request) {52 const { searchParams } = new URL(request.url);53 const name = searchParams.get('name') || 'World';5455 return NextResponse.json({ message: `Hello, ${name}!` });56}57```5859### Cloudflare Workers6061Koerer paa Cloudflares edge-netvaerk i over 300 byer verden over. Bruger V8-motoren (samme som Chrome) i stedet for Node.js, hvilket betyder ekstremt hurtige cold starts.6263```javascript64// Cloudflare Worker65export default {66 async fetch(request, env) {67 const url = new URL(request.url);68 const name = url.searchParams.get('name') || 'World';6970 return new Response(71 JSON.stringify({ message: `Hello, ${name}!` }),72 { headers: { 'Content-Type': 'application/json' } }73 );74 },75};76```7778## Funktionssammenligning7980| Funktion | AWS Lambda | Vercel Functions | Cloudflare Workers |81|---------|-----------|-----------------|-------------------|82| **Runtime** | Node.js, Python, Go, Rust, Java, .NET | Node.js, Python, Go, Ruby | V8 Isolates (JS/TS, Rust via WASM) |83| **Maks eksekveringstid** | 15 minutter | 60s (Hobby), 300s (Pro) | 30s (gratis), 15min (betalt) |84| **Hukommelse** | 128MB - 10GB | 1024MB - 3008MB | 128MB |85| **Cold start** | 100-500ms | 100-300ms | < 5ms |86| **Deploy-placering** | Enkelt region (eller multi med indsats) | Flere regioner | 300+ edge-placeringer |87| **Maks payload** | 6MB (synkron), 256KB (asynkron) | 4.5MB | 100MB |88| **Indbygget lagring** | Nej (brug DynamoDB, S3) | Nej (brug ekstern DB) | KV, D1 (SQLite), R2 (S3-kompatibel) |89| **Prismodel** | Per anmodning + varighed | Inkluderet i plan | Per anmodning + varighed |90| **Gratis niveau** | 1M anmodninger/maaned | 100K/maaned (Hobby) | 100K anmodninger/dag |9192## Cold Starts9394Cold start er den tid det tager at initialisere en ny funktionsinstans. Dette er den stoerste ydeevnebekymring med serverless.9596```mermaid97graph LR98 subgraph "Cold Start"99 A[Request] --> B[Provision Environment]100 B --> C[Load Code]101 C --> D[Initialize Runtime]102 D --> E[Execute Function]103 end104105 subgraph "Warm Invocation"106 F[Request] --> G[Execute Function]107 end108```109110| Platform | Typisk Cold Start | Hvorfor |111|----------|-------------------|-----|112| **Cloudflare Workers** | < 5ms | V8-isolationer, intet fuldt runtime noedvendigt |113| **Vercel Functions** | 100-300ms | Node.js runtime paa edge eller regionalt |114| **AWS Lambda** | 100-500ms | Fuld container-initialisering |115| **AWS Lambda (Java)** | 1-5 sekunder | JVM-opstartsoverhead |116117Cloudflare Workers vinder cold starts med en enorm margin, fordi de bruger V8-isolationer i stedet for containere.118119## Prissammenligning120121### Gratis Niveau122123| Platform | Gratis Anmodninger | Gratis Beregning |124|----------|--------------|--------------|125| **AWS Lambda** | 1M/maaned | 400.000 GB-sekunder |126| **Vercel** | 100K/maaned | Inkluderet i Hobby-planen |127| **Cloudflare Workers** | 100K/dag (~3M/maaned) | 10ms CPU per kald |128129### I Stor Skala (10M anmodninger/maaned, gennemsnitlig varighed 50ms)130131| Platform | Estimeret Maanedlig Omkostning |132|----------|----------------------|133| **AWS Lambda** | ~$2,50 (anmodninger) + ~$4,15 (beregning) = **~$6,65** |134| **Vercel** | **$20/maaned** (Pro-plan, inkluderer funktioner) |135| **Cloudflare Workers** | **$5/maaned** (betalt plan, inkluderer 10M anmodninger) |136137For de fleste anvendelsestilfaelde er Cloudflare Workers billigst. Vercels prissaetning er enkel, men inkluderer hele platformen (hosting, CDN, analytics). AWS Lambda har den mest detaljerede prissaetning.138139## Virkelige Anvendelsestilfaelde140141### AWS Lambda: Bedst til142143- **Komplekse backend-workflows** - step functions, haendelsesdrevne arkitekturer144- **Integration med AWS-tjenester** - S3-triggers, DynamoDB-streams, SQS-koeer145- **Langvarige opgaver** - op til 15 minutters eksekveringstid146- **Flersprogede teams** - understoetter det bredeste udvalg af runtimes147148```mermaid149graph TD150 S3[S3 Upload] --> Lambda1[Process Image]151 Lambda1 --> SQS[SQS Queue]152 SQS --> Lambda2[Generate Thumbnails]153 Lambda2 --> DDB[DynamoDB]154 DDB --> Lambda3[Send Notification]155 Lambda3 --> SNS[SNS / Email]156```157158### Vercel Functions: Bedst til159160- **Next.js-applikationer** - API-ruter uden konfiguration161- **Frontend-fokuserede teams** - deploy frontend og backend sammen162- **Hurtig prototyping** - git push for at deploye163- **Jamstack-arkitekturer** - statisk frontend + serverless API164165```typescript166// app/api/subscribe/route.ts167import { NextResponse } from 'next/server';168169export async function POST(request: Request) {170 const { email } = await request.json();171172 // Validate173 if (!email || !email.includes('@')) {174 return NextResponse.json(175 { error: 'Invalid email' },176 { status: 400 }177 );178 }179180 // Save to database181 await db.subscribers.create({ email });182183 return NextResponse.json({ success: true });184}185```186187### Cloudflare Workers: Bedst til188189- **API'er med lav latenstid** - kode koerer paa 300+ placeringer verden over190- **Edge computing** - transformer svar, A/B-test, personalisering191- **API'er med hoejt volumen** - billigst i stor skala med generoes gratis niveau192- **Globale applikationer** - data taet paa brugerne med KV og D1193194```javascript195// Edge-side A/B test196export default {197 async fetch(request, env) {198 const url = new URL(request.url);199200 // Assign user to variant201 const cookie = request.headers.get('Cookie') || '';202 let variant = cookie.includes('ab=b') ? 'b' : 'a';203204 if (!cookie.includes('ab=')) {205 variant = Math.random() < 0.5 ? 'a' : 'b';206 }207208 // Fetch the appropriate version209 const response = await fetch(`${url.origin}/variants/${variant}`);210 const newResponse = new Response(response.body, response);211212 // Set cookie for consistent experience213 newResponse.headers.set('Set-Cookie', `ab=${variant}; Path=/; Max-Age=86400`);214215 return newResponse;216 },217};218```219220## Hvornaar man skal vaelge hvilken221222### Vaelg AWS Lambda hvis:223- Du allerede er investeret i AWS-oekosystemet224- Du har brug for langvarige funktioner (op til 15 minutter)225- Du har brug for komplekse haendelsesdrevne arkitekturer226- Du har brug for runtimes ud over JavaScript (Python, Go, Rust, Java)227228### Vaelg Vercel Functions hvis:229- Du bygger med Next.js eller et frontend-framework230- Du oensker den enkleste deploy-oplevelse (git push)231- Dit team er frontend-fokuseret232- Du oensker hosting + funktioner + CDN i en platform233234### Vaelg Cloudflare Workers hvis:235- Du har brug for den lavest mulige latenstid globalt236- Du oensker den billigste mulighed i stor skala237- Du har brug for edge computing-kapaciteter238- Cold start-tid er kritisk for dit anvendelsestilfaelde239240## Kan man kombinere dem?241242Absolut. En almindelig arkitektur:243244```mermaid245graph TD246 User --> CF[Cloudflare Workers\nEdge caching, routing, A/B tests]247 CF --> Vercel[Vercel\nNext.js frontend + API routes]248 Vercel --> Lambda[AWS Lambda\nHeavy processing, background jobs]249 Lambda --> S3[S3 Storage]250 Lambda --> DB[(Database)]251```252253- **Cloudflare Workers**: edge-routing, caching, sikkerhed254- **Vercel Functions**: frontend API-ruter, SSR255- **AWS Lambda**: tung backend-behandling, planlagte opgaver, haendelses-pipelines256257## Konklusion258259Serverless er modnet betydeligt. I 2026 afhaenger valget mellem AWS Lambda, Vercel Functions og Cloudflare Workers af din stack og dine prioriteter:260261- **Enkleste udvikleroplevelse**: Vercel262- **Mest kraftfuld og fleksibel**: AWS Lambda263- **Bedste ydeevne og priser**: Cloudflare Workers264265Alle tre er produktionsklare og kamptestede. Start med den der passer til din nuvaerende stack, og udvid efterhaanden som dine behov vokser.266
:Serverless i Praksis: AWS Lambda vs Vercel Functions vs Cloudflare Workerslines 1-266 (END) — press q to close