Cloudflare kjører Workers-runtimen i 348 byer fordelt på 8 regioner, ifølge Cloudflares egen nettverksside (oppdatert august 2026). Det betyr at koden din kjører nær nesten enhver bruker i Norden, uten at du selv trenger å velge region eller sette opp servere. For utviklere som vil teste edge-computing uten å bygge egen infrastruktur, er Workers i praksis den raskeste veien fra idé til produksjon.

Denne guiden viser deg hvordan du går fra tom konto til et fungerende, distribuert prosjekt: en URL-forkorter bygget på Workers KV, med egen database via D1 og objektlagring via R2 lagt til underveis. Du trenger ingen tidligere erfaring med Cloudflare, men grunnleggende kjennskap til JavaScript og terminalen gjør det enklere å følge med.

For norske og nordiske team er edge-computing mer enn en teknisk kuriositet akkurat nå. Diskusjonen om skysuverenitet og skyrepatriering har preget både offentlig sektor og privat næringsliv gjennom 2026, og flere organisasjoner ser på plattformer med lavere driftskompleksitet og forespørsel-basert prising som en måte å redusere avhengigheten til én stor skyleverandør. Workers passer inn i den samtalen fordi du betaler for faktisk bruk, ikke for servere som står og venter, og fordi du selv styrer hvor data lagres gjennom valg av KV-, D1- og R2-navnerom.

Hva er Cloudflare Workers, og hvorfor er det aktuelt nå

Cloudflare Workers er en serverløs plattform der koden din kjører som V8-isolater i stedet for i tradisjonelle containere. Isolater deler samme prosess og minneområde på tvers av tusenvis av kjørende funksjoner, noe som fjerner kaldstart-problemet de fleste kjenner fra AWS Lambda og andre containerbaserte løsninger. Tredjeparts-benchmarks fra PkgPulse i 2026 målte Node.js-kaldstart på under 5 millisekunder p95 for Workers, mot 1,2 til 2,8 sekunder p95 for Lambda i samme test.

Plattformen har fått flere endringer det siste året. Fra kompatibilitetsdato 4. august 2026 aktiverer Cloudflare nodejs_compat og nodejs_compat_v2 som standard for nye prosjekter, ifølge Cloudflares endringslogg. Det betyr at du slipper å slå på Node.js-kompatibilitet manuelt slik du måtte tidligere, og de fleste innebygde Node-moduler fungerer rett ut av boksen. For team som allerede har kode skrevet mot Node.js-økosystemet, senker dette terskelen for å flytte tjenester til kanten av nettverket betraktelig.

Gratisplanen gir 100 000 forespørsler per dag og 10 millisekunder CPU-tid per kall, ifølge Cloudflares offisielle prisside. Det er nok til å bygge og teste et komplett prosjekt uten å legge inn betalingskort, noe vi gjør gjennomgående i denne guiden.

Slik fungerer V8-isolater: Workers vs containere og funksjoner

Der en tradisjonell serverløs funksjon starter en hel container eller mikro-VM for hvert kall, kjører en Worker som en isolert kontekst inne i en allerede varm V8-prosess. Cloudflare holder motoren kjørende kontinuerlig på tvers av nettverket, så koden din trenger sjelden en full oppstart. Det gir også en annen konsekvens: en Worker har som standard 128 MB minne og maks 5 minutter CPU-tid på betalt plan, ifølge grenselisten hos Cloudflare, mens Lambda kan kjøre opptil 15 minutter og bruke betydelig mer minne.

Isolat-modellen har også en sikkerhetsside. Fordi hver Worker kjører i sin egen strengt sandboksede kontekst uten tilgang til filsystemet eller andre kjørende isolater, blir mange klasser av sårbarheter som rammer container-baserte plattformer irrelevante her. Det betyr ikke at du kan la vær å tenke på sikkerhet, men angrepsflaten mot selve runtimen er vesentlig mindre enn for en tradisjonell VM eller container du selv må patche og holde oppdatert.

