Gesloten bèta

Serverless functies

Zet een functie live. Geen server nodig.

Koppel een repository en elke push bouwt een nieuwe Node.js- of Python-versie. Elke actieve aanroep draait binnen een eigen Firecracker-microVM-grens, met snapshot-starts en zonder gedeelde applicatiecontainer.

  • Ongeveer 25 seconden van push tot live
  • Vorige versie blijft live bij een mislukte build

Lees de documentatie

sarpius / hello-function
main · a7c42de
live
v41 draait terwijl v42 wordt gebouwd zonder downtime
  • Push ontvangen 0.3s
  • Node.js-afhankelijkheden bouwen
  • v42 geactiveerd 24.8s
  • POST /hello 200 · 23ms
hello-function.sarpius.app Live in 24,8 seconden

Zo werkt het

Drie stappen, daarna staat elke push live.

Functions volgen dezelfde git-eerst-werkwijze als de rest van Sarpius, maar draaien in geïsoleerde microVM's die gemaakt zijn voor kortlevend werk.

Stap 01

Koppel je repository

Kies GitHub, GitLab, Gitea, Bitbucket of een andere standaard git-remote. De functie wordt onderdeel van je bestaande Project.

Stap 02

Voeg function.json toe

Leg Node.js of Python vast, het entrybestand, de geheugentier en de timeout. Zo blijft het runtimecontract bij de code die het beschrijft.

Stap 03

Push en routeer

Een push bouwt een nieuwe onveranderlijke versie. Is die klaar, dan schakelt Sarpius het verkeer zonder downtime om. Mislukt de build, dan blijft de vorige versie gewoon staan.

  • GitHub
  • GitLab
  • Gitea
  • Bitbucket
  • + generieke remote

Zie het in actie

Een handler, een klein manifest, een live URL.

Het request-object bevat de HTTP-methode, het pad, de query, de headers en de body. Geef een status, headers als tekst en een body terug.

hello-function / main Node.js
index.mjs handler(request)
export async function handler(request) {
  const input = request.body
    ? JSON.parse(request.body)
    : {};

  return {
    status: 200,
    headers: {
      "content-type": "application/json"
    },
    body: JSON.stringify({
      message: `Hello, ${input.name ?? "world"}`,
      method: request.method,
      path: request.path
    })
  };
}
function.json hoofdmap van de repository
{
  "lang": "node",
  "tier": 128,
  "entry": "index.mjs",
  "timeout_s": 10
}
aanroep 200 · application/json
$ curl -X POST \
  -H "content-type: application/json" \
  -d '{"name":"Ada"}' \
  https://hello-function.sarpius.app/hello

{"message":"Hello, Ada","method":"POST","path":"/hello"}

Functionaliteit

Een volwaardig onderdeel van je Project.

Functions staan naast je componenten, databases en buckets. De console houdt uitrol, verkeer en kosten op één plek bij elkaar.

Van git naar live

Elke push naar de ingestelde branch start een build. Metingen in productie laten een geslaagde versie na ongeveer 25 seconden live staan.

Atomaire versiewissel

De actieve versie verandert pas nadat de nieuwe build is geslaagd. Bestaand verkeer blijft de vorige versie bereiken tot de activatie.

Onderdeel van je Project

Functions krijgen een eigen sectie in de Project-zijbalk en delen routing en leden met de rest van de app.

Een gewoon request-object

Elke aanroep krijgt de methode, het gerouteerde pad, de ruwe query, gefilterde headers en een UTF-8-body, en geeft een status, headers als tekst en een body terug.

Logs en latentie

Lees buildlogs, recente aanroepen en de aantallen verzoeken en fouten per uur. De console houdt de p50- en p95-latentie van aanroepen bij.

Wallet en harde limieten

Het verbruik komt uit dezelfde wallet als de rest van Sarpius. Stel een maandlimiet in euro in voor één functie of voor het hele Project.

Triggers

Beantwoord een verzoek of draai op schema.

Beide triggertypes gebruiken dezelfde actieve versie, budgetcontroles, verbruiksmeter en microVM-isolatie.

HTTP

Een URL die bij je Project hoort

Gebruik een gratis *.sarpius.app-subdomein of koppel de functie aan een Project-route zoals /api/hello. Methode, pad, query, headers en body bereiken de handler.

POSTapi.example.com/api/hello?lang=en
methodepadquerybody
Cron

Geplande taken zonder worker

Gebruik een standaard cron-expressie met vijf velden en een IANA-tijdzone. Voeg tot 10 schema's toe aan één functie voor rapportages, opruimwerk en terugkerende koppelingen.

15 8 * * 1-5
Europe/Amsterdam
Hooguit één keer

Een geclaimd tijdslot wordt na een crash nooit opnieuw geprobeerd. Gemiste tijdsloten worden later niet ingehaald, zodat een herstel van de planner geen bijwerkingen twee keer kan uitvoeren.

Tarieven

Betaal alleen voor werk dat draait.

Rekentijd wordt gemeten in GiB-seconden, daarna komt het aantal aanroepen erbij. Het gratis maandtegoed wordt eerst verrekend, over de rekening die uit je wallet wordt betaald.

Rekentijd
€0,000016
per GiB-seconde
Aanroepen
€0,20
per miljoen aanroepen

Elke maand, vóór betaald verbruik

100.000 GiB-seconden en 1.000.000 aanroepen zijn gratis. Er wordt in hele centen afgerekend, naar beneden afgerond, en een restant blijft in je verbruik staan tot het samen een cent is. Er is geen minimumbedrag.

