Logo Aurabase
aurabasedocuments
documents›Edge Functions›Errors, timeouts and retries

Erreurs, délais d'attente et tentatives

Comment lire ce que invoke renvoie en cas de problème et quand vous pouvez rappeler en toute sécurité.

9 min de lecture·Niveau intermédiaire·Révisé le 12 oct. 2026
Ce texte anglais a été généré automatiquement à partir de l’original français et n’a pas encore été relu.
Cette page a été traduite automatiquement. La version anglaise fait foi.
#
Anatomie

1. L'objet d'erreur

invoke renvoie { data, error } et ne lance jamais. error est un AuraError, donc isAuraError(error) est vrai. Deux sous-classes vous indiquent qui a échoué:

classify.tstypescript
import { FunctionsHttpError, FunctionsRelayError } from '@aurabase/aurabase-js'

const { data, error } = await aura.functions.invoke('checkout', { body })

if (error instanceof FunctionsHttpError) {
  // Votre fonction a répondu, avec un statut d'erreur. Déboguez votre code.
} else if (error instanceof FunctionsRelayError) {
  // La plateforme a échoué : la réponse de votre fonction n'est jamais revenue.
} else if (error) {
  // L'appel a été annulé ou refusé sur le client (timeout, invalid_body, no_session).
}
ChampSignification
error.statusStatut HTTP. 0 signifie que l'échec s'est produit sur le client (pas de réponse).
error.codeIdentifiant stable, par exemple NOT_FOUND, QUOTA_EXCEEDED, timeout, invalid_body.
error.messageLe texte renvoyé par votre fonction ou l'explication de la plateforme.
error.contextSur un FunctionsHttpError: le corps renvoyé par votre fonction (JSON ou texte analysé).
error.detailsLe corps d’erreur brut. Pour une erreur de plateforme, il contient error.request_id.
#
Diagnostic

2. De quelle erreur s’agit-il ?

Comportements observés par rapport à une pile en cours d’exécution. La ligne de quota suit le mappage des erreurs du backend et n'a pas été déclenchée lors de nos tests.

Que s'est-il passéClassestatuscodemessage
La fonction n'existe pasFunctionsHttpError404NOT_FOUND"…Fonction 'non' introuvable"
Votre fonction renvoie 500 avec du texteFunctionsHttpError500http_500ce texte
Votre fonction renvoie elle-même 503FunctionsHttpError503http_503ce que tu as rendu
Votre fonction lanceFunctionsHttpError500http_500"Erreur interne du serveur"
Votre fonction dépasse son timeout_secsFunctionsHttpError500 ou 503http_500 / http_503"L'exécution de la fonction a échoué" ou "La fonction a renvoyé HTTP 503"
Le runtime est inaccessibleFunctionsRelayError503SERVICE_UNAVAILABLEexplique que la fonction était et non exécutée
Le réseau échoue avant toute réponseFunctionsRelayError0network_errorl'erreur réseau
Quota du plan épuiséFunctionsHttpError403QUOTA_EXCEEDEDle message des quotas
Trop d'appels d'un clientFunctionsHttpError429rate_limit_exceededmessage d'attente
Corps de la demande trop grandFunctionsRelayError503SERVICE_UNAVAILABLE"taille maximale de la charge utile dépassée"
Vous avez annulé ou votre timeout est écouléAuraError0timeout"Invocation de fonction interrompue ou expirée"
Le corps ne peut pas être envoyé en JSONAuraError0invalid_bodynomme le type à éviter
Un 503 de votre fonction n'est pas une panne de plateforme

Si votre propre code renvoie 502, 503 ou 504, vous obtenez un FunctionsHttpError: la classe vous indique qui a répondu, pas quel est le numéro de statut.

Deux échecs ressemblent à autre chose

Un corps de requête supérieur à environ 256 Ko est rejeté avec 503 SERVICE_UNAVAILABLE, et une réponse d'environ 300 Ko ou plus n'est pas renvoyée dans notre test de 50 secondes. Voir limites . Réessayer n’aide pas ; envoyez moins de données ou utilisez le stockage.

#
Réessayer

3. Décidez si vous devez réessayer

Le SDK ne relance jamais une invocation à votre place : votre fonction peut avoir des effets secondaires et un POST répété n'est pas sûr par défaut. Vous décidez, à l’aide du tableau ci-dessous.

ÉchecLa fonction a-t-elle été exécutée ?Vous pouvez réessayer en toute sécurité ?
503 depuis la plateforme (FunctionsRelayError)Non, le runtime était inaccessibleOui, avec un court recul
429NonOui, après le délai de error.retryAfter
403 QUOTA_EXCEEDEDNonNon, jusqu'à ce que le quota soit réinitialisé ou que vous changiez de forfait
status 0 (network_error)InconnuUniquement si votre fonction est idempotente
timeout sur le clientInconnuUniquement si votre fonction est idempotente
FunctionsHttpError 5xxOui, partiellement ou entièrementUniquement si votre fonction est idempotente
FunctionsHttpError 4xxOuiNon : corrigez la demande
retry.tstypescript
import { FunctionsRelayError } from '@aurabase/aurabase-js'

async function invokeWithRetry(name: string, body: unknown, attempts = 3) {
  for (let i = 0; i < attempts; i++) {
    const res = await aura.functions.invoke(name, { body })
    const safe = res.error instanceof FunctionsRelayError && res.error.status === 503
    if (!res.error || !safe) return res
    await new Promise((r) => setTimeout(r, 2 ** i * 500))
  }
  return aura.functions.invoke(name, { body })
}
Rendre la fonction idempotente à la place

La plateforme ne déduplique pas les appels et ignore Idempotency-Key. Pour les paiements ou les e-mails, stockez une clé que vous passez dans body et vérifiez-la au démarrage de la fonction.

#
Temps

4. Délais d'attente

Trois horloges fonctionnent en même temps :

HorlogePar défautOù le changer
Votre client30 s pour chaque responseTypeinvoke(…, { timeout }), { signal } ou requestTimeoutMs dans les options client
La fonction30 s, entre 1 et 300permissions.timeout_secs sur la fonction
La passerelle380 snon configurable par projets

Lorsque la fonction dépasse timeout_secs, le runtime l'annule et votre appel échoue après environ ce délai, avec le 500 ou 503 indiqué ci-dessus. La cause apparaît dans error.context.detail (WorkerRequestCancelled: request has been cancelled by supervisor) en mode brut. Définissez votre client timeout légèrement au-dessus du timeout_secs de la fonction pour voir cette erreur au lieu d'un client timeout.

timeout.tstypescript
const { error } = await aura.functions.invoke('report', { timeout: 35_000 })
if (error?.code === 'timeout') {
  // Annulé par votre client. La fonction est peut-être toujours en cours d'exécution.
}

Pour un travail de plus de quelques secondes, met en file d'attente une tâche au lieu de maintenir une connexion ouverte.

#
Débogage

5. Trouvez la cause

  • Les erreurs de plate-forme portent un identifiant de demande : error.details.error.request_id. Citez-le lorsque vous contactez le support.
  • aura functions logs <name> répertorie les requêtes HTTP récentes avec la méthode, le chemin, le statut, la durée et l'identifiant de la requête. et non montrent ce que votre fonction a écrit avec console.log ou console.error: cette sortie reste dans les propres journaux du runtime, que seul l'opérateur de la plate-forme peut lire. Voir les limites pour cela et les autres écarts de courant.
  • L'identifiant de l'appel n'est pas transmis à votre fonction. Transmettez votre propre identifiant dans headers et enregistrez-le.
Dernière mise à jour · 12 oct. 2026