Konsekvensen for deg som utvikler er enkel å huske: Workers passer best til korte, hyppige operasjoner nær brukeren, som API-ruting, autentisering, caching-logikk og enkel databehandling. Tunge batch-jobber eller lange bakgrunnsprosesser hører fortsatt hjemme i en tradisjonell serverløs tjeneste eller på en dedikert server.

Forutsetninger: verktøy og versjoner du trenger før du starter

Sett av rundt 45 minutter til hele oppsettet, inkludert de valgfrie stegene med D1 og R2. Under er alt du trenger installert og klart før du går videre til steg 1.

Har du fra før jobbet med annen serverløs teknologi, som AWS Lambda eller Vercel Functions, vil mye av dette kjennes kjent. Den største forskjellen ligger i konfigurasjonsfilen og kommandolinjeverktøyet, ikke i selve programmeringsmodellen. Har du derimot aldri jobbet med serverløst før, er det ingen grunn til bekymring, siden hvert steg under forklarer nøyaktig hva kommandoen gjør og hvorfor den er nødvendig.

VerktøyAnbefalt versjonFormål
Node.js18 LTS eller nyereKjøremiljø for Wrangler CLI og lokalt byggverktøy
npmFølger med Node.jsInstallerer og kjører Wrangler
Wrangler CLINyeste versjon fra npmUtvikling, testing og deploy av Workers
Cloudflare-kontoGratisplan holderVertskap for prosjektet ditt
Git (valgfritt)Nyeste versjonVersjonskontroll og eventuell CI/CD
KodeeditorVS Code anbefalesRedigering, med god TypeScript-støtte

Du trenger ikke betalingskort for å følge denne guiden. Alt vi bygger holder seg innenfor gratisplanens grenser, som du finner en full oversikt over lenger ned i artikkelen.

Steg 1: Opprett en Cloudflare-konto og aktiver Workers

Registrer deg på cloudflare.com med e-post og passord, eller logg inn med en eksisterende konto. Første gang du åpner Workers-fanen i dashbordet, ber Cloudflare deg velge et gratis subdomene på formen ditt-navn.workers.dev. Dette subdomenet blir standardadressen for alle Workers du deployerer, inntil du eventuelt kobler til et eget domene i steg 14.

Jobber du i et team, opprett en egen Cloudflare-konto for organisasjonen fremfor å dele en privat konto mellom flere personer. Dashbordet lar deg legge til medlemmer med separate roller under “Members”, noe som gjør det mulig å begrense hvem som kan endre DNS eller slette prosjekter uten at alle må dele samme passord.

Velg et subdomene du kan leve med over tid, siden det ikke lar seg endre uten å kontakte support. Mange team bruker firmanavnet eller prosjektnavnet direkte.

Steg 2: Installer Node.js og Wrangler CLI

Wrangler er kommandolinjeverktøyet som håndterer alt fra lokal utvikling til deploy. Installer det globalt med npm, og bekreft at det svarer riktig etterpå.

npm install -g wrangler
wrangler --version

Kommandoen skriver ut et versjonsnummer på formen wrangler X.Y.Z. Får du “command not found” i stedet, sjekk at npm sin globale bin-mappe faktisk ligger i PATH-variabelen din. På macOS og Linux løser echo $PATH og en rask titt i terminalen dette som regel raskt.

Steg 3: Logg inn med Wrangler og koble til kontoen

wrangler login

Kommandoen åpner nettleseren og ber deg godkjenne tilgang for Wrangler mot Cloudflare-kontoen din. Godkjenn forespørselen, gå tilbake til terminalen, og du er koblet til. Har du flere kontoer, brukes wrangler whoami for å bekrefte hvilken konto du faktisk er logget inn på, noe som sparer deg for forvirring senere om du jobber med både privat og jobb-konto på samme maskin.

Steg 4: Opprett ditt første Workers-prosjekt

npm create cloudflare@latest lenke-forkorter
cd lenke-forkorter