Binnen het gratis tegoed

Kleine API

€0,00/ maand

128 MiB, gemiddeld 200 ms, 1.000.000 aanroepen

128/1024 × 0,2 × 1.000.000 = 25.000 GiB-s

25.000 ligt onder de 100.000 gratis; 1.000.000 aanroepen zijn gratis → €0,00

Drukke webhook

Vijf miljoen aanroepen

€4,20/ maand

128 MiB, gemiddeld 500 ms, 5.000.000 aanroepen

128/1024 × 0,5 × 5.000.000 = 312.500 GiB-s

(312.500 - 100.000) × €0,000016 = €3,40 rekentijd

(5.000.000 - 1.000.000) / 1.000.000 × €0,20 = €0,80 aanroepen → €4,20

Zwaardere taak

Twee miljoen aanroepen

€6,60/ maand

256 MiB, gemiddeld 1 seconde, 2.000.000 aanroepen

256/1024 × 1 × 2.000.000 = 500.000 GiB-s

(500.000 - 100.000) × €0,000016 = €6,40 rekentijd

(2.000.000 - 1.000.000) / 1.000.000 × €0,20 = €0,20 aanroepen → €6,60

Kosten worden afgeschreven van je bestaande Sarpius-wallet. Bij de afrekening wordt eerst het gratis maandtegoed toegepast. Per functie en per Project kun je een maandlimiet instellen. De veiligheidscontrole daarvan rekent met het bruto verbruik vóór gratis tegoed, dus hij kan eerder stoppen dan de uiteindelijke factuur. Is een limiet bereikt, of blokkeert de afrekening de functie omdat de wallet leeg is, dan krijgen nieuwe HTTP-verzoeken 402 Payment Required en wordt er geen microVM gestart.

Waarborgen

Het nuttige deel is wat de runtime weigert.

Deze grenzen worden door de dienst afgedwongen. Het zijn geen vrijblijvende richtlijnen in een dashboard.

Een microVM-grens

Elke actieve aanroep krijgt een Firecracker-microVM-grens in plaats van een gedeelde applicatiecontainer. Warme VM's kunnen achtereenvolgens opnieuw worden gebruikt voor dezelfde functieversie, nooit gelijktijdig over klanten heen.

Vaste geheugentiers

Kies 128, 256 of 512 MiB in function.json. De tier wordt voor de microVM afgedwongen en is ook de basis voor de meting in GiB-seconden.

Maximaal 60 seconden

Een manifest kan een timeout van 1 tot 60 seconden instellen. Bij een timeout volgt 504 en wordt de VM vernietigd, in plaats van een onzekere instantie terug in de warme pool te zetten.

De infrastructuur faalt gesloten

Kan de platformdatabase, de verbruiksschrijver of de uitgaande-verkeerswacht van de host niet aantonen dat hij gereed is, dan geeft de dienst 503 en draait er geen klantcode gratis of buiten het beleid.

Het budget is een harde stop

Een bereikte functielimiet, Project-limiet of afrekenblokkade geeft HTTP 402 voordat er een VM wordt gestart. Het verzoek gaat niet door en veroorzaakt geen extra kosten.

Cron draait hooguit één keer

De planner legt een tijdslot vast vóór het versturen. Een crash kan één run laten vervallen, maar dat tijdslot wordt nooit opnieuw afgespeeld terwijl bijwerkingen mogelijk al hebben plaatsgevonden.

Veelgestelde vragen

Vragen vóór de eerste push.

Hoe snel staat een nieuwe versie live?

Metingen in productie laten ongeveer 25 seconden zien van push tot actieve versie. De bouwtijd hangt nog steeds af van de repository en de afhankelijkheden. De vorige versie blijft antwoorden tot de nieuwe actief wordt.

Wat gebeurt er als een build mislukt?

Activatie gebeurt alleen na een geslaagde build. Een mislukte build zie je in het Project met het bijbehorende log, terwijl de laatst actieve versie live blijft.

Delen twee klanten ooit een functiecontainer?

Er draait geen gedeelde applicatiecontainer met klantfuncties. Elke actieve aanroep krijgt een Firecracker-microVM-grens. Een warme VM kan worden gepauzeerd en later opnieuw worden gebruikt voor dezelfde functieversie, waarbij de klok wordt ververst vóór de volgende aanroep.

Welke runtimes zijn beschikbaar?

Node.js en Python zijn beschikbaar in de gesloten bèta. Het manifest gebruikt lang: "node" of lang: "python", met een geëxporteerde of gedefinieerde handler(request).

Wat krijgt een functie van een HTTP-trigger binnen?

De handler ontvangt de methode, het gerouteerde pad, de ruwe query, gefilterde headers en een UTF-8-body. Hij geeft een HTTP-status, headerwaarden als tekst en een antwoordbody terug.

Wat gebeurt er bij de bestedingslimiet?

De dienst geeft HTTP 402 voordat er een microVM wordt gestart. Hetzelfde antwoord geldt wanneer de afrekening de functie heeft geblokkeerd omdat de wallet verder verbruik niet kan dekken.

Meer details nodig? Lees de documentatie van Sarpius Functions.

Gesloten bèta

Push de functie. Houd het Project.

Zet serverless werk neer naast de code, data, routes en mensen waar het bij hoort. Betaal voor echte uitvoering en stop automatisch bij de limiet die je instelt.