Hoppa till innehållet
Stackship-dokumentation English

FunktionerAnvändareMaskinöversatt

Felsök funktioner

Vad du ska kontrollera när en funktion inte driftsätts, inte startar, svarar med ett fel eller inte körs enligt schemat.

Funktionen stannar i AwaitingDeployment

  • Ingen kod har distribuerats ännu. Öppna funktionens flik Kod och välj Distribuera.

  • Det första bygget misslyckades. Portalen visar inte misslyckade byggen. Lista namnutrymmets byggen med CLI:t:

    bash
    stsh functions deployments my-namespace -g my-resource-group -o json

    Ett misslyckat bygge har fasen Failed och ett meddelande som börjar med Build #… failed. Byggets egen utskrift finns inte tillgänglig för dig.

  • Körmiljön är .NET eller Go. Deras byggen misslyckas när koden kommer från portalen — se Körmiljöer.

Node.js-kod kompileras inte när den byggs, så ett fel i den syns när funktionen startar, inte i bygget.

En distribution ändrar ingenting

När ett senare bygge misslyckas fortsätter den förra versionen att köra och funktionens status ändras inte. Kontrollera byggena som ovan.

Funktionen startar inte

En replik som inte kan starta låter anroparna vänta; efter 30 sekunder får de 504 Function cold start timeout. Statusen visar Error när plattformen har sett den felande repliken; en funktion som skalas ned till noll kan fortsätta att visa Sleeping. Vanliga skäl:

  • Koden misslyckas när den laddas eller startar — ett syntaxfel, syntax som bara finns i TypeScript, import av en modul som inte är inbyggd, eller en modul utan någon funktion att anropa. Öppna Loggar medan repliken startar för att se felet.
  • Dess hemligheter kan inte hämtas. Namnutrymmets managed identity behöver Secrets Reader på varje valv som funktionen refererar till, och hemligheterna måste finnas och vara aktiverade — se Hemligheter och managed identity. Det här felet inträffar innan funktionens egen kod körs, så Loggar visar ingenting om det.
  • En egen avbild svarar inte på GET /healthz på port 8080 — se Vad avbilden måste göra.
  • Klustret har inte plats för ännu en replik med funktionens CPU och minne.

404 No function found at this path

  • Sökvägen matchar inte funktionens rutt. En HTTP-funktion svarar på sin rutt och på sökvägar under den — /hello och /hello/x, inte /hellothere. Svaret listar de rutter som finns.
  • Funktionen är en timerfunktion; sådana har ingen rutt.

404 eller 503 utan den här JSON-kroppen

Ett 404 eller 503 som inte har JSON-svaret ovan kommer från plattformens ingress, inte från namnutrymmets proxy: förfrågan hittade ingen proxy att gå till.

405 Method not allowed

Funktionen tar inte emot metoden; huvudet Allow listar de metoder den tar emot. Ändra metoderna — se Ändra rutten eller metoderna.

401

Funktionen har autentisering påslagen och anropets token saknades eller godtogs inte. Kontrollera:

  • att anropet skickar Authorization: Bearer <token>;
  • att Issuer URL är exakt tokens iss, utan extra snedstreck på slutet, och inte tom;
  • att tokens aud innehåller Audience, när en sådan är angiven;
  • att token inte har gått ut;
  • att utfärdaren går att nå från klustret.

Se Vad som kontrolleras.

504 Function timed out

Hanteraren körde längre än sin tidsgräns, 300 sekunder om du inte har kortat den — se Tidsgräns. Hanteraren fortsätter att köra efter att anroparen har fått svaret.

Det första anropet är långsamt

En funktion med minst 0 replikor vilar, och anropet som väcker den väntar medan den startar. En funktion som byggs från portalen vilar bara fram till sitt första anrop; en som kör en egen avbild vilar igen efter varje avkylningsperiod — se Skala ned till noll. Håll en funktion varm med ett minimum på 1 — se Håll en funktion varm.

En timer körs inte när den ska

  • Scheman körs i UTC, oavsett vad fältet Tidszon sa — se Tidszon.
  • En körning som fortfarande pågår när nästa tidpunkt kommer gör att proxyn hoppar över den tidpunkten.
  • Misslyckade körningar görs inte om, och tidpunkter som missas medan proxyn startar om körs inte i efterhand.
  • En timer som körs mer än en gång vid samma tidpunkt ligger i en resursgrupp med mer än ett funktionsnamnutrymme: varje namnutrymmes proxy kör den — se Överlappande körningar.
  • En funktion som har stoppats via proxyns hanteringsgränssnitt kör ingen timer så länge den är stoppad — se Hur en förfrågan når en funktion.
  • Funktionen måste kunna starta — se Funktionen startar inte.

Logga från din hanterare så att varje körning syns i funktionens Loggar.

En inställning på namnutrymmet når inte en funktion

  • Miljövariabler som sätts på namnutrymmet når funktioner som körs inom ungefär en minut. En vilande funktion får dem nästa gång den distribueras eller någon av dess inställningar sparas.
  • Skalning, beräkningsplan och autentisering som sätts på namnutrymmet når inte alls dess funktioner i dag — se Namnutrymmets standardvärden och Namnutrymmets standardvärden.

Namnutrymmets proxy

Varje anrop och varje timerkörning går via namnutrymmets proxy, fnproxy-<namespace>, som är en enda replik. Medan den ligger nere går ingen funktion att nå på namnutrymmets värdnamn och proxyn kör inga timrar. När den startar om börjar timerschemana om, och dess uppgift om när varje funktion senast användes börjar om från noll, så en overksam funktion kan köra en avkylningsperiod längre innan den vilar.