Kommandolinje-veiviseren stiller noen spørsmål. Velg malen “Hello World Worker”, velg JavaScript eller TypeScript etter smak (kodeeksemplene i denne guiden er skrevet i JavaScript), og svar ja på å installere avhengigheter automatisk. Du kan trygt hoppe over automatisk Git-initialisering hvis du foretrekker å styre versjonskontroll selv.

Steg 5: Forstå prosjektstrukturen og wrangler.jsonc

Veiviseren genererer en enkel mappestruktur med selve koden i src/index.js og konfigurasjonen i wrangler.jsonc. Sistnevnte fil styrer navn, kompatibilitetsdato og alle bindinger til andre Cloudflare-tjenester du legger til underveis.

{
  "name": "lenke-forkorter",
  "main": "src/index.js",
  "compatibility_date": "2026-08-04"
}

Legg merke til at kompatibilitetsdatoen er satt til 4. august 2026 eller senere, noe som gir deg Node.js-kompatibilitet automatisk uten ekstra flagg, slik det ble beskrevet innledningsvis. Bruker du en eldre kompatibilitetsdato av vane fra et gammelt prosjekt, må du fortsatt legge til "compatibility_flags": ["nodejs_compat"] manuelt.

Steg 6: Skriv din første Worker-funksjon

Åpne src/index.js og erstatt innholdet med en enkel handler som svarer på HTTP-forespørsler. Alt en Worker trenger er et eksportert objekt med en fetch-metode.

export default {
  async fetch(request, env, ctx) {
    return new Response("Hei fra kanten av nettverket!", {
      headers: { "content-type": "text/plain; charset=utf-8" },
    });
  },
};

Legg merke til de tre parameterne. request gir deg tilgang til den innkommende forespørselen, env gir tilgang til bindinger som KV, D1 og hemmeligheter du setter opp senere, og ctx lar deg planlegge arbeid som fortsetter etter at svaret er sendt, blant annet med ctx.waitUntil().

Steg 7: Test lokalt med wrangler dev

wrangler dev

Wrangler starter en lokal server som etterligner Workers-runtimen, og du får typisk denne outputen i terminalen:

⎔ Starting local server...
[wrangler:info] Ready on http://localhost:8787
[wrangler:info] GET / 200 OK (4ms)

Åpne http://localhost:8787 i nettleseren, og du skal se teksten fra steg 6. Endrer du koden mens serveren kjører, laster Wrangler den på nytt automatisk, så du slipper å starte om for hver endring.

Steg 8: Legg til ruting og HTTP-logikk

De fleste ekte prosjekter trenger mer enn ett endepunkt. Bruk den innebygde URL-klassen til å lese stien og bygge enkel ruting uten å legge til et rammeverk.

export default {
  async fetch(request, env, ctx) {
    const url = new URL(request.url);

    if (url.pathname === "/api/status") {
      return Response.json({
        status: "ok",
        region: request.cf?.colo ?? "ukjent",
      });
    }

    return new Response("Fant ikke siden", { status: 404 });
  },
};

Feltet request.cf.colo viser hvilken Cloudflare-datasenter-kode som håndterte kallet, praktisk når du feilsøker geografisk ruting eller vil bekrefte at trafikk fra Norden faktisk treffer et nærliggende punkt i nettverket.

Steg 9: Koble til Workers KV for nøkkelverdi-lagring

Workers KV er en global nøkkelverdi-database bygget for rask lesing på tvers av hele nettverket. Den passer perfekt til URL-forkorteren vår, der vi lagrer korte koder som peker til lange lenker. Opprett et navnerom først.

wrangler kv namespace create LENKER

Kommandoen skriver ut en id du limer inn i wrangler.jsonc under en ny kv_namespaces-seksjon:

{
  "kv_namespaces": [
    { "binding": "LENKER", "id": "SETT_INN_ID_HER" }
  ]
}

Gratisplanen for KV gir deg 100 000 lesninger og 1 000 skrivninger per dag, samt 1 GB lagring totalt, ifølge Cloudflares prisside for KV. Det holder lenge for et lite til mellomstort prosjekt.

Steg 10: Sett opp en D1-database for strukturerte data

