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:
stsh functions deployments my-namespace -g my-resource-group -o jsonEtt misslyckat bygge har fasen
Failedoch ett meddelande som börjar medBuild #… 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 /healthzpå 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 —
/hellooch/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.
- Namnutrymmets namn är längre än 55 tecken, så det har ingen proxy — se Grundkonfiguration.
- Proxyn är nere — se Namnutrymmets proxy.
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
audinnehå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.
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.