Funktioner
Kör små kodstycken vid en HTTP-förfrågan eller enligt ett schema, samlade i funktionsnamnutrymmen som ger dem ett värdnamn, gemensamma inställningar och en identitet.
En funktion är ett litet kodstycke som plattformen kör när en HTTP-förfrågan kommer in eller enligt ett schema. Du skriver hanteraren; plattformen bygger den till en containeravbild, kör den och dirigerar förfrågningar till den. En funktion kan vila medan ingenting anropar den; se Skala ned till noll för när den gör det.
Namnutrymmen och funktioner
- Ett funktionsnamnutrymme är en resurs i en resursgrupp. Det ger sina funktioner ett
gemensamt värdnamn,
<namespace>.fn.apps.example.com, miljövariabler som alla får och en managed identity som alla delar. - En funktion hör till exakt ett namnutrymme. Den har en körmiljö, en trigger, sin kod och egna inställningar: miljövariabler, hemlighetsreferenser och autentisering.
- Funktionsnamn är unika inom resursgruppen, inte bara inom namnutrymmet: två namnutrymmen i samma
resursgrupp kan inte båda ha en funktion som heter
hello.
Triggrar
| Trigger | När funktionen körs |
|---|---|
| HTTP | När en förfrågan kommer till https://<namespace host>/<route>. Portalen ger varje funktion rutten /<function name>. Se Referens för funktionshanteraren. |
| Timer | Enligt ett cron-schema med fem fält, som tolkas i UTC. En timerfunktion har ingen publik adress. Se Timertriggrar. |
En tredje triggertyp, Queue, finns i API:ets modell, men att skapa en köfunktion, eller ändra en funktion till en, avvisas: ingenting levererar kömeddelanden till funktioner ännu.
Körmiljöer
Portalen erbjuder Node.js / TypeScript, .NET och Go; det finns ingen version att välja.
- Node.js-funktioner körs på Node.js 22. Koden du skriver i portalen sparas som en enda
JavaScript-fil,
handler.js, och laddas som en ES-modul. - .NET- och Go-funktioner kan inte byggas från portalen i dag. Portalen sparar koden som
en enda fil utan den projektfil som bygget behöver (
.csprojellergo.mod), så bygget misslyckas. Använd Node.js.
Var koden kommer ifrån
| Källa | Hur koden kommer in |
|---|---|
| Portal | Du skriver koden på funktionens flik Kod och väljer Distribuera. Plattformen bygger en avbild och driftsätter den. Se Skapa och hantera funktioner. |
| Extern | Med CLI:t eller API:et pekar du funktionen på en containeravbild som byggts någon annanstans, till exempel i din egen pipeline. Se Kör en avbild från din egen pipeline. |
Att bygga en funktion från ett Git-repo är inte möjligt: portalen erbjuder det inte och API:et har inget fält för ett repo. Funktioner använder inte boundaryns distributionskällor.
Hur en förfrågan når en funktion
Varje funktionsnamnutrymme kör en egen liten proxy, fnproxy-<namespace>. Namnutrymmets värdnamn
pekar på den, och för varje förfrågan gör den följande:
- väljer den HTTP-funktion vars rutt matchar sökvägen — själva rutten eller en sökväg under den, den längsta matchande rutten först;
- svarar
405 Method Not Allowednär funktionen inte tar emot metoden; - kontrollerar anroparens token när funktionen har autentisering påslagen — se Skydda en funktion med en token;
- väcker funktionen om den har skalats ned till noll, och väntar upp till 30 sekunder på att den startar;
- skickar vidare förfrågan med sökväg och frågesträng oförändrade.
Samma proxy kör timerscheman och stoppar overksamma funktioner — se Skalning och resurser.
Viktigt
Varje namnutrymmes proxy arbetar med alla funktioner i resursgruppen, inte bara med funktionerna i det egna namnutrymmet. Med fler än ett funktionsnamnutrymme i en resursgrupp gäller:
- en funktion i ett namnutrymme kan också anropas på värdnamnet för vart och ett av de andra funktionsnamnutrymmena i resursgruppen, och svaret
404listar rutterna för dem alla;- rutter kontrolleras mot varandra bara inom ett namnutrymme. En funktion i ett annat namnutrymme vars rutt är längre, till exempel
/hello/adminbredvid/hello, tar över sökvägarna under den på alla värdnamn och får det som anropare skickar dit, ävenAuthorization-huvuden;- varje proxy kör varje timerschema, så en timerfunktion körs en gång per funktionsnamnutrymme i resursgruppen vid varje schemalagd tid;
- varje proxy stoppar funktioner som den inte har sett anropas under deras avkylningsperiod, så en funktion kan stoppas medan den anropas via ett annat namnutrymmes värdnamn.
Lägg funktionsnamnutrymmen som måste hållas isär, och timerfunktioner, i olika resursgrupper.
Se upp
Proxyn svarar också på
/_api/functions, ett hanteringsgränssnitt utan någon tokenkontroll. Det listar resursgruppens funktioner med deras rutter och interna adresser, och det kan stoppa och starta om dem och ändra de replikantal som proxyn håller i minnet. En funktion som stoppas där svarar503 {"error": "Function '<name>' is stopped."}på den proxyn, och dess timer körs inte, tills den startas om där, funktionens resurs ändras eller proxyn startar om. För en funktion som byggs från portalen ändras resursen ungefär en gång i minuten, så ett sådant stopp varar ungefär en minut. Arbetslaster i alla resursgrupper i boundaryn når proxyn inuti klustret. På plattformar vars ingress är Traefik routas/_apiinte från namnutrymmets värdnamn; på andra plattformar nås det från internet påhttps://<namespace host>/_api/functions.
Vad funktionerna i ett namnutrymme delar
- Miljövariabler som sätts på namnutrymmet når alla funktioner i det; en funktions egen variabel med samma namn vinner.
- Managed identity hör till namnutrymmet. Varje funktion i det körs som den identiteten, så en roll som du ger identiteten är tillgänglig för alla — se Hemligheter och managed identity.