Der KV passer for enkle nøkkelverdi-oppslag, gir D1 deg en ekte SQLite-database om du trenger relasjoner eller spørringer utover enkle oppslag, for eksempel statistikk over hvor mange ganger hver lenke er brukt.

wrangler d1 create lenke-statistikk
wrangler d1 execute lenke-statistikk --command "CREATE TABLE besok (id INTEGER PRIMARY KEY, kode TEXT, antall INTEGER DEFAULT 0)"

Legg til bindingen i wrangler.jsonc med navnet og id-en kommandoen ga deg, på samme måte som med KV over. D1 sin gratisplan dekker 5 millioner leste rader og 100 000 skrevne rader per dag, med 5 GB total lagring, ifølge Cloudflares prisside for D1.

D1 kjører som en distribuert SQLite-database, noe som betyr at du skriver vanlig SQL og slipper å lære et nytt spørrespråk bare for å telle antall besøk per kortkode. Kombiner den gjerne med KV slik: bruk KV til selve videresendingen fordi lesehastigheten der er marginalt raskere, og skriv statistikk til D1 asynkront via ctx.waitUntil() slik at brukeren aldri venter på databaseskrivingen.

Steg 11: Legg til R2 for objektlagring uten utgående kostnader

Trenger prosjektet ditt å lagre filer, som opplastede bilder eller eksporterte rapporter, er R2 svaret. Den store fordelen fremfor S3-kompatible alternativer er at Cloudflare ikke tar betalt for utgående trafikk fra R2, ifølge R2 sin prisside.

wrangler r2 bucket create lenke-forkorter-filer

Legg deretter til en r2_buckets-seksjon i wrangler.jsonc med bucket-navnet, og du kan lese og skrive objekter direkte fra Worker-koden via env.MIN_BUCKET.put() og .get(). For URL-forkorteren vår trenger vi ikke R2 i dette prosjektet, men steget er verdt å kjenne til før neste prosjekt trenger fillagring.

Steg 12: Håndter hemmeligheter og miljøvariabler trygt

API-nøkler og passord hører aldri hjemme rett i koden eller i wrangler.jsonc, som ofte havner i versjonskontroll. Bruk i stedet wrangler secret, som krypterer verdien og gjør den tilgjengelig kun i produksjon via env.

wrangler secret put API_NOKKEL

Terminalen ber deg lime inn verdien, som aldri vises i loggen eller lagres i klartekst lokalt. For lokal utvikling bruker du i stedet en .dev.vars-fil i prosjektroten, som du legger til i .gitignore med det samme du oppretter den.

Steg 13: Deploy til produksjon med wrangler deploy

wrangler deploy

Kommandoen pakker koden, laster den opp til Cloudflares nettverk, og gjør den tilgjengelig globalt på sekunder. En typisk output ser slik ut:

Total Upload: 1.4 KiB / gzip: 0.7 KiB
Uploaded lenke-forkorter (1.9 sec)
Deployed lenke-forkorter triggers (0.5 sec)
  https://lenke-forkorter.ditt-subdomene.workers.dev
Current Version ID: 8f2a1c3e-...

Besøk lenken output-en gir deg, og prosjektet ditt kjører live, tilgjengelig fra alle 348 byene i Cloudflares nettverk samtidig, uten at du selv har rørt en eneste server.

Steg 14: Koble til eget domene og sett opp ruter

Det gratis workers.dev-subdomenet er praktisk for testing, men de fleste produksjonsprosjekter vil kjøre på eget domene. Forutsatt at domenet allerede er koblet til Cloudflare som DNS-leverandør, legger du til en routes-seksjon i wrangler.jsonc.

{
  "routes": [
    { "pattern": "kort.dittdomene.no/*", "zone_name": "dittdomene.no" }
  ]
}

Kjør wrangler deploy på nytt, og Worker-en svarer nå på det egendefinerte domenet i stedet for, eller i tillegg til, standard-subdomenet. Merk at DNS-endringer noen ganger tar noen minutter å slå gjennom globalt, så ikke bli bekymret om det egendefinerte domenet ikke svarer med en gang etter deploy.

Overvåking og logging med wrangler tail

Når Worker-en er live, trenger du innsyn i hva som faktisk skjer i produksjon. Wrangler har et innebygd kommando for å strømme logger i sanntid, uten at du trenger å sette opp en egen logg-tjeneste for et lite prosjekt.

wrangler tail lenke-forkorter

Kommandoen viser hver innkommende forespørsel fortløpende, inkludert eventuelle console.log-kall fra koden din, statuskode og hvor lang tid kallet tok. Det er uvurderlig når du feilsøker et problem som kun dukker opp i produksjon, siden lokal wrangler dev ikke alltid klarer å reprodusere nettverksforhold eller region-spesifikk oppførsel. For prosjekter som vokser forbi enkel feilsøking i terminalen, kan du koble Workers til Logpush og sende strukturerte logger videre til et eksternt analyseverktøy, men for de fleste sideprosjekter og mindre tjenester holder wrangler tail lenge.

Automatiser deploy med GitHub Actions

Manuell wrangler deploy fra egen maskin fungerer fint til å komme i gang, men et team bør ha automatisk deploy fra hovedgrenen så snart prosjektet passerer eksperiment-stadiet. Opprett et API-token med begrenset tilgang under “Manage Account” i Cloudflare-dashbordet, og legg det til som en hemmelighet i GitHub-repoet under navnet CLOUDFLARE_API_TOKEN.

name: Deploy Worker
on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Deploy
        uses: cloudflare/wrangler-action@v3
        with:
          apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}

Hver push til hovedgrenen trigger nå en automatisk deploy, uten at noen i teamet trenger lokal tilgang til produksjonsmiljøet. Legg gjerne til et separat steg som kjører tester før deploy-steget, slik at en feil aldri når produksjon uten at noen fanger den først.

Sikkerhet: begrens tilgang og beskytt hemmeligheter

Tre vaner beskytter deg mot de vanligste feilene team gjør med Workers. Bruk alltid API-tokens med minimal tilgang i stedet for din personlige globale API-nøkkel når du setter opp CI/CD, siden en lekket global nøkkel gir tilgang til hele Cloudflare-kontoen. Sett rate-limiting-regler i Cloudflares dashbord for offentlige endepunkter, slik at et enkelt Worker-endepunkt ikke kan bli et mål for automatiserte forespørsler i stort volum. Og valider alltid input fra request før du sender den videre til KV, D1 eller en ekstern tjeneste, siden Workers ikke gir deg noen innebygd beskyttelse mot ondsinnet input bare fordi koden kjører på kanten av nettverket.

Sett også en klar rutine for rotasjon av hemmeligheter. En vanlig feil er å sette en API-nøkkel med wrangler secret put én gang og aldri røre den igjen, selv etter at en utvikler slutter eller en tredjepartsnøkkel blir kompromittert et annet sted. Loggfør hvem som har tilgang til å endre hemmeligheter i det tilknyttede Cloudflare-teamet, og bruk separate tokens for utviklingsmiljø og produksjon, slik at et lekket testtoken aldri kan brukes til å endre en produksjonstjeneste.

Vanlige fallgruver og feilsøking

Fem fallgruver de fleste går i første gang

  • Å glemme bindinger i produksjon. Bindinger du la til lokalt i .dev.vars følger ikke automatisk med til produksjon. Hemmeligheter må settes eksplisitt med wrangler secret put for hvert miljø.
  • Å anta ubegrenset CPU-tid. Gratisplanens 10 millisekunder CPU-tid per kall er strengt håndhevet. Tunge synkrone loops eller store JSON-parsinger kan treffe taket selv om koden virker rask lokalt.
  • Å blande sammen KV sin eventual consistency med en vanlig database. Skriver du til KV, kan det ta noen sekunder før endringen er synlig i alle regioner. Bruk D1 i stedet hvis du trenger umiddelbar konsistens.
  • Å committe wrangler.jsonc med hemmeligheter i klartekst. Filen inneholder ofte navnerom-id-er som ikke er sensitive, men enkelte legger ved API-nøkler direkte i konfigurasjonen ved en feil.
  • Å ikke sette kompatibilitetsdato bevisst. En gammel kompatibilitetsdato fanger deg i eldre runtime-oppførsel, mens en for ny dato i et delt prosjekt kan overraske kolleger som ikke har oppdatert Wrangler.

Feilsøkingstabell: 8 vanlige problemer og løsninger

ProblemSannsynlig årsakLøsning
“command not found: wrangler”npm sin globale bin-mappe mangler i PATHKjør npm config get prefix og legg mappen til i PATH
Deploy feiler med “Authentication error”Wrangler-økten er utløptKjør wrangler logout etterfulgt av wrangler login
KV-binding er “undefined” i kodenBindingen mangler i wrangler.jsonc, eller navnet stemmer ikkeSjekk at binding-navnet i koden matcher nøyaktig det som står i konfigurasjonen
Lokal server viser gammel kodeWrangler dev cacher enkelte ganger byggresultatetStopp serveren med Ctrl+C og start wrangler dev på nytt
“Exceeded CPU time limit”Synkron kode bruker for lang tid per forespørselDel opp tunge operasjoner, eller flytt dem til en kø/bakgrunnsjobb
D1-spørring returnerer tom listeFeil databasenavn i binding, eller tabellen finnes ikke ennåKjør wrangler d1 execute med SELECT for å bekrefte at data faktisk finnes
Egendefinert domene svarer 404Ruten i wrangler.jsonc matcher ikke DNS-oppsettetBekreft at zone_name er nøyaktig domenet slik det står i Cloudflare-dashbordet
Node-modul feiler med “not supported”Modulen bruker en Node-API Workers ikke støtter ennåSjekk Cloudflares liste over støttede Node.js-API-er før du velger biblioteket

Avanserte tips: caching, cron-jobber og Workers AI

Når grunnoppsettet fungerer, er det tre utvidelser de fleste team legger til etter hvert. Bruk caches.default for å mellomlagre responser du regner ut ofte men som ikke endrer seg mellom hver forespørsel, slik at du sparer både CPU-tid og eksterne kall. Sett opp Cron Triggers i wrangler.jsonc for planlagte jobber, for eksempel en nattlig opprydding av utgåtte KV-nøkler, uten å måtte holde en egen server oppe for et enkelt tidsstyrt kall.

Workers AI lar deg kjøre inferens direkte fra samme kodebase, priset til 0,011 dollar per 1 000 Neurons med 10 000 Neurons gratis per dag, ifølge Cloudflares prisside for Workers AI. Det gjør det mulig å legge til tekstgenerering, bildeklassifisering eller enkel oversettelse i samme Worker som håndterer resten av trafikken, uten å sette opp en separat AI-tjeneste.

Vurder også Durable Objects når prosjektet trenger tilstand som må holdes konsistent på tvers av flere forespørsler, som en sanntids chat-rom-teller eller en enkel køhåndterer. Gratisplanen tillater kun SQLite-baserte Durable Objects, mens betalt plan åpner for full bruk innenfor den samme $5-i-måneden-pakken som dekker resten av Workers-plattformen.

Skriv automatiske tester før prosjektet vokser forbi noen få endepunkter. Cloudflare sin egen testpakke bygger på Vitest og lar deg kjøre koden mot en simulert Workers-runtime, ikke bare mot en generisk Node-mock, noe som fanger opp forskjeller i API-oppførsel du ellers ikke ville sett før produksjon.

npm install -D vitest @cloudflare/vitest-pool-workers
npx vitest run

Legg testene i en test-mappe ved siden av src, og kjør npx vitest run som eget steg i GitHub Actions-oppsettet fra forrige avsnitt, slik at ingen endring når produksjon uten at testene har kjørt grønt først.

Priser og grenser: gratisplan mot betalt plan

RessursGratisplanBetalt plan (fra $5/mnd)
Forespørsler100 000/dag10 millioner/mnd inkludert, deretter $0,30/million
CPU-tid10 ms per kall30 millioner CPU-ms/mnd inkludert, deretter $0,02/million ms
Workers KV lesing100 000/dag10 millioner/mnd, deretter $0,50/million
Workers KV skriving1 000/dag1 million/mnd, deretter $5,00/million
D1 leste rader5 millioner/dag25 milliarder/mnd inkludert, deretter $0,001/million
D1 lagring5 GB totalt5 GB inkludert, deretter $0,75/GB per måned
Durable ObjectsKun SQLite-baserteFull tilgang inkludert i pakken

Tallene over er hentet direkte fra Cloudflares offisielle prissider for Workers, KV og D1. For de fleste sideprosjekter og mindre produksjonstjenester dekker gratisplanen alt du trenger i lang tid før betalt plan blir nødvendig.

Cloudflare Workers vs AWS Lambda: ytelse og kostnad

Valget mellom Workers og Lambda avhenger mest av hvor tett integrert du allerede er i et av økosystemene, men noen forskjeller er verdt å kjenne til før du bestemmer deg.

EgenskapCloudflare WorkersAWS Lambda
Kaldstart (Node.js, p95, tredjepartsmåling)Under 5 ms1,2–2,8 sekunder
Maks CPU-tid per kall5 minutter (betalt plan)15 minutter
Minne per instans128 MBOpptil 10 GB, konfigurerbart
Globalt fotavtrykk348 byer, 8 regionerRegionsbasert, egen konfigurasjon per region
Gratis forespørsler100 000/dag1 million/mnd
PrismodellForespørsler + CPU-tidForespørsler + varighet × minne

Workers vinner tydelig på kaldstart og global spredning, mens Lambda fortsatt har et bredere økosystem av integrasjoner mot resten av AWS. Kjører teamet ditt allerede tungt på AWS, kan Lambda gi mindre friksjon. Bygger du derimot noe nytt fra bunnen med fokus på lav ventetid nær brukeren, er Workers vanskelig å slå på ren respons­tid.

I praksis ser mange team på dette som et valg mellom to lag i samme arkitektur, ikke et enten-eller. Et vanlig mønster er å la Workers håndtere ruting, caching, autentisering og enkel logikk aller nærmest brukeren, mens tunge, langvarige jobber, som bildebehandling eller store dataeksporter, fortsatt kjører i Lambda eller på en dedikert server bak. Da får du lav ventetid der det merkes mest for brukeren, uten å måtte flytte hele backend-en på en gang.

Det ferdige prosjektet: en komplett URL-forkorter med KV

Her er hele koden samlet, klar til å limes inn i src/index.js etter at du har opprettet KV-navnerommet fra steg 9. Prosjektet støtter å opprette korte koder via POST, og å bli videresendt til den lange lenken via GET.

export default {
  async fetch(request, env, ctx) {
    const url = new URL(request.url);
    const kode = url.pathname.slice(1);

    if (request.method === "POST" && url.pathname === "/") {
      const body = await request.json().catch(() => null);
      if (!body?.malUrl) {
        return Response.json({ feil: "malUrl mangler" }, { status: 400 });
      }

      const kortKode = Math.random().toString(36).slice(2, 8);
      await env.LENKER.put(kortKode, body.malUrl, {
        expirationTtl: 60 * 60 * 24 * 90,
      });

      return Response.json({
        kortKode,
        kortUrl: `${url.origin}/${kortKode}`,
      });
    }

    if (request.method === "GET" && kode) {
      const malUrl = await env.LENKER.get(kode);
      if (!malUrl) {
        return new Response("Fant ikke lenken", { status: 404 });
      }
      return Response.redirect(malUrl, 302);
    }

    return new Response("Send POST med { malUrl } for å lage en kort lenke", {
      status: 200,
    });
  },
};

Test det lokalt med wrangler dev, send en POST-forespørsel med et JSON-objekt som inneholder malUrl, og du får tilbake en kort kode. Besøk /koden etterpå, og Worker-en videresender deg til original-lenken. Kodene utløper automatisk etter 90 dager takket være expirationTtl, så du slipper å bygge egen rydde-logikk.

Deploy prosjektet med wrangler deploy, og du har en fullstendig fungerende, globalt distribuert tjeneste, kjørt for null kroner så lenge du holder deg innenfor gratisplanens grenser. Vil du utvide videre, er neste naturlige steg å legge til statistikk-tellingen i D1 fra steg 10, en enkel HTML-side for å opprette lenker uten å måtte sende rå JSON manuelt, og kanskje rate-limiting per IP-adresse for å hindre misbruk av det åpne endepunktet.

Ofte stilte spørsmål om Cloudflare Workers

Koster det noe å komme i gang med Cloudflare Workers?
Nei. Gratisplanen dekker 100 000 forespørsler per dag og er nok til å bygge og drifte mindre prosjekter uten kostnad, ifølge Cloudflares egen prisside. Du trenger ikke legge inn betalingskort før du eventuelt vokser forbi de grensene.

Kan jeg bruke TypeScript i stedet for JavaScript?
Ja, veiviseren i npm create cloudflare@latest tilbyr TypeScript som valg direkte, og Wrangler kompilerer koden automatisk før deploy uten ekstra oppsett fra deg.

Fungerer eksisterende npm-pakker i Workers?
De fleste enkle pakker fungerer, spesielt etter at nodejs_compat ble standard fra august 2026. Pakker som er avhengige av filsystemtilgang eller native binærfiler fungerer derimot ikke, siden runtimen ikke har et vanlig operativsystem under seg.

Hvor lenge lagres data i Workers KV?
Så lenge du vil, med mindre du selv setter en utløpstid via expirationTtl eller expiration, slik vi gjorde i URL-forkorteren over. Uten en satt utløpstid ligger dataen i KV til du sletter den manuelt.

Kan jeg kjøre en hel database-drevet backend på Workers?
Ja, kombinasjonen av D1 for strukturerte data, KV for rask nøkkelverdi-lagring og R2 for filer dekker de fleste behovene en mellomstor backend har, uten at du trenger å administrere egne servere eller containere.

Hva skjer om jeg går over CPU-tidsgrensen?
Forespørselen avbrytes, og klienten mottar en feil. Gratisplanens 10 millisekunder er strengt, mens betalt plan gir betydelig mer slingringsmonn med 30 millioner CPU-millisekunder inkludert per måned.

Er Cloudflare Workers egnet for produksjonstrafikk, eller kun til prototyping?
Workers driver allerede produksjonstrafikk for et bredt spekter av selskaper, fra små startups til store nettsteder som bruker plattformen til API-ruting og caching-logikk foran eksisterende backend-systemer. Det er ikke kun et prototyping-verktøy.

Må jeg flytte hele applikasjonen til Workers på én gang?
Nei. Mange team starter med å flytte ett enkelt endepunkt, som autentisering eller en cache-lag foran en eksisterende API, og utvider gradvis etter hvert som de blir komfortable med plattformen og grensene den setter.

Hvordan feilsøker jeg en Worker som fungerer lokalt men feiler i produksjon?
Start med wrangler tail for å se faktiske forespørsler og feilmeldinger i sanntid. Vanligste årsak er en binding som finnes i .dev.vars lokalt men aldri ble satt med wrangler secret put i produksjon, eller en kompatibilitetsforskjell mellom lokal og global runtime.

Kan jeg bruke egen database utenfor Cloudflare sammen med Workers?
Ja, en Worker kan gjøre vanlige HTTP- eller databasekall mot eksterne tjenester som Postgres via en HTTP-driver, men husk at hvert utgående kall legger til ventetid og teller mot subrequest-grensen på 50 per forespørsel på gratisplanen, ifølge Cloudflares grenseliste.

Relatert dekning

Les mer om skytjenester på shattered.io sin skytjenester-side, eller gå direkte til Cloudflares offisielle kom-i-gang-guide og dokumentasjonen for Node.js-kompatibilitet for detaljer denne guiden ikke dekker.